最近在看爬虫,跟着Scrapy的官方文档实例走了一遍,等自己想爬别的网站的时候,发现还是有点问题,于是网上找了个教程,自己跟着做了一遍,然后换了一个网站,爬一下别的数据,现在做一下记录,由于也是刚刚接触,所以在一些使用上可能还存在误区,欢迎大家批评指正。
http://www.weather.com.cn/weather/101250101.shtml
这是我们爬取信息的网址,爬取长沙未来七天的天气情况。
环境:windows10,python3.6,scrapy1.8,anaconda,chorme
创建scrapy项目并生成相应的文件
首先选择一个你的项目位置,然后在该位置下打开cmd,执行 scrapy start testSpider ,初始化一个scrapy项目,其中最后一个字段是项目名称,效果如下:
在PyCharm中可以查看一下目录结构:
这些文件的主要作用在官方文档里都有介绍。
然后我们回到cmd,根据提示进行操作,cd testSpider 切换到项目的文件夹下,执行 scrapy genspider example example.com,这里example是你的爬虫的name,是他的唯一标示,不同的爬虫的name必须不同,example.com是允许爬取的域。
我们执行 scrapy genspider weather weather.com.cn 创建一个爬虫的执行文件。执行完之后可以PyCharm中看到在spiders的文件夹下生成了一个weather.py文件:
文件包含一些自动生成的代码。
分析需要爬取的网页并编码
我们打开那个网址,ctrl+shift+i,检查,一步一步找到我们需要的信息,最终发现,这些天气的信息都在一个如图所示的位置。
找到这个位置之后,我们点开一天的,信息如下图所示,因为我是在晚上写的这篇博客,看的又是第一天,所以只有最低温度,没有最高温度,我们提取 天,天气,最低温和最高温这4项信息。
这时候,我们需要打开项目中的items.py,写一个类来保存(封装)我们的这些数据,如下图所示。
下面需要我们的爬虫登场了,打开spider下的weather.py,我们下面使用BeautifulSoup来进行数据的提取。我直接贴上代码喽。
1 | import scrapy |
整体的思想就是一步一步缩小范围,逐步获得我们需要的数据。
entryPoint.py 便捷启动
编写完上面的代码,在scrapy项目的根目录下执行 scrapy crawl weather 就能为了能够运行爬虫程序了,但是为了更加方便的启动爬虫,我们可以在项目根目录下编写一个entrypoint.py文件,直接在PyCharm中启动爬虫,
1 | from scrapy.cmdline import execute |
执行之后就能够看到爬取的数据的结果了:
到这,这个简单的scrapy爬虫实战就结束了….确实很简单,但也会有成就感。
补充
最后补充一点,菜鸡用markdown的时候,#后面忘记加空格,导致标题显示不出来,嘿嘿嘿,抽自己一下。