本人是一名Scrapy的爱好者和初学者,写这文章主要是为了加深对Scrapy的了解,如果文章中有写的不对或者有更好的方式方法欢迎大家指出,一起学习。
开发环境
运行平台:Windows 7
Python版本:Python 3.6.1
Scrapy版本:Scrapy 1.4.0
IDE:Sublime text3
浏览器:chrome
下面我们进入本文的主题,爬取我们的第一个网页 “ 去哪儿 ” 的酒店城市列表,图中红色框框部门。
创建项目 scrapy startproject qunar
创建爬虫:
cd qunar
scrapy genspider hotel bnb.qunar.com
自此,我们的项目算是基本创建好了,其中 “ hotel ” 是指爬虫的名称, “ bnb.qunar.com ” 爬虫的域名。不过为了方便我们项目启动,可以在项目文件夹下新建一个 entrypoint.py 文件,文件内容如下:
创建Item
创建一个新的Item方便我们保存所爬取的数据,从爬取的页面中可以看出,我们需要两个数据就够了,一个是城市名称,另一个是城市对应的URL。
下面我们就来创建保存这两个数据Item:
上面QunarItem是由scrapy自动生成出来的,我们暂时先不管它,如果你想直接用系统创建的那个Item也是可以的。我这里是自己新创建一个,看起来比较好管理。
分析HTML
按F12进入开发者工具,在按 Ctrl + Shift + c 进入元素查找状态,找到包裹我们要爬取内容的div,如图下所示:
从图中可以看出,A~Z分别在一个div中,所以我们只要解析出一个div那其他25个div也就解析出来了。然后,我们在从右侧中一层一层点进去,找到第一个城市“阿坝”,如下图所示:
通过对图的观察,可以发现,我们首先要找到包裹所以内容class=”b_allcity”的div,在从这个div中找到所有class=”e_city_list”的div,在从中找到所有“li”标签中的“a”标签,爬取“a”标签中的文本及“href”属性。
item我们已经创建好了,对HTML页面也进行了分析,下面就可以进入主题了“爬虫”,有点小激动。
爬取网页
打开spiders中的hotel.py文件。这文件是系统帮我们创建的,系统帮我们创建了一下关键代码。如图
下面我们只要对这么代码稍稍改动一点,并写出之前我们对HTML解析的代码就好了。如图:
本文中我使用的是“BeautifulSoup”来对HTML代码进行解析的,如果有没装“BeautifulSoup”的小伙伴可以在命令窗口中直接安装,安装代码:
pip install bs4
写到这里,代码就已经写完了,下面我们就来运行起来看看效果如何。
在命令窗口输入:
python entrypoint.py