Scrapy spider无法与crawlera中间件一起工作

4uqofj5v  于 2022-11-09  发布在  其他
关注(0)|答案(2)|浏览(140)

我写了一个蜘蛛来抓取一个大网站。我把它放在scrapehub上,并且使用了crawlera插件。没有crawlera,我的蜘蛛在scrapehub上运行得很好。只要我切换到crawlera中间件,蜘蛛就退出了,没有做任何抓取。
我在没有crawlera的情况下运行spider,它在我的本地系统和scrapehub上运行,我唯一改变的是为crawlera启用的中间件。
第一个
下面是没有crawlera中间件的相同蜘蛛的日志

0:  2019-02-05 17:42:13 INFO    Log opened.
1:  2019-02-05 17:42:13 INFO    [scrapy.log] Scrapy 1.5.1 started
2:  2019-02-05 17:42:13 INFO    [scrapy.utils.log] Scrapy 1.5.1 started (bot: ytscraper)
3:  2019-02-05 17:42:13 INFO    [scrapy.utils.log] Versions: lxml 4.2.5.0, libxml2 2.9.8, cssselect 1.0.3, parsel 1.5.1, w3lib 1.19.0, Twisted 18.9.0, Python 2.7.15 (default, Nov 16 2018, 23:19:37) - [GCC 4.9.2], pyOpenSSL 18.0.0 (OpenSSL 1.1.1a 20 Nov 2018), cryptography 2.5, Platform Linux-4.4.0-135-generic-x86_64-with-debian-8.11
4:  2019-02-05 17:42:13 INFO    [scrapy.crawler] Overridden settings: {'NEWSPIDER_MODULE': 'ytscraper.spiders', 'STATS_CLASS': 'sh_scrapy.stats.HubStorageStatsCollector', 'LOG_LEVEL': 'INFO', 'CONCURRENT_REQUESTS_PER_DOMAIN': 32, 'CONCURRENT_REQUESTS': 32, 'SPIDER_MODULES': ['ytscraper.spiders'], 'AUTOTHROTTLE_ENABLED': True, 'LOG_ENABLED': False, 'DOWNLOAD_TIMEOUT': 600, 'MEMUSAGE_LIMIT_MB': 950, 'BOT_NAME': 'ytscraper', 'TELNETCONSOLE_HOST': '0.0.0.0'}
5:  2019-02-05 17:42:13 INFO    [scrapy.middleware] Enabled extensions: More
6:  2019-02-05 17:42:14 INFO    [scrapy.middleware] Enabled downloader middlewares: More
7:  2019-02-05 17:42:14 INFO    [scrapy.middleware] Enabled spider middlewares: More
8:  2019-02-05 17:42:14 INFO    [scrapy.middleware] Enabled item pipelines: More
9:  2019-02-05 17:42:14 INFO    [scrapy.core.engine] Spider opened
10: 2019-02-05 17:42:14 INFO    [scrapy.extensions.logstats] Crawled 0 pages (at 0 pages/min), scraped 0 items (at 0 items/min)
11: 2019-02-05 17:42:14 INFO    [root] Using crawlera at http://proxy.crawlera.com:8010 (user: 11b143d...)
12: 2019-02-05 17:42:14 INFO    [root] CrawleraMiddleware: disabling download delays on Scrapy side to optimize delays introduced by Crawlera. To avoid this behaviour you can use the CRAWLERA_PRESERVE_DELAY setting but keep in mind that this may slow down the crawl significantly
13: 2019-02-05 17:42:14 INFO    TelnetConsole starting on 6023
14: 2019-02-05 17:43:14 INFO    [scrapy.extensions.logstats] Crawled 17 pages (at 17 pages/min), scraped 16 items (at 16 items/min)
15: 2019-02-05 17:44:14 INFO    [scrapy.extensions.logstats] Crawled 35 pages (at 18 pages/min), scraped 34 items (at 18 items/min)
16: 2019-02-05 17:45:14 INFO    [scrapy.extensions.logstats] Crawled 41 pages (at 6 pages/min), scraped 40 items (at 6 items/min)
17: 2019-02-05 17:45:30 INFO    [scrapy.crawler] Received SIGTERM, shutting down gracefully. Send again to force
18: 2019-02-05 17:45:30 INFO    [scrapy.core.engine] Closing spider (shutdown)
19: 2019-02-05 17:45:38 INFO    [scrapy.statscollectors] Dumping Scrapy stats: More
20: 2019-02-05 17:45:38 INFO    [scrapy.core.engine] Spider closed (shutdown)
21: 2019-02-05 17:45:38 INFO    Main loop terminated.

我用python写了一个脚本来测试crawlera连接

import requests

response = requests.get(
    "https://www.youtube.com",
    proxies={
        "http": "http://<APIkey>:@proxy.crawlera.com:8010/",
    },
)
print(response.text)

这是可行的,但我不能为我的生活让爬虫工作与crawlera中间件。
我想得到同样的结果使用crawlera bc没有我得到迅速禁止。
请帮帮忙。

wz8daaqr

wz8daaqr1#

您的设置中缺少CRAWLERA_ENABLED = True
有关详细信息,请参阅scrapy-crawlera文档的“配置”部分。

drnojrws

drnojrws2#

日志中的数据与问题定义不一致。在这两种情况下,蜘蛛都使用了crawlera代理,因为两个日志都有这一行:

INFO    [root] Using crawlera at http://proxy.crawlera.com:8010 (user: 11b143d...)

根据scrapy_crawlera.CrawleraMiddleware源代码,这意味着CrawleraMiddleware在两种情况下都被启用。我需要日志中的其他数据。(至少统计信息(包含统计信息的日志的结束行))
目前我有以下假设:
根据第一个日志,您没有覆盖cookie设置,CookiesMiddleware已启用。
默认情况下,处理cookie是由scrappy启用的。
通常网站使用Cookie来跟踪访问者的活动/会话。
如果网站收到来自多个IP的单一sessionId请求(如任何蜘蛛启用crawlera和启用cookie)-这允许网络服务器识别代理使用和禁止所有使用的IP通过其唯一的sessionId存储在cookie中。所以在这种情况下,蜘蛛停止工作,因为IP禁令。(和其他用户的crawlera将无法发送请求到该网站一段时间)
应通过将COOKIES_ENABLED设置为False来禁用Cookie

相关问题