scrapy抓取数据到elasticsearch遇到的坑,fake-useragent
1.把之前做过的scrapy爬虫项目拿过来修改重新跑一遍遇到的坑
设置user-agent时遇到的坑,先说一下怎样用
pip install fake_useragent
在middlewares.py中加入如下代码
from fake_useragent import UserAgent
class RandomUserAgentMiddleware(object): # 随机更换user-agent def __init__(self, crawler): super(RandomUserAgentMiddleware, self).__init__() self.ua = UserAgent() self.ua_type = crawler.settings.get("RANDOM_UA_TYPE", "random") @classmethod def from_crawler(cls, crawler): return cls(crawler) def process_request(self, request, spider): def get_ua(): return getattr(self.ua, self.ua_type) request.headers.setdefault('User-Agent', get_ua())
我的setting加入的代码:
DOWNLOADER_MIDDLEWARES = { 'ArticleSpider.middlewares.RandomUserAgentMiddleware': 543, 'scrapy.downloadermiddlewares.useragent.UserAgentMiddleware': None, }
运行后连接不到这个网址 https://www.w3schools.com/browsers/default.asp
可以参考网址https://blog.csdn.net/huiyanshizhu/article/details/84952093 中的解决方案
我的是 pip install --upgrade fake_useragent 更新之后,再重启就可以正常运行了。
当然也有根本的解决方案,参考网址https://www.cnblogs.com/mswei/p/11602838.html
2.爬虫还没开始爬就已经完成了
根本的原因是因为爬完了,没有新的网址可以爬取的了,我的原因是匹配网址的正则写错了
name = 'xxxxx' allowed_domains = ['www.xxxxx.cn'] start_urls = ['http://www.xxxxx.com/'] rules = ( Rule(LinkExtractor(allow=("index1.php/.*",)), follow=True), Rule(LinkExtractor(allow=r'index.php/archives/\d+'), callback='parse_yyyy', follow=True), )
注意看加粗部分我把cn写成了com,所以每次执行爬虫时总是直接结束。
还有好几次是因为rule 里面的正则写错了,匹配不到,所以就直接结束了