【问题标题】:How to send JavaScript and Cookies Enabled in Scrapy?如何发送在 Scrapy 中启用的 JavaScript 和 Cookie?
【发布时间】:2013-04-29 18:59:21
【问题描述】:

我正在使用需要启用烹饪和 java 脚本的 Scrapy 抓取网站。我认为我不必实际处理 javascript。我所需要的只是假装启用了 javascript。

这是我尝试过的: 1) 通过以下设置启用 Cookies

COOKIES_ENABLED = True
COOKIES_DEBUG = True

2) 使用 cookie 下载中间件

DOWNLOADER_MIDDLEWARES = {
    'scrapy.contrib.downloadermiddleware.useragent.UserAgentMiddleware': 400,
    'scrapy.contrib.downloadermiddleware.cookies.CookiesMiddleware':700
}

3) 发送 'X-JAVASCRIPT-ENABLED': 'True'

DEFAULT_REQUEST_HEADERS={
    'Accept': 'text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8',
    'Accept-Language': 'en',
    'X-JAVASCRIPT-ENABLED': 'True'
}

但他们都没有和我一起工作。你能提出任何想法或给我一些方向吗?

提前感谢您的回复。

【问题讨论】:

    标签: python screen-scraping mechanize scrapy


    【解决方案1】:

    你应该试试Splash JS 引擎和scrapyjs。以下是如何在您的蜘蛛项目中进行设置的示例:

    SPLASH_URL = 'http://192.168.59.103:8050'
    DOWNLOADER_MIDDLEWARES = {
        'scrapyjs.SplashMiddleware': 725,
    }
    

    Scraping hub 是 Scrapy 背后的同一家公司,拥有 special instances 来运行您的蜘蛛并启用飞溅。

    然后像这样在你的蜘蛛中产生SplashRequest 而不是Request

    import scrapy
    from scrapy_splash import SplashRequest
    
    class MySpider(scrapy.Spider):
        start_urls = ["http://example.com", "http://example.com/foo"]
    
        def start_requests(self):
            for url in self.start_urls:
                yield SplashRequest(url, self.parse,
                    endpoint='render.html',
                    args={'wait': 0.5},
                )
    
        def parse(self, response):
            # response.body is a result of render.html call; it
            # contains HTML processed by a browser.
            # …
    

    【讨论】:

      【解决方案2】:

      AFAIK,没有通用的解决方案。您必须调试该站点,以查看它如何确定您的客户端不支持/启用 Javascript。

      我认为服务器不会查看 X-JAVASCRIPT-ENABLED 标头。当页面在真正的启用 javascript 的浏览器中加载时,也许有一个由 Javascript 设置的 cookie?也许服务器会查看user-agent 标头?

      另见this response

      【讨论】:

        【解决方案3】:

        Scrapy 不支持 java 脚本。

        但是

        您可以使用其他带有 Scrapy 的库来执行 JS,例如 Webkit、Selenium 等,

        并且您不需要启用 cookie (COOKIES_ENABLED = True),甚至不需要在您的 settings.py 中添加 DOWNLOADER_MIDDLEWARES,因为它们已经在 default scrapy settings 中可用

        【讨论】:

        • 阿赫特,感谢您的回复。正如我所说,我不需要处理 JavaScript。如果请求源上未启用 javascript 种子,则服务器不会给我实际页面。我只需要向服务器发送一个启用 javascript 和 cookie 的信号。
        猜你喜欢
        • 1970-01-01
        • 2018-06-18
        • 1970-01-01
        • 1970-01-01
        • 2018-05-14
        • 2020-11-22
        • 1970-01-01
        • 2021-10-12
        • 2016-06-14
        相关资源
        最近更新 更多