首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >抓取爬虫在作为脚本运行时会忽略`DOWNLOADER_MIDDLEWARES`

抓取爬虫在作为脚本运行时会忽略`DOWNLOADER_MIDDLEWARES`
EN

Stack Overflow用户
提问于 2015-06-15 01:20:21
回答 1查看 975关注 0票数 2

我想使用刮痕从几个不同的站点获取数据,并对这些数据进行一些分析。由于爬虫和分析数据的代码都与同一个项目有关,所以我想将所有内容存储在同一个Git存储库中。我创建了一个Github的最小可重现性实例

该项目的结构如下:

代码语言:javascript
复制
./crawlers
./crawlers/__init__.py
./crawlers/myproject
./crawlers/myproject/__init__.py
./crawlers/myproject/myproject
./crawlers/myproject/myproject/__init__.py
./crawlers/myproject/myproject/items.py
./crawlers/myproject/myproject/pipelines.py
./crawlers/myproject/myproject/settings.py
./crawlers/myproject/myproject/spiders
./crawlers/myproject/myproject/spiders/__init__.py
./crawlers/myproject/myproject/spiders/example.py
./crawlers/myproject/scrapy.cfg
./scrapyScript.py

./crawlers/myproject文件夹中,我可以通过键入以下命令来执行爬行器:

代码语言:javascript
复制
scrapy crawl example

爬虫使用了一些下载中间件,特别是阿莱克斯氏症优秀的刮-假-用户代理。来自settings.py

代码语言:javascript
复制
DOWNLOADER_MIDDLEWARES = {
    'scrapy.contrib.downloadermiddleware.useragent.UserAgentMiddleware': None,
    'scrapy_fake_useragent.middleware.RandomUserAgentMiddleware': 400,
}

当使用scrapy crawl ...执行时,useragent看起来像一个真正的浏览器。下面是来自Here服务器的一个示例记录:

代码语言:javascript
复制
24.8.42.44 - - [16/Jun/2015:05:07:59 +0000] "GET / HTTP/1.1" 200 27161 "-" "Mozilla/5.0 (Windows NT 6.3; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/37.0.2049.0 Safari/537.36"

文档的角度来看,可以从脚本中执行相当于scrapy crawl ...的操作。基于文档的scrapyScript.py文件如下所示:

代码语言:javascript
复制
from twisted.internet import reactor
from scrapy.crawler import Crawler
from scrapy import log, signals

from scrapy.utils.project import get_project_settings
from crawlers.myproject.myproject.spiders.example import ExampleSpider

spider = ExampleSpider()
settings = get_project_settings()

crawler = Crawler(settings)
crawler.signals.connect(reactor.stop, signal=signals.spider_closed)
crawler.configure()
crawler.crawl(spider)

crawler.start()
log.start()
reactor.run()

当我执行这个脚本时,我可以看到爬虫发出页面请求。不幸的是,它忽略了DOWNLOADER_MIDDLEWARES。例如,用户代理不再被欺骗:

代码语言:javascript
复制
24.8.42.44 - - [16/Jun/2015:05:32:04 +0000] "GET / HTTP/1.1" 200 27161 "-" "Scrapy/0.24.6 (+http://scrapy.org)"

不知何故,当从脚本执行爬虫时,它似乎忽略了settings.py中的设置。

你能看出我做错了什么吗?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2015-06-17 21:53:27

为了让get_project_settings()找到所需的settings.py,设置环境变量

代码语言:javascript
复制
import os
import sys

# ...

sys.path.append(os.path.join(os.path.curdir, "crawlers/myproject"))
os.environ['SCRAPY_SETTINGS_MODULE'] = 'myproject.settings'

settings = get_project_settings()

注意,由于运行脚本的位置,需要将myproject添加到sys.path中。或者,将scrapyScript.py移动到myproject目录下。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/30836209

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档