python - 如何在 Scrapy 中发送启用的 JavaScript 和 Cookies?

标签 python screen-scraping mechanize scrapy

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

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

COOKIES_ENABLED = True
COOKIES_DEBUG = True

2) 为cookies使用下载中间件

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'
}

但他们都没有和我一起工作。您能否提出任何想法或给我一些指导?

预先感谢您的回复。

最佳答案

你应该试试 Splash带有 scrapyjs 的 JS 引擎.以下是如何在您的爬虫项目中进行设置的示例:

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.
        # …

关于python - 如何在 Scrapy 中发送启用的 JavaScript 和 Cookies?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16391677/

相关文章:

python - 在 Python 中声明类变量的两种最佳方法

c# - 任何优秀的 C# 开源网络爬虫框架

javascript - Python 读取 Javascript 日期

ruby - 使用 Mechanize 的异步请求

python - 属性错误: 'str' object has no attribute 'isascii'

python - MySQL 主键作为外键 - 约束错误

ruby - clojure 中的屏幕抓取

ruby - Mechanize :按标签文本匹配字段

ruby - 无方法错误 : ruby gem mechanize undefined method 'q= '

Python 脚本依赖于另一个 .exe。是否可以将两者合并为一个 .exe?