回顾
scrapy是一个很是强大的异步爬虫框架,组件丰富,咱们只须要关注爬虫的逻辑便可。本文经过一个scrapy项目实战,来熟悉scrapy的使用css
站点分析
目标站点:scrapy官方提供的抓取网站,主要是名人名言、做者标签之类的信息 java
网页结构很是简单
翻页url:
quotes.toscrape.com/page/5/ 该网站没有任何的反爬虫措施,结果也很简单
流程框架
实现
进入命令行,切换到工程文件夹执行:python
- scrapy startproject quote_tutorial
- cd quote_tutorial
- scrapy genspider quotes quotes.toscrape.com
- 打开pycharm,会发现以下图界面
其中一个文件的内容以下:
name:是惟一的标识 parse:用来解析爬取到的页面 其他文件介绍: 1.配置文件
2.items文件 它实际上是用来保存数据的一个数据结构
3.middlewares文件 它实际上是爬取数据时定义的一些中间件,能够用来处理request、response和一些exceptions之类的操做,能够用它来改一些request、response等一些相关的配置 4.piplines文件 管道,用来输出一些items,主要用作数据清洗、重复的检查、将数据存储到数据库
5.settings 这个文件比较重要,里面对了不少配置信息。、实际上就是不少的变量
最主要的代码都会在spider目录下写面试
运行
上图中的quotes是spider的惟一标识符,在以前也有介绍 运行:
scrapy crawl quotes 就是执行那么为quotes的spider 下图是截取的另一部分输出:
另外,咱们该写下parse方法,该方法会在发起http请求后调用,主要是用来解析页面:
像以前同样运行:
scrapy crawl quotes 后控制台就会输出请求成功后的网页源码 parse方法其实回调,在spider调用执行的时候首先会调用上图中的start_urls请求连接,而后会自动调用parse方法解析网页
网页分析和实现
咱们须要的数据有:shell
- 名言内容
- 做者
- 标签
先前提过,scrapy中自动生成了不少文件其中有一个名字为item,这个文件是用来定义存储网页数据的数据结构。这个类须要按照需求重写:主要是指定一些字段,以后就能够把爬取后的数据按照一个一个的总体保存下来了。item文件的初始化内容以下图所示:
上图中注释的name字段其实就是示例说明,针对本次爬虫的需求咱们对该文件进行补充,最后以下图所示:
上述就是依旧本次爬虫需求而定义的存储数据的数据结构
页面解析 数据结构定义好以后,咱们须要进行页面解析也就是parse方法的编写: 数据库
本文的parse方法以下图所示:
scrapy调试 scrapy还提供了一个很是强大的根据:scrapy shell 能够从terminal输入:scrapy shell quotes.toscrape.com后面跟的是网址,以后就能够进入命令行交互模式下面,在这里进行一些调试 json
以后能够进行一些调试:
也能够进行一些选择器的调试:
修改parse方法后运行 在修改parse方法后再在terminal中执行:scrapy crawl quotes 运行结果图: 数据结构
翻页解析
上面已经完成了单个页面的解析,接下来就剩翻页问题了。翻页能够经过url来请求: quotes.toscrape.com/page/5/ 直接改变url中的页面数字便可完成翻页的请求,这个连接能够从response中获取: 框架
使用css选择器便可:
next = response.css('.pager .next a::attr(herf)').extract_first() 以后将next转换为绝对的url:
url = response.urljoin(next) 上面获得的就是下一页的绝对url
加上翻页功能,完整的parse函数以下图所示: 异步
完成parse函数后,再次执行:
scrapy crawl quotes 结果以下:
如何保存结果呢?
scrapy crawl quotes -o quotes.json 在当前目录下会生成quotes.json文件,文件中就是爬取的数据:
或者
- scrapy crawl quotes -o quotes.json:可使用json.loads解析
- scrapy crawl quotes -o quotes.csv
- *scrapy crawl quotes -o quotes.txt
- *scrapy crawl quotes -o quotes.xml
- *scrapy crawl quotes -o quotes.jl:实际上是json line格式:一行一行的存储
- 使用 -o输出结果到文件,经过文件名称后缀自动判断文件格式
- 另外还支持:pickle、marshal等后缀的文件格式
- 还支持远程保存:-o ftp://user:pass@ftp.example.com/path/quotes.csv
剩余工做
保存以前能够作一些其余操做,好比:过滤掉一些不合格的item数据。这个功能能够借助piplines.py文件完成。该文件的原始内容以下:
这里咱们只显示名言的前150个字符,若是名言的长度超过了150,则在后面用**...**替换piplines.py文件最终以下图所示:
注意:能够定义多个pipline:好比写数据库之类的也可使用pipline实现 pipline定义后须要在setting文件中配置,当前启用哪几个pipline
最后,再次执行:
scrapy crawl quotes 执行结果代表达到了预期效果:
源码
上面给出了文章的核心代码分析,
扫描下方二维码,发送关键词“scrapy”便可获取本文的完整源码和详细程序注释
公众号专一:互联网求职面经、java、python、爬虫、大数据等技术、海量资料分享:公众号后台回复“csdn文库下载”便可免费领取【csdn】和【百度文库】下载服务;公众号后台回复“资料”:便可领取5T精品学习资料、java面试考点和java面经总结,以及几十个java、大数据项目,资料很全,你想找的几乎都有