解决Python用xpath爬取不到数据的一个思路

前言

最近在学习Python爬虫的知识,既然眼睛会了难免忍不住要实践一把。

不废话直接上主题

代码不复杂,简单的例子奉上:

import requests
from lxml import etree


cookie = '浏览器F12网络请求标头里有'
user_agent = '浏览器F12网络请求标头里有'
# 具体的方法网上有很多这里不是叙述的重点

headers= {
    'User-Agent': user_agent,
    'Cookie': cookie,
    'Host': 'fanqienovel.com',
    'Connection': 'keep-alive'
}

url = "https://****"

# 使用get方法请求网页
resp = requests.get(url, headers=headers)

# 将网页内容按utf-8规范解码为文本形式
content = resp.content.decode('utf-8')

# 将文本内容创建为可解析元素
html = etree.HTML(content)

# 获取1
title1 = html.xpath('//*[@id="app"]/div/div[2]/div/div[1]/div/div[2]/div[2]/div[1]/h1/text()')[0]

# 获取2
title2 = html.xpath('//*[@id="app"]/div/div/div/div[1]/div/div[2]/div[2]/div[1]/h1/text()')[0]

“获取1”是页面打开后直接复制的XPath路径,但根据这个路径获取不到数据,见截图。

但content是有内容的,参阅网上的方案都未决解,但提供了思路。

是网站做了反爬虫处理,复制的XPath不准确导致的,想了个办法将content的内容复制到txt文档,然后修改为html的后缀用浏览器打开,在新的网页下重新复制XPath就得到了“获取2”的路径,可以发现1和2路径是有差异的。

问题到这就解决了。

以下分别给出爬取豆瓣Top250电影和书籍数据并直接打印的代码示例。 ### 爬取豆瓣Top250电影数据 ```python from lxml import etree import requests import re alllist = [] url = "https://movie.douban.com/top250" header = { "User-Agent": "Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/70.0.3538.25 Safari/537.36 Core/1.70.3877.400 QQBrowser/10.8.4506.400" } html = requests.get(url, headers=header).text Music = etree.HTML(html) lis = Music.xpath('//ol[@class="grid_view"]/li') for one in lis: MusicTitle = one.xpath('div/div[2]/div[@class="hd"]/a/span[1]/text()')[0] # 电影名称 pingjia = one.xpath('div/div[2]/div[@class="bd"]/div/span[4]/text()')[0] # 多少人评价 pingjia = re.findall("(.*?)人评价", pingjia)[0] # 利用正则表达式 提人数 xinxi = one.xpath('div/div[2]/div[@class="bd"]/p[2]/span/text()')[0] # 结语 list1 = [MusicTitle, pingjia, xinxi] alllist.append(list1) for i in alllist: print(i) ``` 此代码首先发送请求获豆瓣Top250电影页面的HTML内容,接着使用XPath解析HTML,提每部电影的名称、评价人数和结语,最后将这些信息存储在列表中并打印输出,不涉及文件保存操作[^1]。 ### 爬取豆瓣Top250书籍数据 ```python import requests from lxml import etree url = 'https://book.douban.com/top250' data = requests.get(url).text f = etree.HTML(data) books = f.xpath('//*[@id="content"]/div/div[1]/div/table/tr/td[2]/div[1]/a/@title') for book in books: print("书名:", book) ``` 该代码向豆瓣Top250书籍页面发送请求,获HTML内容后用XPath解析,提书籍名称并直接打印,同样不保存到文件中[^2]。
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值