Scrapy处理404状态cod加载的页面

2024-04-19 06:35:59 发布

您现在位置:Python中文网/ 问答频道 /正文

This是我正在抓取的网站。页面中的广告加载没有任何问题,但它们总是加载404状态码,因此scrapy不会从这些链接中生成项目。你知道吗

如果我从shell向ad发送一个请求,它将重试10次并返回一个有效的响应。但是,当我使用scrapy crawl myspider命令运行脚本时,ads不会返回有效的响应,scrapy会尝试一次发送请求。你知道吗

这是随机项目的错误代码。你知道吗

2019-07-30 15:33:51 [scrapy] DEBUG: Retrying <GET https://www.classifiedads.com/homes_for_sale/57c10snzt1wzz> (failed 1 times): 404 Not Found
2019-07-30 15:33:51 [scrapy] DEBUG: Retrying <GET https://www.classifiedads.com/homes_for_sale/49zbgqvx21wzz> (failed 1 times): 404 Not Found
2019-07-30 15:33:51 [scrapy] DEBUG: Retrying <GET https://www.classifiedads.com/homes_for_sale/49482b3hq1wzz> (failed 1 times): 404 Not Found

这是我的密码。我怎么处理这个问题?你知道吗

class MySpider(CrawlSpider):

    name = 'myspider'

    start_urls = [
        'https://www.classifiedads.com/search.php?keywords=&cid=468&lid=rx10&lname=India&from=s&page=1',
        'https://www.classifiedads.com/search.php?keywords=&cid=18&lid=rx10&lname=India&page=1'
    ]

    rules = (
        Rule(LinkExtractor(allow=(r'https://www.classifiedads.com/search.php\?keywords=&cid=468&lid=rx10&lname=India&from=s&page=\d+',)), callback='parse_page', follow=True),
        Rule(LinkExtractor(allow=(r'https://www.classifiedads.com/search.php\?keywords=&cid=18&lid=rx10&lname=India&page=\d+',)), callback='parse_page', follow=True)
    )

    headers = {
        'user-agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/75.0.3770.142 Safari/537.36',
        'upgrade-insecure-requests': 1,

    }

    def parse_page(self, response):
        items = response.css('div#results div.resultitem div a::attr(href)').getall()

        if items:
            for item in items:
                if item.startswith('//www.classifiedads.com/'):
                    yield scrapy.Request(
                        url='https:{}'.format(item),
                        method='GET',
                        headers=self.headers,
                        callback=self.parse_items
                    )

    def parse_items(self, response):
        # scraping the items

Tags: httpscomforsearchgetparsewwwpage
3条回答

服务器正在抛出404响应。 您也可以在您的终端上查看 >>> import requests requests.get('https://www.classifiedads.com/commercial_for_rent/9144lxkm81wxd') <Response [404]>

你可以试试硒。你知道吗

我建议您首先检查这些retry settings,并将404状态代码添加到RETRY_HTTP_CODES。另一种解决方案是创建errback函数并将其添加到请求中。但所有这些解决方案都不好。你有没有尝试添加一些标题,cookies?你知道吗

Pass ^{} in the ^{} parameter of your requests使用回调处理404响应,如果它们发送的是404作为状态码的有效响应。你知道吗

相关问题 更多 >