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 里面的正则写错了,匹配不到,所以就直接结束了

posted @ 2020-09-09 06:07  竹为君生  阅读(222)  评论(0)    收藏  举报