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

最好是能在断网环境下离线阅读的资料和电子书籍,万分感谢了!
Python中关于Scrapy包用法的中文版学习资料推荐

22 回复

关于Scrapy的中文学习资料,我推荐几个实用的资源:

  1. 官方文档中文翻译:Scrapy官方文档有社区维护的中文翻译版,虽然可能不是最新版本,但核心概念讲得很清楚。你可以在Scrapy官网找到语言切换选项。

  2. 《Python爬虫开发与项目实战》(范传辉著):这本书有专门章节讲解Scrapy,从安装到项目实战都有涉及,适合初学者。

  3. 崔庆才的博客和GitHub:他写过很多Scrapy实战教程,比如爬取知乎、豆瓣等网站的例子,代码可以直接用。

  4. Scrapy中文社区:有一些技术博客和论坛,比如掘金、知乎上搜“Scrapy教程”,能找到不少带实例的讲解。

  5. 视频教程:B站上搜索“Scrapy爬虫”,有几个播放量高的系列视频,跟着一步步做项目学起来更快。

建议直接看官方文档配合实战项目学。

搞爬虫的还能断网?

厉害了,老哥

最近刚用 scrapy 写完一个小项目,把自己的一些经验写在博客上了,flamepeak.com 上了,可以看看,可以发邮件交流

爬虫是自己学的,公司是断网的,唉

辛苦了,公司竟然断网

我们办公室也不给接外网,我还以为很多都这样–.

😂你的公司是我知道的第一家。我同学们的公司都没有这样。

难道你们做金融的?

想问一句,公司断网,要这爬虫有何用(摔

看学习资料还不如看 Python 视频教程,由浅入深,小白也能变大牛哈: http://www.sucaihuo.com/video/13.htmlhttp://www.sucaihuo.com/video/20.html

就算断网也有需要用爬虫的场合,只是对于我个人而言倒是工作上还没有用到,但是希望能多了解一门技术,所以排除困难也要学

请问这个下载后不是可以直接阅读的,还要在 LINUX 下编译才行? 我直接输入 ./Makefile htmlhelp 结果报错了,WINDOWS 下可以让这些文件变成可读的么?

那不介意的话可以看看我在写的爬虫 https://github.com/ToonoW/TopicsSpiders

没编译过,http://scrapy-chs.readthedocs.io/zh_CN/latest/ 在线版,可以离线保存

先 mark



<br>我学习了您上传的爬虫代码,有一些问题想请您指点。万分感谢了!<br>1、<a target="_blank" href="http://middlewares.py" rel="nofollow noopener">middlewares.py</a> 中 MyAgentMiddleware 和 DoubanCookieChangeMiddleware 都是下载中间件,为何前者定义中声明了__init__方法,但后者却没有? <br><br>2、<a target="_blank" href="http://middlewares.py" rel="nofollow noopener">middlewares.py</a> 中 MyAgentMiddleware 的__init__方法为什么要这个参数:user_agent='' <br><br>3、我看了 scrapy 0.25 的官方说明文档,里面提到:“ process_request() 必须返回其中之一: 返回 None、返回一个 Response 对象、返回一个 Request 对象或 raise IgnoreRequest ” <br>但是您的 MyAgentMiddleware 和 DoubanCookieChangeMiddleware 都没有 return 语句,这是为何? <br><br>4、既然 MyAgentMiddleware 和 DoubanCookieChangeMiddleware 都没有返回,这两个类中的 process_request()是否会依序先后被调用,如果会的话,把两个类合并为一个类,在一个类中实现所有的方法是否更合理? <br><br>5、<a target="_blank" href="http://pipelines.py" rel="nofollow noopener">pipelines.py</a> 中有的类实现了 open_spider()这个方法,而只有当 spider 被开启时,这个方法被调用。请问 spider 的开启和关闭是在哪里设置的? <br><br>



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。

非常感谢您的耐心答复!关于您的爬虫代码,还有两个问题请教:

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,是不是这个类也不会起作用?

在您的代码中还有这一句,请问哪里可以找到 remove_tags 的用法说明呢,我在 baidu 和 bing 上用 python 加上 remove_tags 作为关键字竟然都找不到?

item[‘body’] = remove_tags(item[‘body’].extract_first(), which_ones=(‘span’, ))



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

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

3. remove_tags 不是 python 标准库里的,而是 scrapy 的。使用方法可以查看它的源码定义,有相关的使用文档注释。

回到顶部