目标网站http://second.zz.fccs.com/
,是一个郑州的二手房网站,采用scrapy框架来做做一个案列。这里使用pycharm来演示,那么现在pycharm的terminal终端创建一个项目scrapy startproject ershoufang
,这里的名字就叫做ershoufang吧,然后我们生成一个爬虫scrapy genspider er_spider http://second.zz.fccs.com/
,这里当然也可自己建一个,我们可以在spiders文件夹下新建一个er_spider文件,在这个里面编写自己的爬虫文件。

我们可以在pycharm的terminal终端输入命令scrapy shell http://second.zz.fccs.com/
,进入scrapy shell ,response就是数据返回的对象,可以直接使用response.xpath('xpath语句')
来提取我们想要的内容。

分析html结构发现我们需要的所有内容都在一个li标签下面,那么我们做一下测试,看看xpath语句对不对,如果xpath语句不会的话,可移至xpath语法学习。
#extract返回所有结果 extract_first返回一个结果 不加返回的是一个含有data的对象
response.xpath('//div[@class="info0"]/div[@class="t"]/a/div[1]/text()').extract() #提取标题
response.xpath('//div[@class="info1"]/div[@class="p1"]/div[1]/text()').extract() #面积
response.xpath('//div[@class="info1"]/div[@class="p1"]/div[2]/span/text()').extract() #价格
response.xpath('//div[@class="info0"]/div[@class="lp"]/label[2]/text()').extract() #区
测试完成,就需要在items文件
中把自己的数据对象定义一下,就是我们需要提取的内容,格式都是固定的,类必须继承spider.Item
class ErshoufangItem(scrapy.Item):
# define the fields for your item here like:
# name = scrapy.Field()
title = scrapy.Field() #名字
price = scrapy.Field() #价格
area = scrapy.Field() #面积
district = scrapy.Field() #区
这里如果想手动建爬虫文件的话,可参考下面的代码:
er_spider文件
import scrapy
from from ershoufang.items import ErshoufangItem
#我们需要在爬虫文件中引入items中的类
#会显示红提示,但是不会出错
class ErshouFang(scrapy.Spider):
name='ershou' #爬虫的名字
start_urls=['http://second.zz.fccs.com/'] #起始的url 固定的变量名
def parse(self,response): #定义解析方法,名字固定为parse
for ershoufang_item in response.xpath('//li[@class="item salelist"]'): #先抓大,所有的内容都在li标签下
yield{ 创造一个生成器
'title':ershoufang_item.xpath('./div[@class="info0"]/div[@class="t"]/a/div[1]/text()').extract(),
'area':ershoufang_item.xpath('./div[3]/div/div[@class="p1"]/div[1]/text()').extract(),
'price':ershoufang_item.xpath('./div[3]/div/div[@class="p1"]/div[2]/span/text()').extract(),
'district':ershoufang_item.xpath('./div[@class="info0"]/div[@class="lp"]/label[2]/text()').extract()
}
#获取下一页的href a/[last()] 取出a的最后一个标签
next_page=response.xpath('//div[@class="pages"]/div/div/div/a[last()]/@href').extract_first()
if next_page is not None: #如果存在下一页
yield scrapy.Request(response.urljoin(next_page))
#把下一页的链接交给scrapy.Request对象,使用urljoin拼接
settings文件
ROBOTSTXT_OBEY = False #默认为True,改为False不遵守爬虫协议
ITEM_PIPELINES = {
'ershoufang.pipelines.ErshoufangPipeline': 300,
} #settings文件本身就有,开启即可
MONGODB_HOST='127.0.0.1' #本地
MONGODB_PORT=27017 #端口
MONGODB_DBNAME='ershoufang' #定义数据库名
MONGODB_DOCNAME='ershou' #定义集合名
编写一个爬虫可以按照爬虫文件<------>items文件<------>settings文件<------->pipelines文件
的顺序写。
常见报错
这个运行过程可能会出错,那么在这里提示一下,其实大部分还带你自己看明白。运行过程中,会一页一页的显示数据就像 DEBUG: Scraped from <200 http://xxxx.html>
这样,有数据就是没有问题,那么也可能是这样DEBUG: Crawled (403)
,这是挂了,需要跟换ip,或者界面出现了验证码,一般都是请求太快,网页会显示验证码,我们只要跟换ip就可以了。
测试发现这个网页爬取到40到50页就会出现验证码,其实就是ip挂了,需要更换ip。我们也可以对数据保存为json或者csv格式到本地,使用scrapy crawl ersou -o ershou.json或者csv
,自己可以练习一下。
2. 本站不保证所提供下载的资源的准确性、安全性和完整性,资源仅供下载学习之用!如有链接无法下载、失效或广告,请联系客服处理!
3. 您必须在下载后的24个小时之内,从您的电脑中彻底删除上述内容资源!如用于商业或者非法用途,与本站无关,一切后果请用户自负!