Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/336.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 如何发送Scrapy中启用的JavaScript和cookie?_Python_Screen Scraping_Mechanize_Scrapy - Fatal编程技术网

Python 如何发送Scrapy中启用的JavaScript和cookie?

Python 如何发送Scrapy中启用的JavaScript和cookie?,python,screen-scraping,mechanize,scrapy,Python,Screen Scraping,Mechanize,Scrapy,我正在使用Scrapy抓取一个网站,需要启用烹饪和java脚本。我认为我不必实际处理javascript。我所需要的只是假装启用了javascript 以下是我尝试过的: 1) 通过以下设置启用cookie COOKIES_ENABLED = True COOKIES_DEBUG = True 2) 使用cookie下载中间件 DOWNLOADER_MIDDLEWARES = { 'scrapy.contrib.downloadermiddleware.useragent.UserAg

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

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

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'
}
但是他们没有一个人和我一起工作。你能给我提个建议或者给我一些指导吗


提前感谢您的回复。

Scrapy不支持java脚本

但是

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


而且您不需要启用cookies(
cookies\u ENABLED=True
),甚至不需要在
设置.py中添加
DOWNLOADER\u中间件
,因为它们已经在AFAIK中可用,所以没有通用的解决方案。您必须调试站点,查看它如何确定您的客户端不支持/启用Javascript

我认为服务器不会查看
X-JAVASCRIPT-ENABLED
标题。当页面加载到真正启用Javascript的浏览器中时,可能有Javascript设置的cookie?也许服务器会查看
用户代理
标题

另请参见。

您应该尝试使用JS引擎。下面是一个如何在spider项目中设置它的示例:

SPLASH_URL = 'http://192.168.59.103:8050'
DOWNLOADER_MIDDLEWARES = {
    'scrapyjs.SplashMiddleware': 725,
}
这也是Scrapy背后的同一家公司,必须在启用splash的情况下运行Spider

然后在爬行器中生成
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.
        # …

阿克特,谢谢你的回复。正如我所说,我不需要处理JavaScript。如果在请求源上未启用javascript,服务器将不会给我实际页面。我只需要向服务器发送一个信号,表示启用了javascript和cookie。