美文网首页
Scrapy 一些常用代码片段。

Scrapy 一些常用代码片段。

作者: fanchuang | 来源:发表于2021-03-18 08:54 被阅读0次

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

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

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

2. meta 的问题

  • 借助 meta 传递自己定义的参数 yield Request(a_img_url, meta={'name': item['img_name']})
  • 遇到递归解析函数的时候,最后也要带上这同一个 meta.
  • meta 最好留给内建的中间件或插件来使用。

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

  • flags (list) – 可以用作监控 logging ,以便记录当前这条 url 已经爬取过了。或是是其他信息。
  • cb_kwargs (dict) – 类似 meta,可以取代 meta, 取出来:response.cb_kwargs
  • body,带参数的请求,比如请求一个 api 的时候,参数应该放在 body里面, 而不是 meta. meta 有其他的用处。而且body接受的是一个字符串类型的值,因此注意序列化一下。
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

相关文章

  • Scrapy 一些常用代码片段。

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

  • 提高iOS开发效率的小技巧和工具

    一: 常用代码片段 开发中有一些常用的代码,可以放到代码片段中,然后下次你就可以使用快捷方法来使用这些代码了,给大...

  • PHPStorm快捷键1

    常用代码片段 CTRL + j能够快捷的输入常用的代码片段,类似vim的 snipMate,可以自定义代码片段 类...

  • 常用代码片段

    常用宏 等比例缩放

  • 常用代码片段

    phpstorm中也有快速输出常用代码的简写,设置地方如下:

  • 常用代码片段

    1.控制台输入 2.合并数组

  • 常用代码片段

    View 特效 半边圆角 渐变

  • Vue3 常用代码片段

    1、 Vue3 常用代码片段 snippets: 日常开发中常用的代码片段及组件封装集合[https://gith...

  • code snippets

    什么是code snippets? code snippets 代码片段,是一个可以将一些常用的代码整段调用的功能...

  • 移动端方法整理(持续更新)

    准备整理一些常用的不常用的CSS代码片段、方法,不定时添加。没有顺序,胡乱排序,就是这么随意,-.- 1、首先移动...

网友评论

      本文标题:Scrapy 一些常用代码片段。

      本文链接:https://www.haomeiwen.com/subject/ujcucltx.html