数据爬取(scrapy)

# 创建工程
scrapy startproject lianjia
cd lianjia
scrapy genspider gethouse www.xxx.com

items.py

import scrapyclass LianjiaItem(scrapy.Item):# define the fields for your item here like:# name = scrapy.Field()name = scrapy.Field()community = scrapy.Field()area = scrapy.Field()house_type = scrapy.Field()acreage = scrapy.Field()price = scrapy.Field()

gethouse.py

import scrapy
from ..items import LianjiaItem
import re
page = 100
areas = ['dongcheng', 'xicheng', 'haidian', 'chaoyang']class GethouseSpider(scrapy.Spider):name = 'gethouse'# allowed_domains = ['www.xxx.com']start_urls = []for area in areas:for i in range(1, page+1):start_urls.append('https://bj.lianjia.com/zufang/{}/pg{}/'.format(area, i))def parse(self, response):item = LianjiaItem()div_list = response.xpath('//div[@class="content__list"]/div')for div in div_list:item['name'] = div.xpath('.//a[@class="content__list--item--aside"]/@title').extract()[0].split(' ')[0]item['house_type'] = div.xpath('.//a[@class="content__list--item--aside"]/@title').extract()[0].split(' ')[1]item['price'] = div.xpath('.//span[@class="content__list--item-price"]//text()').extract()[0]item['area'] = div.xpath('.//p[@class="content__list--item--des"]/a[1]/text()').extract()[0]temp = div.xpath('.//p[@class="content__list--item--des"]//text()').extract()item['acreage'] = re.findall('/\n        (.*?)㎡', ''.join(temp), re.S)[0]print('完成一页')yield item

settings.py

LOG_LEVEL = 'ERROR'
USER_AGENT = ''
ROBOTSTXT_OBEY = False
DOWNLOAD_DELAY = 1 #每页下载完停一秒防止被封

开爬

scrapy crawl gethouse -o beijinghouse.csv -t csv

数据(里面有一列忘了爬了):


数据分析

import numpy as np
import pandas as pd## 数据预处理:去重以及去除空值
data = pd.read_csv('./beijinghouse.csv')
data = data.drop_duplicates()
data.duplicated()
data = data.dropna(axis=1)  #dropna默认情况下是一行中有nan就把这行全删了,所以我们先把那列community删掉
data = data.dropna()## 统一数据格式
housetype = data['house_type']
temp = []
for i in housetype:each = i.replace('房间', '室')temp.append(each)
data.loc[:, 'house_type'] = temp## 研究各城区的房源数量
new_data = pd.DataFrame({'area': data['area'].unique(), 'num': [0]*4})
each_num = data.groupby(by='area').count()
new_data['num'] = each_num.values
new_data.sort_values(by='num', ascending=False)## 研究哪种户型数量较多
def housenum(arr):result = {}for i in arr:if result.get(i) is None:  # 推荐用get对字典进行取值,取不到不会报错result[i] = 1result[i] += 1return resultarr = data['house_type']
## 字典推导式  dict()函数可以将列表转换成字典  dictionary.items()可以将字典转换为可迭代的列表
house_info = dict((key, value) for key, value in housenum(arr).items() if value > 50)
## dictionary.keys()和.values()都会生成列表
show_houses = pd.DataFrame({'house_type': [x for x in house_info.keys()], 'num': [x for x in house_info.values()]})## 画图显示各户型的房屋数量(条形图)
import matplotlib.pyplot as plt# 设置显示中文字体
from pylab import mpl
mpl.rcParams["font.sans-serif"] = ['SimHei']
# 避免由于字体更改导致部分字符无法正常显示
mpl.rcParams['axes.unicode_minus'] = Falsehouse_type = show_houses['house_type']
num = show_houses['num']
plt.barh(range(5), num, height=0.7, color='blue', alpha=0.8)
plt.yticks(range(5), house_type)
plt.xlim(0, 500)
plt.xlabel('数量')
plt.ylabel('户型种类')
plt.title('北京各户型房屋数量')
## enumerate()的作用是将一个可迭代的对象封装成一个个元组
for x, y in enumerate(num):## plt.text()表示无指向注释,这里注释的是每个小条的长度,即这类户型的数量plt.text(y + 0.2, x - 0.1, '%s' % y)
plt.show()

