跳至主要內容
  • Hostloc 空間訪問刷分
  • 售賣場
  • 廣告位
  • 賣站?

4563博客

全新的繁體中文 WordPress 網站
  • 首頁
  • 关于 scrapy 的几个问题
未分類
22 7 月 2020

关于 scrapy 的几个问题

关于 scrapy 的几个问题

資深大佬 : 13936 3

之前一直都在用 requests, 上手是很简单,但是重新写爬虫的时候有不少内容是重复的。导致新写爬虫时都会从上一个项目那拷贝不少代码过来。

最近上手了 scrapy,发现上手还有点麻烦。前期几个小问题因为我喜欢死磕的个性耗费了不少时间。 最近主要有几个问题想请教下大家。

我的爬取逻辑是先爬取好五六千条数据放表一里,然后再根据这几千条数据的 id 去爬取新的内容。一般能根据每个 id 能爬来 100 条数据放表二里。所以表二爬完后大概有五十万的数据在里面。

问题是我之后还会继续爬,还有六七万的需要放至表一里的数据没有爬,如果还按照同一套存储逻辑来,表二大概得有五六百万条数据,一般这种情况需要做分表处理吗?

还有,有时候会遇到反爬措施 403 错误,我在中间件里设置了当遇到非 200 响应的时候,就会 raise closespider,但是好像停止不了爬虫啊,只是不停地爬取新的页面然后不停地升起新的 closespider 错误,但还是会继续爬。是我的爬取逻辑导致的吗?还是说我的 closespider 代码不够完整?

提前谢谢各位了!

大佬有話說 (3)

  • 資深大佬 : ooh

    几百万条数据,你查询做好索引没问题,
    Scapy 默认只处理成功的请求(200-300),如果要处理错误请求要放到 handle_httpstatus_list = [403] 里面
    停止调用 self.crawler.stop()

  • 資深大佬 : peonone

    几百万到不了分表的程度

    你在 middleware 里面 raise closespider 是不对的,closespider 是用于在回调函数里面抛出的。
    downloader middleware 的 process_response 只接受 Request / Response 返回值或者 IgnoreRequest 异常。
    像一说的,你需要先保证 403 请求被 spider 的回调处理,然后在回调里面抛出 closespider
    遇到这种问题应该先翻翻文档

    https://docs.scrapy.org/en/latest/topics/exceptions.html#scrapy.exceptions.CloseSpider
    https://docs.scrapy.org/en/latest/topics/downloader-middleware.html#scrapy.downloadermiddlewares.DownloaderMiddleware.process_response

  • 主 資深大佬 : 13936

    @peonone 谢谢,文档是翻了的。但是目前主要需要解决掉问题,一点一点从头理解透彻 scrapy 太耗时间了。谢谢答复啦。

文章導覽

上一篇文章
下一篇文章

AD

其他操作

  • 登入
  • 訂閱網站內容的資訊提供
  • 訂閱留言的資訊提供
  • WordPress.org 台灣繁體中文

51la

4563博客

全新的繁體中文 WordPress 網站
返回頂端
本站採用 WordPress 建置 | 佈景主題採用 GretaThemes 所設計的 Memory
4563博客
  • Hostloc 空間訪問刷分
  • 售賣場
  • 廣告位
  • 賣站?
在這裡新增小工具