代码之家  ›  专栏  ›  技术社区  ›  Teresa Salil

使用scrapy时如何绕过“cookiewall”?

  •  2
  • Teresa Salil  · 技术社区  · 7 年前

    我是Scrapy的新用户。在完成了从网站中提取数据的教程之后,我正在尝试在论坛上完成类似的事情。

    我想要的是提取论坛页面上的所有帖子(首先)。然而,这个特别的论坛有一堵“饼干墙”。所以当我想从 http://forum.fok.nl/topic/2413069 ,每次会话我首先需要单击“Yes,I accept cookies”(是,我接受cookies)按钮。

    我最基本的刮刀现在看起来像这样:

    class FokSpider(scrapy.Spider):
    name = 'fok'
    allowed_domains = ['forum.fok.nl']
    start_urls = ['http://forum.fok.nl/']
    
    def parse(self,response):
        divs = response.xpath("//div").extract()
        yield {'divs': divs}
        pass
    

    我得到的div不是来自实际的论坛线程,而是来自cookie墙。

    以下是按钮的html:

    <a href="javascript:acceptCookies()" class="button acc CookiesOK" onclick="document.forms['cookies'].submit();acceptCookies();">Ja, Ik wil een goed werkende site...<span class="smaller">...en accepteer de cookies</span></a>
    

    有谁能告诉我如何绕过这个cookiewall(人为地“点击”按钮)进入我想要刮的实际网页吗?(即使是正确的谷歌搜索词/文档页面等也会非常有用)

    1 回复  |  直到 7 年前
        1
  •  2
  •   Teresa Salil    7 年前

    最后,我找到了多种方法来解决这个问题:

    • 简单地添加 /?token=77c1f767bc31859fee1ffe041343fa48&allowcookies=ACCEPTEER+ALLE+COOKIES 到适用于此特定情况的起始url
    • 后来我换了一个 CrawlSpider 然后我可以添加cookie按钮的xpath作为第一个,而不是普通的爬行器 rule .
    • 使用前面提到的 Selenium 同样有效,但有很多麻烦,这不是真的必要。。。