5、爬虫-数据的提取-xpath-html中提取
从哪里提取:html、json、xml
实现方式:正则、截取、xpath、css、bs4
这里使用xpath工具:
·安装:pip install lxml
""" 使用xpath工具 提取网页中视频的标题 """ import requests from lxml import etree #使用xpath headers = { "User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/120.0.0.0 Safari/537.36" } url = "https://www.xinpianchang.com/discover/article-49-0?utm_source=xpcWeb&utm_medium=navigatorCate&index=11" #获取数据 response = requests.get(url,headers=headers) #将内容转化为html格式 tree = etree.HTML(response.text) #使用xpath语法提取 #//表示 从匹配选择的当前节点选择文档中的节点(这里取h2节点),而不考虑它们的位置、@ 选取属性-这里选取class属性 element = tree.xpath('//h2[@class="truncate block"]') #element = tree.xpath('//h2[@title="「建议冬至放一天假」-饿了么x许知远-时令"]') href_g = tree.xpath('//div[@class="truncate"]') ele = element[0] print(f"{ele.text}") hr_g = href_g[0] print(f"{hr_g.text}") #遍历所有 for all in element: print(f"{all.text}")
提取网页中的视频:
""" 一般使用xpath提取要一层一层的提取才能保证准确性 这里提取视频的标题和播放量和点赞量 """ import requests from lxml import etree headers = { "User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/120.0.0.0 Safari/537.36" } url = "https://www.xinpianchang.com/discover/article-49-0?utm_source=xpcWeb&utm_medium=navigatorCate&index=11" #请求返回内容 response = requests.get(url, headers=headers) #将获取到的转为html格式、方便使用xpath语法提取 tree = etree.HTML(response.text) #使用xpath提取 #先提取最外层的、再提取单个 #注意:contains()函数表示包含 、这里表示包含属性class中的关键字"grid" -其实class="grid grid-cols-1 ...." 提取关键字即可 #text()函数表示直接提取文本内容 video_list_one = tree.xpath('//main/div/div[contains(@class,"grid")]')[0] #第一层路径 [0]表示只拿同级的第一个元素 video_list_two = video_list_one.xpath('./div[contains(@class,"sc")]')[0] #第二层路径 ./表示从当前路径开始 video_list_title = video_list_two.xpath('./div/div/a/h2/text()') #text()函数直接取文本内容 #提取播放量和点赞量、从第二层开始提 play_count = video_list_two.xpath('./div/a/div/ul/li[1]/span[2]/text()') prise_count = video_list_two.xpath('./div/a/div/ul/li[2]/span[2]/text()') # #这里是先取网页中的第一个视频的内容 # print(f"{video_list_one}") # print(f"{video_list_two}") # print(f"视频标题为:{video_list_title}-播放量为:{play_count}-点赞量:{prise_count}") ####################################################################################################### #整合代码、提取网页中全部视频的标题、播放量和点赞量 video_lists_one = tree.xpath('//main/div/div[contains(@class,"grid")]')[0] #第一层路径 [0]表示只拿同级的第一个元素 video_lists_two = video_list_one.xpath('./div[contains(@class,"sc")]') #第二层路径 ./表示从当前路径开始 for video_list in video_lists_two: #遍历拿到每一个视频的标题 video_lists_title = video_list.xpath('./div/div/a/h2/text()') #遍历每一个视频的播放量 video_lists_play_counts= video_list.xpath('./div/a/div/ul/li[1]/span[2]/text()') #遍历每一个视频的点赞量 video_lists_pries_counts = video_list.xpath('./div/a/div/ul/li[2]/span[2]/text()') print(f"视频标题:{video_lists_title},播放量:{video_lists_play_counts},点赞量:{video_lists_pries_counts}")
本文作者:little小新
本文链接:https://www.cnblogs.com/littlecc/p/17949746
版权声明:本作品采用知识共享署名-非商业性使用-禁止演绎 2.5 中国大陆许可协议进行许可。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步