Scrapy Shell

response <404...> 是出错了吗?

之后用 xpath 一直没有返回东西。xpath我用插件检查也是对的。

回答

首先404问题

你这个url https://segmentfault.com/serarch?q=python&page=1 确实是404的, 如下图我刚测试的
我写错了,重新看看, 这是我用requests写的,你肯定scrapy哪里发送请求有问题, 还有就是你xpath语法有点问题(我好久没写xpath了,提示xpath语法报错)

import requests

from parsel import Selector # pip install parsel Scrapy官方把Selector抽出来的解析库

url = "https://segmentfault.com/search?q=python&page=1"

headers = {

"user-agent": "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_5) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/84.0.4147.89 Safari/537.36"

}

res = requests.get(url, headers=headers)

selector = Selector(text=res.text)

res = selector.xpath('//section//a/@href').extract()

print(res)

# ['/q/1010000003713912', '/a/1190000016012554', '/a/1190000015295218', '/a/1190000022539406', '/a/1190000021217438', '/a/1190000019860830', '/q/1010000004943967', '/a/1190000012121101', '/a/1190000020409601', '/q/1010000008445872', '/a/1190000022460603', '/q/1010000004254202', '/ls/1650000017333471/l/1500000016161912', '/q/1010000012425420', '/a/1190000019993378', '/a/1190000021752983', '/a/1190000022744145', '/a/1190000016108471', '/q/1010000005606698', '/q/1010000008108222']

xpath为空

这个是因为你response返回值为空?你可以输出验证下print(response.text)从而导致提取不到值

找个没有反爬的网站。

segmentfault 有反爬。

你输出 response.text 会发现其实是有拿到 segmentfault 的 response 内容的。

只不过内容是 404 的页面文本。


总结来说就是这不是 xpath 的问题,是你拿到的 response 内容就和你用浏览器访问的内容不同。所以你用(根据浏览器显示的) xpath 去获取内容自然会出错。所以你需要解决的是反爬问题。


另外,我之前也在找 xpath helper 插件,不过在 chrome 商店都没有找到,哪里找的可以分享一下吗?

以上是 Scrapy Shell 的全部内容, 来源链接: utcz.com/a/35636.html

回到顶部