首页 > 解决方案 > 如何防止网络爬虫的 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
            )

标签: pythonpython-3.xscrapyweb-crawler

解决方案


对于我在这里给出的广泛答案,我很抱歉,但是由于您没有提供太多信息,也没有提供爬虫的堆栈跟踪,所以我将尝试涵盖我认为很可能出现这种情况的情况问题,并为您提供有关这些方向的指示。

最有可能发生的情况是,如果您遇到会话//cookie 管理问题,网站正在寻找要满足的某些条件(错误的页面、cookie、或用户代理、引荐来源网址、请求标头),请参阅此处有关该主题的这篇文章。

另外,鉴于您已经确定了重定向,请查看处理重定向,并检查中间件的使用情况来处理刮板中的行为。

如果您的请求标头或用户代理设置有任何问题,您可以在此处找到有关用户代理和一般设置的更好信息,或检查响应对象结构以创建适合您方案的对象结构。

显然,永远不要忘记查看官方文档以获取有关任何包的更广泛信息,它们非常有用。


推荐阅读