请推荐关于 Scrapy 包用法的中文版学习资料 - V2EX
V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
推荐学习书目
Learn Pytho the Hard Way
Python Sites
PyPI - Python Package Index
http://diveintopython.org/toc/index.html
Pocoo
值得关注的项目
PyPy
Celery
Jinja2
Read the Docs
gevent
pyenv
virtualenv
Stackless Python
Beautiful Soup
结巴中文分词
Green Unicorn
Sentry
Shovel
Pyflakes
pytest
Python 编程
pep8 Checker
Styles
PEP 8
Google Python Style Guide
Code Style from The Hitchhiker's Guide
saximi
V2EX    Python

请推荐关于 Scrapy 包用法的中文版学习资料

  •  
  •   saximi 2017-08-31 20:29:50 +08:00 3253 次点击
    这是一个创建于 2967 天前的主题,其中的信息可能已经有所发展或是发生改变。
    最好是能在断网环境下离线阅读的资料和电子书籍,万分感谢了!
    21 条回复    2017-09-25 09:14:15 +08:00
    dsg001
        1
    dsg001  
       2017-08-31 20:33:22 +08:00
    fiht
        2
    fiht  
       2017-08-31 20:48:40 +08:00
    搞爬虫的还能断网?
    GreatMartial
        3
    GreatMartial  
       2017-08-31 21:03:52 +08:00 via Android
    @dsg001 厉害了,老哥
    friejq
        4
    friejq  
       2017-08-31 22:15:52 +08:00   1
    flamepeak
        5
    flamepeak  
       2017-08-31 22:24:43 +08:00 via Android
    最近刚用 scrapy 写完一个小项目,把自己的一些经验写在博客上了,flamepeak.com 上了,可以看看,可以发邮件交流
    saximi
        6
    saximi  
    OP
       2017-08-31 22:45:56 +08:00
    @fiht 爬虫是自己学的,公司是断网的,唉
    toono
        7
    toono  
       2017-09-01 08:50:49 +08:00
    辛苦了,公司竟然断网
    friejq
        8
    friejq  
       2017-09-01 08:56:17 +08:00
    @toono 我们办公室也不给接外网,我还以为很多都这样--.
    toono
        9
    toono  
       2017-09-01 09:11:22 +08:00
    @friejq 你的公司是我知道的第一家。我同学们的公司都没有这样。

    难道你们做金融的?
    toono
        10
    toono  
       2017-09-01 09:12:35 +08:00
    @saximi 想问一句,公司断网,要这爬虫有何用(摔
    hjl416148489
        11
    hjl416148489  
       2017-09-01 12:01:24 +08:00
    看学习资料还不如看 Python 视频教程,由浅入深,小白也能变大牛哈: http://www.sucaihuo.com/video/13.htmlhttp://www.sucaihuo.com/video/20.html
    saximi
        12
    saximi  
    OP
       2017-09-01 20:13:44 +08:00
    @toono 就算断网也有需要用爬虫的场合,只是对于我个人而言倒是工作上还没有用到,但是希望能多了解一门技术,所以排除困难也要学
    saximi
        13
    saximi  
    OP
       2017-09-01 20:20:40 +08:00
    @dsg001 请问这个下载后不是可以直接阅读的,还要在 LINUX 下编译才行? 我直接输入 ./Makefile htmlhelp 结果报错了,WINDOWS 下可以让这些文件变成可读的么?
    toono
        14
    toono  
       2017-09-02 01:03:33 +08:00
    那不介意的话可以看看我在写的爬虫 https://github.com/ToonoW/TopicsSpiders
    dsg001
        15
    dsg001  
       2017-09-02 10:36:19 +08:00
    @saximi 没编译过,http://scrapy-chs.readthedocs.io/zh_CN/latest/ 在线版,可以离线保存
    fhefh
        16
    fhefh  
       2017-09-02 17:21:47 +08:00
    先 mark
    saximi
        17
    saximi  
    OP
       2017-09-21 19:04:36 +08:00
    @toono

    ```
    我学习了您上传的爬虫代码,有一些问题想请您指点。万分感谢了!
    1、middlewares.py 中 MyAgentMiddleware 和 DoubanCookieChangeMiddleware 都是下载中间件,为何前者定义中声明了__init__方法,但后者却没有?

    2、middlewares.py 中 MyAgentMiddleware 的__init__方法为什么要这个参数:user_agent=''

    3、我看了 scrapy 0.25 的官方说明文档,里面提到:“ process_request() 必须返回其中之一: 返回 None、返回一个 Response 对象、返回一个 Request 对象或 raise IgnoreRequest ”
    但是您的 MyAgentMiddleware 和 DoubanCookieChangeMiddleware 都没有 return 语句,这是为何?

    4、既然 MyAgentMiddleware 和 DoubanCookieChangeMiddleware 都没有返回,这两个类中的 process_request()是否会依序先后被调用,如果会的话,把两个类合并为一个类,在一个类中实现所有的方法是否更合理?

    5、pipelines.py 中有的类实现了 open_spider()这个方法,而只有当 spider 被开启时,这个方法被调用。请问 spider 的开启和关闭是在哪里设置的?

    ```
    toono
        18
    toono  
       2017-09-22 09:21:02 +08:00
    @saximi

    1. 这是看需求的,__init__方法的意义就是在于初始化。MyAgentMiddleware 中的__init__编写的意义在于记录我的 user_agent 的数目,方便后面的逻辑中使用 random 的随机方法。

    2. 哈哈,这个是手误,原本打算用类似于 pipelines.py 中 MongoDBPipeline 的类初始化方法的,但是觉得直接写__init__方法更简便。

    3. 我这里没有 return 语句实际上就是 return 了 None。

    引用:如果其返回 None,Scrapy 将继续处理该 request,执行其他的中间件的相应方法,直到合适的下载器处理函数(download handler)被调用, 该 request 被执行(其 response 被下载)。

    也就是我返回 None 的话,会继续按照 settings.py 的配置按顺序执行其他 Downloader Middleware。假如返回了 Response 对象,则会直接到达 spider 中 call_back 对应的方法进行返回的解析了。

    4. 会有顺序,顺序就是 settings.py 中的优先级(数字)。为了爬虫群功能清晰,所以不同作用的功能分成不同的 Middleware 了。有的时候某个 Middleware 是某个爬虫特异需要的,那样子就可以做爬虫内配置去启用或者关闭 Middleware。有点拼乐高的意思。

    像你说的合在一个类并非不行,只是不好。

    5. 我认为开始爬虫的时候 spider 就是被开启的。你可以在 open_spider 方法调试输出,被调用的次数并不多。另外可以参考一下核心 API 状态收集器(Stats Collector) API。
    saximi
        19
    saximi  
    OP
       2017-09-22 21:19:29 +08:00
    @toono 非常感谢您的耐心答复!关于您的爬虫代码,还有两个问题请教:

    1、douban.py 中构造下一页网址的语句如下

    next_page = response.xpath('//span[@class="next"]/a/@href').extract_first()

    next_page_url = self.start_urls[0] + next_page

    从豆瓣首页来看,第一条语句运行后的结果是 next_page = 'https://www.douban.com/group/explore?start=30'

    因为 start_urls = ['https://www.douban.com/group/explore'] ,所以 self.start_urls[0]就是 'https://www.douban.com/group/explore'

    所以第二条语句运行即为 next_page_url = 'https://www.douban.com/group/explore' + 'https://www.douban.com/group/explore?start=30'

    这明显就不是合法的 URL 了,请问我这个看法是否正确呢?谢谢


    2、pipelines.py 中的 ImagesDownloadPipeline 类,没有实现 process_item()方法,这个类实际上是不会起作用的吧?

    pipelines.py 中 MongoDBPipeline 类的 process_item()方法并没有 return item,是不是这个类也不会起作用?
    saximi
        20
    saximi  
    OP
       2017-09-22 21:44:46 +08:00
    @toono 在您的代码中还有这一句,请问哪里可以找到 remove_tags 的用法说明呢,我在 baidu 和 bing 上用 python 加上 remove_tags 作为关键字竟然都找不到?

    item['body'] = remove_tags(item['body'].extract_first(), which_Ones=('span', ))
    toono
        21
    toono  
       2017-09-25 09:14:15 +08:00
    @saximi

    1. 在我这 next_page 为" ?start=30 ",并不是完整的网址,所以拼接起来的下一页 URL 是没问题的。
    ![]( )

    2. 这个类继承了一个父类 ImagesPipeline,我只需要重载其中的两个处理方法就好了。

    3. remove_tags 不是 python 标准库里的,而是 scrapy 的。使用方法可以查看它的源码定义,有相关的使用文档注释。
    关于     帮助文档     自助推广系统     博客     AP     FAQ     Solana     2647 人在线   最高记录 6679       Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 30ms UTC 15:20 PVG 23:20 LAX 08:20 JFK 11:20
    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