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}")

posted @ 2024-07-01 22:23  little小新  阅读(141)  评论(0)    收藏  举报