-
-
Notifications
You must be signed in to change notification settings - Fork 142
常见问题(FAQ)
- 爬虫扒取的速度很慢
- 如何给爬虫设置使用代理
- 不想下载图片文件怎么办
- 如果我只想扒取你提供的多个网站中的一个或几个, 而不是所有网站都扒
- 重启如何覆盖旧数据
- 启动 Docker 提示
TLS handshake timeout
由于各网站都设置了反爬虫策略, 其中最常见的一种策略就是短时间内同一个 IP 访问次数超过一定阈值, 就会被禁止(ban)访问, 因此本项目设置了爬虫的访问频率, 访问频率是作者自己在使用过程中根据网站的实际情况调整得出的数值, 用户也可以自己设置, 但要注意观察爬虫是否被禁止; 可以在文件 crawler/house_renting/settings.py
中修改以下几个参数:
DOWNLOAD_DELAY = 10
CONCURRENT_REQUESTS_PER_DOMAIN = 1
AUTOTHROTTLE_ENABLED = True
AUTOTHROTTLE_START_DELAY = 5
AUTOTHROTTLE_MAX_DELAY = 10
AUTOTHROTTLE_TARGET_CONCURRENCY = 1.0
各个字段的含义请参看 Scrapy 文档;
如果用户想要快速扒取大量数据, 不想使用设置爬虫访问频率的方式防止被禁止访问, 可以参考如何给爬虫设置使用代理;
最新版本中, 加入了代理的功能, 用户可以在 crawler/house_renting/proxies.py
中添加可用的代理 IP 列表, 爬虫在扒取过程中会自动随机选择其中一个 IP 用来做代理, 注意提供的 IP 列表数量尽可能多, 否则短时间内被选择作为代理的次数就会增多, 导致代理 IP 也会被禁止访问; 代理 IP 速度要尽可能快, 否则如果等待代理服务器返回的时间太长, 还不如给爬虫设置访问频率;
后续会增加自动扒取网络上免费代理的 IP, 以及自动选择 IP 的功能;
为了让用户在选择租房的时候, 能够通过先查看房子图片, 后查看租房信息的需求, 本爬虫会把租房信息图片扒取放到本地文件夹 data/images
下, 用户可以使用图片浏览器打开该目录下查看图片, 看到合适的房子图片后使用该图片的文件名去 Kibana 搜索, 找到相应的租房信息; 如果不需要该功能, 可以在文件 crawler/house_renting/settings.py
中, 将:
ITEM_PIPELINES = {
'house_renting.pipelines.HouseRentingPipeline': 100,
'house_renting.pipelines.DuplicatesPipeline': 200,
'scrapy.pipelines.images.ImagesPipeline': 300,
'house_renting.pipelines.ESPipeline': 400,
}
其中的 'scrapy.pipelines.images.ImagesPipeline': 300,
注释掉, 即改成:
ITEM_PIPELINES = {
'house_renting.pipelines.HouseRentingPipeline': 100,
'house_renting.pipelines.DuplicatesPipeline': 200,
# 'scrapy.pipelines.images.ImagesPipeline': 300,
'house_renting.pipelines.ESPipeline': 400,
}
使用 Docker 的情况下, 默认的启动命令是:
$ docker-compose up -d
如果你想启动其中的某几个爬虫, 只需要在命令后跟对应的服务名, 如: 你只想扒取豆瓣的信息,
$ docker-compose up -d kibana douban
当指定服务名的时候, docker-compose 只会启动指定的服务, 其中 Kibana 是用于图形化分析的工具, Elasticsearch 和 Redis 作为 douban 的依赖, 可以不必显式指明;
为了避免爬虫在意外退出后重启重复扒取已经扒过的数据, 本项目使用了 Redis 缓存已经扒取的信息 URL, 如果不需要此功能, 可以直接把 data
目录下的 redis
文件夹删除, 如果一直都不需要这个功能, 可以把 settings.py
文件中的 REDIS_HOST
设置为 None
, 此设置记得重新 build
docker 的镜像;
由于 elasticsearch 官方镜像在墙外, 如果没有科学上网工具, 可以把 docker-compose.yml
中的
image: docker.elastic.co/elasticsearch/elasticsearch-oss:6.2.4
和
image: docker.elastic.co/kibana/kibana-oss:6.2.4
换成
image: elasticsearch
和
image: kibana