关于 scrapy 的几个问题 - V2EX
V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
13936
V2EX    问与答

关于 scrapy 的几个问题

  •  
  •   13936 2020-07-24 07:30:04 +08:00 1567 次点击
    这是一个创建于 1956 天前的主题,其中的信息可能已经有所发展或是发生改变。

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

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

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

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

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

    提前谢谢各位了!

    3 条回复    2020-07-24 12:08:04 +08:00
    ooh
        1
    ooh  
       2020-07-24 08:36:31 +08:00   1
    几百万条数据,你查询做好索引没问题,
    Scapy 默认只处理成功的请求(200-300),如果要处理错误请求要放到 handle_httpstatus_list = [403] 里面
    停止调用 self.crawler.stop()
    peonone
        2
    peonone  
       2020-07-24 08:49:03 +08:00   1
    几百万到不了分表的程度

    你在 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
        3
    13936  
    OP
       2020-07-24 12:08:04 +08:00
    @peonone 谢谢,文档是翻了的。但是目前主要需要解决掉问题,一点一点从头理解透彻 scrapy 太耗时间了。谢谢答复啦。
    关于     帮助文档     自助推广系统     博客     API     FAQ     Solana     5775 人在线   最高记录 6679       Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 29ms UTC 02:14 PVG 10:14 LAX 18:14 JFK 21:14
    Do have faith in what you're doing.
    ubao msn snddm index pchome yahoo rakuten mypaper meadowduck bidyahoo youbao zxmzxm asda bnvcg cvbfg dfscv mmhjk xxddc yybgb zznbn ccubao uaitu acv GXCV ET GDG YH FG BCVB FJFH CBRE CBC GDG ET54 WRWR RWER WREW WRWER RWER SDG EW SF DSFSF fbbs ubao fhd dfg ewr dg df ewwr ewwr et ruyut utut dfg fgd gdfgt etg dfgt dfgd ert4 gd fgg wr 235 wer3 we vsdf sdf gdf ert xcv sdf rwer hfd dfg cvb rwf afb dfh jgh bmn lgh rty gfds cxv xcv xcs vdas fdf fgd cv sdf tert sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf shasha9178 shasha9178 shasha9178 shasha9178 shasha9178 liflif2 liflif2 liflif2 liflif2 liflif2 liblib3 liblib3 liblib3 liblib3 liblib3 zhazha444 zhazha444 zhazha444 zhazha444 zhazha444 dende5 dende denden denden2 denden21 fenfen9 fenf619 fen619 fenfe9 fe619 sdf sdf sdf sdf sdf zhazh90 zhazh0 zhaa50 zha90 zh590 zho zhoz zhozh zhozho zhozho2 lislis lls95 lili95 lils5 liss9 sdf0ty987 sdft876 sdft9876 sdf09876 sd0t9876 sdf0ty98 sdf0976 sdf0ty986 sdf0ty96 sdf0t76 sdf0876 df0ty98 sf0t876 sd0ty76 sdy76 sdf76 sdf0t76 sdf0ty9 sdf0ty98 sdf0ty987 sdf0ty98 sdf6676 sdf876 sd876 sd876 sdf6 sdf6 sdf9876 sdf0t sdf06 sdf0ty9776 sdf0ty9776 sdf0ty76 sdf8876 sdf0t sd6 sdf06 s688876 sd688 sdf86