从链家网上爬取租房数据并进行数据分析相关推荐

  1. 08 网上爬取的数据如何制作成表

    网上爬取的数据如何制作成表 一.背景 二.操作办法 三.总代码 一.背景 从网上搞到一份数据,如图所示: 我该怎么制作成excel表呢?最后结果为: 二.操作办法 1.由于最后要生成表格,这里使用cs ...

  2. 利用pandas对在链家网爬取的租房数据进行清洗

    爬虫代码可以参考这篇文章,全是干货,在此不再赘述. 爬下来的数据就可以进行数据清洗啦!首先确定需要处理的字段.因为后续准备做回归,所以我的变量设置是这样的: 清洗前的数据如下所示: 结合模型的变量.数 ...

  3. Python爬取链家网24685个租房信息并进行数据分析

    2020年注定是一个不平凡的年份,很多行业受疫情影响艰难前行,即便复产复工提速,被抑制的需求也难以短期释放.与此同时,地摊经济孕育而生,如果人们真的都去摆地摊了,是不是也会出现睡地摊的普遍现象?这时候 ...

  4. python爬虫案例-Python爬取租房数据实例,据说可以入门爬虫的小案例!

    一.什么叫爬虫 爬虫,又名"网络爬虫",就是能够自动访问互联网并将网站内容下载下来的程序.它也是搜索引擎的基础,像百度和GOOGLE都是凭借强大的网络爬虫,来检索海量的互联网信息的 ...

  5. Python爬取租房数据实例,据说可以入门爬虫的小案例!

    一.什么叫爬虫 爬虫,又名"网络爬虫",就是能够自动访问互联网并将网站内容下载下来的程序.它也是搜索引擎的基础,像百度和GOOGLE都是凭借强大的网络爬虫,来检索海量的互联网信息的 ...

  6. 一小时入门Python爬虫,连我都会了!Python爬取租房数据实例

    一.什么叫爬虫 爬虫,又名"网络爬虫",就是能够自动访问互联网并将网站内容下载下来的程序.它也是搜索引擎的基础,像百度和GOOGLE都是凭借强大的网络爬虫,来检索海量的互联网信息的 ...

  7. 链家java_java爬取链家网数据

    int num = 1; String path = "D:\\房源信息.txt"; BufferedWriter bf = new BufferedWriter(new File ...

  8. 网上爬取股票数据实例

     # -*- coding:utf-8 -*- import requests from bs4 import BeautifulSoup import time import random im ...

  9. Python爬虫实战爬取租房网站2w+数据-链家上海区域信息(超详细)

    Python爬虫实战爬取租房网站-链家上海区域信息(过程超详细) 内容可能有点啰嗦 大佬们请见谅 后面会贴代码 带火们有需求的话就用吧 正好这几天做的实验报告就直接拿过来了,我想后面应该会有人用的到吧 ...

  10. Python爬虫爬取链家网上的房源信息练习

    一 原链接:用Python爬虫爬取链家网上的房源信息_shayebuhui_a的博客-CSDN博客_python爬取链家 打开链家网页:https://sh.lianjia.com/zufang/  ...

最新文章

  1. 使用Linux lvm
  2. Base64编码原理与应用
  3. 为 Nginx 创建 windows 服务自启动
  4. 文件、文件夹操作(I)
  5. hexo version control
  6. 深度学习(二十一)基于FCN的图像语义分割-CVPR 2015
  7. SAS 入门(二)实战篇
  8. Windows中删除文件时提示没有权限怎么办?
  9. Ubuntu18.04自带火狐浏览器设置语言为中文
  10. 小白学JAVA之十——枚举
  11. windows下Intel核显应用ffmpeg的qsv插件编解码
  12. NPN求解三极管电路或电容恒流放电详解,三极管工作在放大区,基极控制集电极电流,针对电荷泵电容恒流放电控制,因为电荷泵输出恒定电流给快充手机锂电池充电
  13. 计算机为动态分区无法安装系统,装系统时提示目标分区是动态磁盘的gpt分区,需要在pe环境下进行备份或还原怎么解决...
  14. chrome中下载文档时设置成不使用idm下载器的方法
  15. Java 判空工具方法大全
  16. 挂起模块 hungapp
  17. 使用charles 抓不到chrome浏览器的包 -- 以及win 10系统关闭charles上不了网问题的解决办法
  18. 易飞ERP单据自动审核程序
  19. 怎么用cad版本转换器?转换cad版本的方法
  20. Sec-Fetch-*请求头

热门文章

  1. python画平行四边形_利用transform skewX制作平行四边形导航菜单
  2. python快乐数字怎么表达_幸福快乐用数字怎么表示?
  3. removeclass 传入两个类_jQuery removeClass() 方法
  4. 命令行看不见光标怎么办
  5. 林大计算机科学考研分数线,2018年北京林业大学考研复试分数线已公布
  6. 关于VScode中如何修改默认的中文注释格式(包括去除斜体和修改颜色)
  7. 快速拥有自己的博客,语雀或许是不错的选择
  8. 天下武功,唯快不破——快速搜索工具 ripgrep
  9. Zookeeper轻松上手
  10. 自动化脚本开发,真香.....