【问题标题】:Python Scrapy - Scraped from url are not the ones set in start_urlsPython Scrapy - 从 url 抓取的不是 start_urls 中设置的
【发布时间】:2019-09-11 00:47:18
【问题描述】:

我是使用scrapy 的新手,我对抓取的网址有疑问。

我正在尝试抓取您访问的每个页面都重定向到主页的站点,当您单击横幅时,您可以访问其他页面。我试过用

meta={'dont_redirect': True, 'handle_httpstatus_list': [301, 302]

为了避免重定向,但从 url 中抓取的仍然是错误的。所以我认为问题出在cookies上,为了测试它,我在进入网站时将cookies硬编码为与浏览器相同,现在它没有重定向,我什至不需要将'dont_redirect'放在meta 但是当我查看调试器时,它仍在抓取主页。

现在代码是这样的:


import scrapy


class MatchOpeningSpider(scrapy.Spider):
    name = 'bet_365_match_opening'
    start_urls = [
        'https://www.bet365.com/#/AC/B1/C1/D13/E38078994/F2/'
    ]

    def start_requests(self):
        for url in self.start_urls:
            yield scrapy.Request(url, cookies={
                'pstk': '04761A56B7A54D9BB3948A093FB9F440000003',
                'rmbs': 3,
                'aps03': 'lng=22&tzi=34&oty=2&ct=28&cg=1&cst=0&hd=N&cf=N',
                'session': 'processform=0&fms=1'
            })

    def parse(self, response):
        games = response.css('div.sl-CouponParticipantWithBookCloses_Name').extract()
        yield {'games': games}

debug 可以看到 Crawled 的 url 是对的,但是 Scraped from 是主页

2019-04-21 12:02:37 [scrapy.core.engine] DEBUG: Crawled (200) <GET https://www.bet365.com/#/AC/B1/C1/D13/E38078994/F2/> (referer: None)
2019-04-21 12:02:37 [scrapy.core.scraper] DEBUG: Scraped from <200 https://www.bet365.com/>

我做错了什么? 感谢您的帮助!!!

【问题讨论】:

    标签: python python-3.x web-scraping scrapy


    【解决方案1】:

    在你的start_url中间有一个fragment identifier(尖号:#),后面的上下文不会被浏览器处理

    这意味着您需要的数据,可能不在 start_url 的 HTTP 响应中,而是来自此主文档请求后的其他一些 Ajax 调用并由客户端呈现

    我的建议:

    1. 使用浏览器的开发工具,或者Scrapy shell,甚至是CURL工具来保证,你需要的内容首先start_url的http响应中存在。或者你抓取了错误的 URL

    2. 使 http 标头、cookies 与在真实浏览器中的运行方式完全相同。 Scrapy 为您处理 3xx 重定向和 cookie 更改,但您需要在蜘蛛程序中找到并表示实际访问路径

    3. 如果数据是从客户端渲染的,而您对此感到厌烦,请尝试基于 Selenium 的蜘蛛,使用带有 JS 引擎的浏览器来解决这些问题

    【讨论】:

      猜你喜欢
      • 2014-06-22
      • 1970-01-01
      • 2013-12-05
      • 2019-03-10
      • 1970-01-01
      • 1970-01-01
      • 2017-12-27
      • 2023-03-21
      • 1970-01-01
      相关资源
      最近更新 更多