python - 如何防止网络爬虫的 301 重定向
问题描述
我对网络抓取相当陌生,只是在几个网页上对其进行测试。我已经成功抓取了几个亚马逊搜索,但是在这种情况下,我得到了 301 重定向,导致抓取了不同的页面。
我尝试添加一行 (handle_httpstatus_list = [301]) 以防止重定向。这导致根本没有数据被抓取。
在阅读scrapy的文档时,我想也许编辑中间件可以解决这个问题?但是,仍然不确定如何执行此操作。
import scrapy
class BooksSpider(scrapy.Spider):
name = 'books'
handle_httpstatus_list = [301]
start_urls = ['https://www.amazon.com/s?i=stripbooks&rh=n%3A2%2Cp_30%3AIndependently+published%2Cp_n_feature_browse-bin%3A2656022011&s=daterank&Adv-Srch-Books-Submit.x=50&Adv-Srch-Books-Submit.y=10&field-datemod=8&field-dateop=During&field-dateyear=2019&unfiltered=1&ref=sr_adv_b']
def parse(self, response):
SET_SELECTOR = '.s-result-item'
for car in response.css(SET_SELECTOR):
NAME = '.a-size-medium ::text'
TITLE = './/h2/a/span/text()'
LINK = './/h2/a/@href'
yield {
'name': car.css(NAME).extract(),
'title': car.xpath(TITLE).extract(),
'link': car.xpath(LINK).get()
}
NEXT_PAGE_SELECTOR = '.a-last a ::attr(href)'
next_page = response.css(NEXT_PAGE_SELECTOR).extract_first()
next_page = response.urljoin(next_page)
if next_page:
yield scrapy.Request(
response.urljoin(next_page),
callback=self.parse
)
解决方案
对于我在这里给出的广泛答案,我很抱歉,但是由于您没有提供太多信息,也没有提供爬虫的堆栈跟踪,所以我将尝试涵盖我认为很可能出现这种情况的情况问题,并为您提供有关这些方向的指示。
最有可能发生的情况是,如果您遇到会话//cookie 管理问题,网站正在寻找要满足的某些条件(错误的页面、cookie、或用户代理、引荐来源网址、请求标头),请参阅此处有关该主题的这篇文章。
另外,鉴于您已经确定了重定向,请查看处理重定向,并检查中间件的使用情况来处理刮板中的行为。
如果您的请求标头或用户代理设置有任何问题,您可以在此处找到有关用户代理和一般设置的更好信息,或检查响应对象结构以创建适合您方案的对象结构。
显然,永远不要忘记查看官方文档以获取有关任何包的更广泛信息,它们非常有用。
推荐阅读
- python - 在单元格中插入表格
- firefox - lld-link:错误:无法写入输出文件:权限被拒绝
- javascript - 基于常见分组的正则表达式匹配组
- php - 识别哪个插件抛出此错误的最有效方法 - “检测到活动的 PHP 会话”
- database - 如何将主键和外键添加到 BigQuery?
- java - 带可变参数的功能接口
- node.js - 使用 Sequelize 提取关联值
- xml - 显示 XML Parse Groovy 列表结果的内容
- java - 在 Java 中使用 BouncyCastle 进行 PGP 加密
- mongodb - 如何在 mongodb 中返回所有不包含特定值的结果