Scrapy 一些常用代码片段。

2021-03-18  本文已影响0人  fanchuang

1. 如何停止一个爬虫,并且下次启动的时候,从上次停下的地方继续爬取。

# Ctrl + C, 可以停止,下次在运行的时候会继续。
class SplashSpider(scrapy.Spider):
    name = 'x'
    allowed_domains = ['x.com']
    custom_settings = {"JOBDIR": "spider_name_01"}  # 添加这这一行。

# 其中 custom_settings, 这里指的是针对当前这个爬虫文件进行特定的设置。

2. meta 的问题

3. Request 里面其他有用的参数

p = dict() 
yield scrapy.Request(base_url, body=json.dumps(p))

4. cookies 传递的问题

cookies 属于个人敏感信息,不要轻易发布出去。
最好是把 cookies 集中保存在别的地方,比如 secret.py, 然后再导入到具体的文件中。

5. selenium 异步请求。

# pip install scrapy-ajax-utils 貌似是国内的某个人写的。
from scrapy_ajax_utils import selenium_support, SeleniumRequest
@selenium_support
class SongSpider(scrapy.Spider):
    pass

yield SeleniumRequest(u, callback=self.parse_video)

6. 图片下载失败,错误处理

class WallpaperPipeline(ImagesPipeline):
    def get_media_requests(self, item, info):
        for u in item["pic_urls"]:
            yield Request(u)

    def file_path(self, request, response=None, info=None, *, item=None):
        image_name = request.url.split('?')[0].split("/")[-1] + '.jpg'
        return image_name

    # 修改默认的错误处理函数,把下载失败的 itme 记录下来。
    def item_completed(self, results, item, info):
        for ok, x in results:
            if not ok:
                logger.log(logging.WARNING, x['url'])
        return item

上一篇 下一篇

猜你喜欢

热点阅读