爬取的页面如下:爱上租的租房页面
需要爬取该页面下所有房间的基本信息
scrapy框架的安装和使用教程参考以下链接 http://www.scrapyd.cn/doc/178.html
首先在spiders目录下新建一个house_spider.py,将上面爬取页面的链接添加到start_urls中
此处可打印下看是否请求到页面
def parse(self, response):
print(response.body)
运行结果如下,即已经请求到页面
scrapy运行一般都是在终端下输入 scrapy crawl 项目名 运行,每次输入很是麻烦,提供一个方法,可以在项目目录下新建一个entrypoint.py文件,加上以下内容,“aishangzu”是爬虫名,在spider.py中设置的,每次运行entrypoint.py即可
from scrapy import cmdline
cmdline.execute(['scrapy', 'crawl', 'aishangzu'])
scrapy框架内部处理了对页面的解析,这也是该框架最方便的一个地方
接下来分析所要爬取的数据的标签,可以看到所需信息在class=“list-item”标签下第2个div的a标签下的span标签
使用xpath定位所需信息,由于要获取该页面下的所有房间信息,因此采用了循环遍历
def parse(self, response):
summ = response.xpath('//div[@class="list-item"]')
num = len(summ)
for i in range(num):
title =summ.xpath('//div[@class="listitem"]/div[2]/div[1]/a/span/text()').extract([i] # 房名
地理位置、价格等其他信息同样可通过xpath来获取,相比BeautifulSoup速度快很多
上面仅获取了第一页的数据,还要获取多页的数据
找到下一页的链接
scrapy中提供了请求下一页的方法,同样需要使用xpath获取到链接
next_page = response.xpath('//div[@class="pagination"]/a[last()]/@href').extract_first() #获取下一页的链接
if next_page is not None:
next_page = response.urljoin(next_page)
yield scrapy.Request(next_page, callback=self.parse)
这样,所有房源的基本信息都获取到了,接下来就是怎么把爬取的数据存到数据库中
请看下一节