scrapy实例:爬取中国天气网
1.创建项目
在你存放项目的目录下,按shift+鼠标右键打开命令行,输入命令创建项目:
回车即创建成功
这个命令其实创建了一个文件夹而已,里面包含了框架规定的文件和子文件夹.
我们要做的就是编辑其中的一部分文件即可.
其实scrapy构建爬虫就像填空.这么一想就很简单了
cmd执行命令:
进入项目根目录.
你已经创建好了一个scrapy项目.
我想,有必要了解一下scrapy构建的爬虫的爬取过程:
scrapy crawl spidername开始运行,程序自动使用start_urls构造Request并发送请求,然后调用parse函数对其进行解析,在这个解析过程中使用rules中的规则从html(或xml)文本中提取匹配的链接,通过这个链接再次生成Request,如此不断循环,直到返回的文本中再也没有匹配的链接,或调度器中的Request对象用尽,程序才停止。
2.确定爬取目标:
这里选择中国天气网做爬取素材,
所谓工欲善其事必先利其器,爬取网页之前一定要先分析网页,要获取那些信息,怎么获取更加 方便.
篇幅有限,网页源代码这里只展示部分:
可以看到这部分包含城市信息,这是我们需要的信息之一.
接下来继续在页面里找其他需要的信息,例如天气,温度等.
3.填写Items.py
Items.py只用于存放你要获取的字段:
给自己要获取的信息取个名字:
4.填写spider.py
spider.py顾名思义就是爬虫文件.
在填写spider.py之前,我们先看看如何获取需要的信息
刚才的命令行应该没有关吧,关了也没关系
win+R在打开cmd,键入:
这是scrapy的shell命令,可以在不启动爬虫的情况下,对网站的响应response进行处理调试等
运行结果:
还有很长一大串日志信息,但不用管,只要你看到Available Scrapy objects(可用的scrapy对象)有response就够了.
response就是scrapy帮你发送request请求到目标网站后接收的返回信息.
下面做些测试:
定位元素使用的是xpath,如果此前没接触过xpath,不要紧,百度一下
在此我解释下In[3]的xpath: 获取class="crumbs f1"的div下的a标签的text文本
至于extract()是用来提取文本
经过测试,In[3]里输入的语句可以获得我们想要的信息
那就把它写进spider里:
爬虫到这里已经可以初步实现了.修改下items.py里只留下city,
执行爬虫:(注意要在项目路径下)
到这里还只能获取一个"city"字段,还需要在html里获取剩余的字段.
你可以尝试自己写xpath路径.
完整的spider.pyimport scrapy
多了不少东西,这里简单说明一下:
allowed_domains:顾名思义,允许的域名,爬虫只会爬取该域名下的url
rule:定义爬取规则,爬虫只会爬取符合规则的url
rule有allow属性,使用正则表达式书写匹配规则.正则表达式不熟悉的话可以写好后在网上在线校验,尝试几次后,简单的正则还是比较容易的,我们要用的也不复杂.
rule有callback属性可以指定回调函数,爬虫在发现符合规则的url后就会调用该函数,注意要和默认的回调函数parse作区分.
(爬取的数据在命令行里都可以看到)
rule有follow属性.为True时会爬取网页里所有符合规则的url,反之不会. 我这里设置为了False,因为True的话要爬很久.大约两千多条天气信息.
但要保存爬取的数据的话,还需写下pipeline.py:
5.填写pipeline.py
这里有三种保存方法,你可以选择其中一种测试
这里写了管道文件,还要在settings.py设置文件里启用这个pipeline:
6.填写settings.py
改下DOWNLOAD_DELAY"下载延迟",避免访问过快被网站屏蔽
把注释符号去掉就行
改下ITEM_PIPELINES:
去掉注释就行,数字的意思是数值小先执行,
完成.
进入项目根目录执行爬虫:
运行部分结果:
根目录下的excel文件:
写入excel的内容
写入txt文件的内容:
欢迎留言交流!
完整项目代码:https://github.com/sanqiansang/weatherSpider.git