爬虫爬取赶集网租房信息

1、爬虫–scrapy

1.搭建环境

代码以下(示例):css

import scrapy
import numpy as np
import pandas as pd
import matplotlib.pyplot as plt 

2.加载scrapy框架

代码以下(示例):python

# terminal 终端实现 cd .. # 跳转到上一层目录 scrapy startproject booktop # 和项目同名的scrapy框架项目 

3. setting配置

代码以下(示例):网络

ROBOTSTXT_OBEY = False # 君子协议 false 不遵照 USER_AGENT = 'Mozilla/5.0 (Windows NT 6.1; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/85.0.4183.121 Safari/537.36' DOWNLOAD_DELAY = 0.5 # 下载延迟 

4.spider编写

代码以下(示例):框架

# spiders文件夹下建立python文件 ganspider.py import scrapy from demo6.items import HouseItem class GanJiSpider(scrapy.Spider): name="gan_spider" allowed_domains=["xiangyang.ganji.com"] start_urls=["http://xiangyang.ganji.com/zufang/"] # 解析数据 def parse(self, response, **kwargs): # print(response.text)

测试

代码以下(示例):dom

# 在terminal终端进行
cd gandemo # 进入项目文件夹
scrapy crawl gan_spider # 运行项目下的爬虫(和name的值保持一致)
# 测试成功,看到页面代码

5. 获取数据(户型+价格)

代码以下(示例):scrapy

# 须要导入HouseItem类 文件开头导入 from demo6.items import HouseItem from demo6.items import HouseItem class HouseSpider(scrapy.Spider): name="house_spider" allowed_domains=["xiangyang.ganji.com"] start_urls=["http://xiangyang.ganji.com/zufang/"] # 解析数据 def parse(self, response, **kwargs): # 全部的房子 houses=response.css('dl.f-list-item-wrap.min-line-height.f-clear') # 户型 价格 for house in houses: size=house.css('dd.dd-item.size span:first-child::text').extract() [0] # print(size) price=house.css('div.price span.num::text').extract()[0] # print(price) yield HouseItem(size=size,price=price) 

须要使用item对象完成数据封装并传输

代码以下(示例):ide

# items.py书写房屋类 class HouseItem(scrapy.Item): size=scrapy.Field() price=scrapy.Field() pass 

6.pipeline 管道存储数据

代码以下(示例):学习

# 在setting文件下,解开注释
ITEM_PIPELINES = { 'booktop.pipelines.HousePipeline': 300, } #数据存储到txt文件下 # 打开管道文件 BooktopPipeline class HousePipeline: def process_item(self, item, spider): file=open('house.txt','a+',encoding='utf-8') file.write( item['size']+','+item['price']+'\n') return item # 运行测试结果house.txt下有数据成功 

2、分析和可视化

代码以下(示例):测试

# 在项目中建立 分析文件 demo.py import pandas as pd import matplotlib.pyplot as plt # 数据源 data=pd.read_csv('house.txt',names=['size','price']) print(data) # 统计groupby不一样户型的最高价max,最低价min,均价mean, result=data.groupby('size').agg(['max','min','mean']) print(result) # 绘制不一样户型均价折线图、柱状图 import matplotlib # 中文可显示 font = {'family': 'microsoft yahei', 'weight': 'bold', 'size': 12} matplotlib.rc('font', **font) plt.title('不一样户型房源示意图') # 折线图 柱状图 plt.plot(result.index,result['price']['mean'],'r*--') plt.bar(result.index,result['price']['mean']) plt.show()

本文的文字及图片来源于网络,仅供学习、交流使用,不具备任何商业用途,若有问题请及时联系咱们以做处理

想要获取更多Python学习资料能够加
QQ:2955637827私聊
或加Q群630390733
你们一块儿来学习讨论吧!
相关文章
相关标签/搜索