【问题标题】:How to bypass a 'cookiewall' when using scrapy?使用scrapy时如何绕过“cookiewall”?
【发布时间】:2022-04-18 23:33:59
【问题描述】:

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

我想要的是提取论坛页面上的所有帖子(开始)。但是,这个特定的论坛有一个“cookie wall”。因此,当我想从http://forum.fok.nl/topic/2413069 中提取信息时,我首先需要单击“是的,我接受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(人为地“点击”按钮)并转到我要抓取的实际网页的正确方向? (即使是正确的 Google 搜索词/文档页面等也会很有帮助)

【问题讨论】:

  • extract 需要 () 来运行它。
  • 如果页面使用JavaScript,那么您可能需要Selenium 来控制将加载页面并运行JavaScript 的网络浏览器。或者你必须分析 JavaScript 的代码,找出它使用的 url,然后用 Python 做同样的事情。

标签: python cookies scrapy scrapy-spider


【解决方案1】:

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

  • 只需将/?token=77c1f767bc31859fee1ffe041343fa48&amp;allowcookies=ACCEPTEER+ALLE+COOKIES 添加到开始网址即可适用于这种特定情况
  • 我后来切换到CrawlSpider而不是普通的Spider,然后我可以将cookie按钮的xpath添加为第一个rule
  • 使用前面提到的Selenium 单击按钮也可以,但是很麻烦,实际上并没有必要...

【讨论】:

  • 您好 Teresa,您能粘贴您使用的实际代码吗?这可以帮助像我这样的未来读者;)
猜你喜欢
  • 2020-04-27
  • 1970-01-01
  • 1970-01-01
  • 2016-01-19
  • 2012-05-29
  • 1970-01-01
  • 1970-01-01
  • 2013-07-20
  • 1970-01-01
相关资源
最近更新 更多