scrapy爬虫系列:scrapy入门demo
发布于 作者:苏南大叔 来源:程序如此灵动~苏南大叔做了这么多篇的铺垫,终于可以写到scrapy
的正题了。scrapy
爬虫是目前最流行的python
框架,全世界的人都在关注这款scrapy
的节奏。
其实,苏南大叔并不对这个scrapy
爬虫特别感冒,毕竟以前用php
或者.net
也经常写类似的功能。但是出于学习新知识,保持与世界同步的目的,苏南大叔也来研究研究这款scrapy
爬虫框架。
本文仅仅是入门
demo
,并非正常的scrapy
项目构成。如果想了解完整版本的scrapy
项目,请参考:
基础环境
苏南大叔准备在最新的python3.7
基础上,使用scrapy
这款爬虫框架。那么就注定了要遇到更多的困难。不过,遇到问题就解决问题嘛。这不,写到这篇文章的时候,相关的问题的解决方案都在前一周的内容中,进行了说明。当然,如果您害怕太多未知问题,您也可以使用最保险的python27
,情况会好很多。
一年前,苏南大叔研究这款scrapy
的时候,主流还是python27
。但是今年,python3
的声音明显壮大。所以,顺应时代潮流吧,少年!如果您安装过程中,遇到了一些问题,可以翻看文末链接。
理论上来说,本文叙述的scrapy
的内容上与操作系统是win10
还是mac
无关的。截图所示演示环境为win10
,python
的版本号为3.7.0
。
下载scrapy
通过pip
下载scrapy
的脚本如下:
pip install scrapy
安装好scrapy
之后,可以使用scrapy version
来查看版本号。
scrapy version
第一个demo
官方文档给出了第一个demo
。这个demo
的主要功用是:抓取目标网址的内容,并把它保存到.json
文件中。
官方链接见这里:
quotes_spider.py
文件,代码如下:
import scrapy
class QuotesSpider(scrapy.Spider):
name = "quotes"
start_urls = [
'http://quotes.toscrape.com/tag/humor/',
]
def parse(self, response):
for quote in response.css('div.quote'):
yield {
'text': quote.css('span.text::text').extract_first(),
'author': quote.xpath('span/small/text()').extract_first(),
}
next_page = response.css('li.next a::attr("href")').extract_first()
if next_page is not None:
yield response.follow(next_page, self.parse)
运行脚本
在项目代码更目录下,运行下面的脚本。就可以把抓取到的内容,保存为一个json
文件。您如果想知道,为啥要保存为一个json
。其实就是因为这个最简单嘛,入门demo
太复杂的话,新手就看不懂了。对不?
scrapy runspider quotes_spider.py -o quotes.json
如果一切顺利的话,就可以在同目录下面获得quotes.json
文件。
分析
苏南大叔接下来,对上述代码,做点小小的代码分析:
scrapy runspider
这个是基本套路,执行一个爬虫
。quotes_spider.py
是主要的逻辑体。-o quotes.json
,就是输出到.json
文件的意思了。.css
这个就类似于jquery
的css相关语法,可以精确定位到要获取的数据。.xpath
这个就是类似于解析dom树的时候的xpath
语法,可以更精确的匹配获取数据。parse()
这个是个套路函数,用于解析数据,通过yield
返回数据。需要仔细关注yield
部分。
其实代码体就这么几行,大家可以尽情发挥想象力,去猜测上面的功用。对比一下,我们所熟悉的php
代码,这个python
的代码的缩进是非常重要的,就是靠缩进来代替{}
的。这点,对于新手也尤其重要。
大概的思路就是:爬虫quotes
从start_urls
开始爬行,默认回调函数parse()
,通过.css
和.xpath
取得数据,通过yield
返回数据。取得下一页链接后,再次调用默认回调函数parse()
。
相关链接
- 《pip install的时候,提示缺少'cl.exe',该怎么办?》
https://newsn.net/say/pip-vc.html
- 《win环境,python37如何安装libxml2?》
https://newsn.net/say/python-libxml2-win.html
- 《win环境,如何通过pip离线安装Twisted?》
https://newsn.net/say/python-twisted.html
- 《win环境,python如何解决错误:No module named 'win32api'》
https://newsn.net/say/python-win32api.html
总结
本篇文章,就运行官方demo的第一个例子,随着官方的说明文档。苏南大叔和大家一起学习scrapy
爬虫框架的使用方法。
本博客不欢迎:各种镜像采集行为。请尊重原创文章内容,转载请保留作者链接。