如何在Scrapy中启用JavaScript和Cookies?

Ami*_*pta 7 python screen-scraping mechanize scrapy

我正在使用Scrapy抓取一个网站,该网站需要启用烹饪和java脚本.我认为我不必实际处理javascript.我只需假装javascript已启用.

以下是我尝试过的方法:1)通过以下设置启用Cookie

COOKIES_ENABLED = True
COOKIES_DEBUG = True
Run Code Online (Sandbox Code Playgroud)

2)使用下载中间件进行cookie

DOWNLOADER_MIDDLEWARES = {
    'scrapy.contrib.downloadermiddleware.useragent.UserAgentMiddleware': 400,
    'scrapy.contrib.downloadermiddleware.cookies.CookiesMiddleware':700
}
Run Code Online (Sandbox Code Playgroud)

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'
}
Run Code Online (Sandbox Code Playgroud)

但他们都不和我合作.你能提出任何想法或给我指点吗?

提前感谢您的回复.

ger*_*esc 5

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

SPLASH_URL = 'http://192.168.59.103:8050'
DOWNLOADER_MIDDLEWARES = {
    'scrapyjs.SplashMiddleware': 725,
}
Run Code Online (Sandbox Code Playgroud)

刮痧中心是Scrapy背后的同一家公司,它具有特殊的实例来运行你的蜘蛛启用飞溅.

然后屈服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.
        # …
Run Code Online (Sandbox Code Playgroud)


akh*_*hab 1

Scrapy 不支持 java 脚本。

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

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

  • 阿赫特,谢谢您的回复。正如我所说,我不需要处理 JavaScript。如果请求源上未启用 javascript,服务器将不会给我实际页面。我只需要向服务器发送一个信号,表明 javascript 和 cookies 已启用。 (2认同)