十年网站开发经验 + 多家企业客户 + 靠谱的建站团队
量身定制 + 运营维护+专业推广+无忧售后,网站问题一站解决
小编给大家分享一下关于xpath网页解析神器的介绍,希望大家阅读完这篇文章后大所收获,下面让我们一起去探讨吧!
公司主营业务:成都网站建设、网站设计、移动网站开发等业务。帮助企业客户真正实现互联网宣传,提高企业的竞争能力。创新互联是一支青春激扬、勤奋敬业、活力青春激扬、勤奋敬业、活力澎湃、和谐高效的团队。公司秉承以“开放、自由、严谨、自律”为核心的企业文化,感谢他们对我们的高要求,感谢他们从不同领域给我们带来的挑战,让我们激情的团队有机会用头脑与智慧不断的给客户带来惊喜。创新互联推出龙门免费做网站回馈大家。
使用XPath提取猫眼电影排行榜前100名。https://maoyan.com/board/4
XML介绍
XML称为可扩展标记语言,XML是互联网数据传输的重要工具,它可以跨越互联网任何的平台,不受编程语言和操作系统的限制,可以说它是一个拥有互联网最高级别通行证的数据携带者。非常类似HTML。
HTML 和 XML的区别在于HTML主要用来显示数据,XML是用来传输数据。
XML都是标签闭合的。例如: … 成对出现。
冰与火之歌 乔治 马丁 2005 365.00 哈利波特与死亡圣器 J K. 罗琳 2005 48.98 Python编程-从入门到放弃 挖掘机小王子 2048 99.00 Python编程-从看懂到看开 尼古拉斯-赵四 2003 39.95
在上面的xml
语法中存在父子,先辈等关系。
XPath介绍
XPath (XML Path Language) 是一门在 XML 文档中查找信息的语言,可用来在 XML/HTML 文档中对元素和属性进行遍历,并提取相应元素。
也是一种数据提取方式,只不过针对的是HTML/XML数据,因为爬虫主要和HTML页面打交道。
XPath匹配规则
下表是XPath常用的规则:
lxml库
lxml 是一个Python第三方模块。主要的功能是如何解析和提取 HTML/XML 数据。
lxml和正则类似,是一款高性能的 Python HTML/XML 解析器,我们可以利用之前学习的XPath语法,来快速的定位特定元素以及节点信息。
pip install lxml
失败的话指定下载源用 pip install lxml -i https://pypi.douban.com/simple 豆瓣源
再安装 parsel 时会自动安装 lxml,这里就不需要再次安装了。
使用lxml模块
初始化生成一个XPath解析对象,同时可以自动补全残缺的HTML标签。传入网页源码。
from lxml import etree string = """""" # 再解析之前必须先转化一下 html = etree.HTML(string) # 返回结果是列表 result = html.xpath("//book[contains(@cover,'paper')]/title/text()") result = html.xpath("//book[4]/title/text()") print(result) Python编程-从看懂到看开 Python编程 2003 39.95
因为 parsel
对 lxml
进行了, 所以可以直接再 parsel 中无缝切换使用 xpath 。
使用XPath选取指定内容。括号里面书写XPath语法规则。返回列表。
# -*- coding: utf-8 -*- import requests import parsel headers = { 'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/77.0.3865.90 Safari/537.36' } response = requests.get('https://maoyan.com/board/4?offset=0', headers=headers) html = response.text # %% 选择任意节点 sel = parsel.Selector(html) # 提取 p 标签 ps = sel.xpath('//p') for p in ps: print(p.get())
''' 猫眼电影: https://maoyan.com/board/4?offset=20 函数式: 1. 获取(请求)一页的函数 2. 定义解析函数(解析一页) 3. 写入文件函数 4. 循环函数 5. python学习交流群:695185429 ''' import json import requests from lxml import etree # 获取响应 def getOnePage(url): '''获取一页的响应的函数''' response = requests.get(url) return response.text # 解析响应 --> 结果 def parseOnePage(text): # 初始化解析 html = etree.HTML(text) # 里面有所有的数据 先选择上一层 这一层里面包含所有数据 然后循环遍历 data = html.xpath('//dl[@class="board-wrapper"]') # 遍历提取所有的元素 for dat in data: print(dat) # 继续选取 # 标题 title = dat.xpath('.//div//a/text()') # 主演 star = dat.xpath('.//p[@class="star"]/text()') # 时间 releasetime = dat.xpath('//p[@class="releasetime"]/text()') for tit, sta, rel in zip(title, star, releasetime): # 在函数里面遇到return就终止 # 生成器 yield { '电影名字': tit, '主演': sta.strip(), '上映时间': rel } def save2File(data): # with open('maoyan66.txt', 'a', encoding='utf-8') as fp: # fp.write(data+'\n') with open('maoyan66.txt', 'a', encoding='utf-8') as fp: fp.write(json.dumps(data, ensure_ascii=False)+'\n') if __name__ == "__main__": for page in range(10): # 一页网址 url = f'https://maoyan.com/board/4?offset={page*10}' # 调用 r = getOnePage(url) # 解析数据 返回生成器 result = parseOnePage(r) for res in result: # with open('maoyan.txt','a',encoding='utf-8') as fp: # # 打印到文件 # print(str(res), file=fp) save2File(str(res))
看完了这篇文章,相信你对关于xpath网页解析神器的介绍有了一定的了解,想了解更多相关知识,欢迎关注创新互联行业资讯频道,感谢各位的阅读!