纵使杯中|

little小新

园龄:2年6个月粉丝:8关注:0

2024-07-01 22:23阅读: 45评论: 0推荐: 0

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 中国大陆许可协议进行许可。

posted @   little小新  阅读(45)  评论(0编辑  收藏  举报
点击右上角即可分享
微信分享提示
评论
收藏
关注
推荐
深色
回顶
收起