爬虫+数据分析:重庆买房吗?爬取重庆房价

现在结婚,女方一般要求城里有套房。要了解近些年的房价,首先就要获取网上的房价信息,今天以重庆链家网上出售的房价信息为例,将数据爬取下来分析。

爬虫部分

一.网址分析
https://cq.fang.lianjia.com/loupan/

下面我们来分析我们所要提取的信息的位置,打开开发者模式查找元素,我们找到房子如下图.如图发现,一个房子信息被存储到一个li标签里。

单击一个li标签,再查找房子名,地址,房价信息。

网址分析,当我点击下一页时,网络地址pg参数会发生变化。
第一页pg1,第二页pg2…

二.单页网址爬取
采取requests-Beautiful Soup的方式来爬取

from bs4 import BeautifulSoup
import numpy as np
import requests
from requests.exceptions import  RequestException
import pandas as pd
#读取网页
def craw(url,page):try:headers = {"User-Agent": "Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/69.0.3947.100 Safari/537.36"}html1 = requests.request("GET", url, headers=headers,timeout=10)html1.encoding ='utf-8' # 加编码,重要!转换为字符串编码,read()得到的是byte格式的html=html1.textreturn htmlexcept RequestException:#其他问题print('读取error')return Nonefor i  in range(1,2):#遍历网页1url="https://cq.fang.lianjia.com/loupan/pg"+str(i)+"/"html=craw(url,i)print(html)print('结束')

三.网页信息提取


#解析网页并保存数据到表格
def pase_page(url,page):html=craw(url,page)html = str(html)if html is not None:soup = BeautifulSoup(html, 'lxml')"--先确定房子信息,即li标签列表--"houses=soup.select('.resblock-list-wrapper li')#房子列表"--再确定每个房子的信息--"for house in houses:#遍历每一个房子"名字"recommend_project=house.select('.resblock-name a.name')recommend_project=[i.get_text()for i in recommend_project]#名字 英华天元,斌鑫江南御府...#print(recommend_project)"类型"house_type=house.select('.resblock-name span.resblock-type')house_type=[i.get_text()for i in house_type]#写字楼,底商...#print(house_type)"销售状态"sale_status = house.select('.resblock-name span.sale-status')sale_status=[i.get_text()for i in sale_status]#在售,在售,售罄,在售...#print(sale_status)"大地址:如['南岸', '南坪']"big_address=house.select('.resblock-location span')big_address=[i.get_text()for i in big_address]#['南岸', '南坪'],['巴南', '李家沱']...#print(big_address)"具体地址:如:铜元局轻轨站菜园坝长江大桥南桥头堡上"small_address=house.select('.resblock-location a')small_address=[i.get_text()for i in small_address]#铜元局轻轨站菜园坝长江大桥南桥头堡上,龙洲大道1788号..#print(small_address)"优势。如:['环线房', '近主干道', '配套齐全', '购物方便']"advantage=house.select('.resblock-tag span')advantage=[i.get_text()for i in advantage]#['环线房', '近主干道', '配套齐全', '购物方便'],['地铁沿线', '公交直达', '配套齐全', '购物方便']#print(advantage)"均价:多少1平"average_price=house.select('.resblock-price .main-price .number')average_price=[i.get_text()for i in average_price]#16000,25000,价格待定..#print(average_price)"总价,单位万"total_price=house.select('.resblock-price .second')total_price=[i.get_text()for i in total_price]#总价400万/套,总价100万/套'...#print(total_price)

四.多页爬取,并将信息存储到表格

from bs4 import BeautifulSoup
import numpy as np
import requests
from requests.exceptions import  RequestException
import pandas as pd
#读取网页
def craw(url,page):try:headers = {"User-Agent": "Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/69.0.3947.100 Safari/537.36"}html1 = requests.request("GET", url, headers=headers,timeout=10)html1.encoding ='utf-8' # 加编码,重要!转换为字符串编码,read()得到的是byte格式的html=html1.textreturn htmlexcept RequestException:#其他问题print('第{0}读取网页失败'.format(page))return None
#解析网页并保存数据到表格
def pase_page(url,page):html=craw(url,page)html = str(html)if html is not None:soup = BeautifulSoup(html, 'lxml')"--先确定房子信息,即li标签列表--"houses=soup.select('.resblock-list-wrapper li')#房子列表"--再确定每个房子的信息--"for j in range(len(houses)):#遍历每一个房子house=houses[j]"名字"recommend_project=house.select('.resblock-name a.name')recommend_project=[i.get_text()for i in recommend_project]#名字 英华天元,斌鑫江南御府...recommend_project=' '.join(recommend_project)#print(recommend_project)"类型"house_type=house.select('.resblock-name span.resblock-type')house_type=[i.get_text()for i in house_type]#写字楼,底商...house_type=' '.join(house_type)#print(house_type)"销售状态"sale_status = house.select('.resblock-name span.sale-status')sale_status=[i.get_text()for i in sale_status]#在售,在售,售罄,在售...sale_status=' '.join(sale_status)#print(sale_status)"大地址:如['南岸', '南坪']"big_address=house.select('.resblock-location span')big_address=[i.get_text()for i in big_address]#['南岸', '南坪'],['巴南', '李家沱']...big_address=''.join(big_address)#print(big_address)"具体地址:如:铜元局轻轨站菜园坝长江大桥南桥头堡上"small_address=house.select('.resblock-location a')small_address=[i.get_text()for i in small_address]#铜元局轻轨站菜园坝长江大桥南桥头堡上,龙洲大道1788号..small_address=' '.join(small_address)#print(small_address)"优势。如:['环线房', '近主干道', '配套齐全', '购物方便']"advantage=house.select('.resblock-tag span')advantage=[i.get_text()for i in advantage]#['环线房', '近主干道', '配套齐全', '购物方便'],['地铁沿线', '公交直达', '配套齐全', '购物方便']advantage=' '.join(advantage)#print(advantage)"均价:多少1平"average_price=house.select('.resblock-price .main-price .number')average_price=[i.get_text()for i in average_price]#16000,25000,价格待定..average_price=' '.join(average_price)#print(average_price)"总价,单位万"total_price=house.select('.resblock-price .second')total_price=[i.get_text()for i in total_price]#总价400万/套,总价100万/套'...total_price=' '.join(total_price)#print(total_price)"--------------写入表格-------------"information = [recommend_project, house_type, sale_status,big_address,small_address,advantage,average_price,total_price]information = np.array(information)information = information.reshape(-1, 8)information = pd.DataFrame(information, columns=['名称', '类型', '销售状态','大地址','具体地址','优势','均价','总价'])if page== 1 and j==0:information.to_csv('链家网重庆房子数据.csv', mode='a+', index=False)  # mode='a+'追加写入else:information.to_csv('链家网重庆房子数据.csv', mode='a+', index=False, header=False)  # mode='a+'追加写入print('第{0}页存储数据成功'.format(page))else:print('解析失败')for i  in range(1,101):#遍历网页1url="https://cq.fang.lianjia.com/loupan/pg"+str(i)+"/"pase_page(url,i)print('结束')

五.多线程爬取

from bs4 import BeautifulSoup
import numpy as np
import requests
from requests.exceptions import  RequestException
import pandas as pd#读取网页
def craw(url,page):try:headers = {"User-Agent": "Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/69.0.3947.100 Safari/537.36"}html1 = requests.request("GET", url, headers=headers,timeout=10)html1.encoding ='utf-8' # 加编码,重要!转换为字符串编码,read()得到的是byte格式的html=html1.textreturn htmlexcept RequestException:#其他问题print('第{0}读取网页失败'.format(page))return None
#解析网页并保存数据到表格
def pase_page(url,page):html=craw(url,page)html = str(html)if html is not None:soup = BeautifulSoup(html, 'lxml')"--先确定房子信息,即li标签列表--"houses=soup.select('.resblock-list-wrapper li')#房子列表"--再确定每个房子的信息--"for j in range(len(houses)):#遍历每一个房子house=houses[j]"名字"recommend_project=house.select('.resblock-name a.name')recommend_project=[i.get_text()for i in recommend_project]#名字 英华天元,斌鑫江南御府...recommend_project=' '.join(recommend_project)#print(recommend_project)"类型"house_type=house.select('.resblock-name span.resblock-type')house_type=[i.get_text()for i in house_type]#写字楼,底商...house_type=' '.join(house_type)#print(house_type)"销售状态"sale_status = house.select('.resblock-name span.sale-status')sale_status=[i.get_text()for i in sale_status]#在售,在售,售罄,在售...sale_status=' '.join(sale_status)#print(sale_status)"大地址:如['南岸', '南坪']"big_address=house.select('.resblock-location span')big_address=[i.get_text()for i in big_address]#['南岸', '南坪'],['巴南', '李家沱']...big_address=''.join(big_address)#print(big_address)"具体地址:如:铜元局轻轨站菜园坝长江大桥南桥头堡上"small_address=house.select('.resblock-location a')small_address=[i.get_text()for i in small_address]#铜元局轻轨站菜园坝长江大桥南桥头堡上,龙洲大道1788号..small_address=' '.join(small_address)#print(small_address)"优势。如:['环线房', '近主干道', '配套齐全', '购物方便']"advantage=house.select('.resblock-tag span')advantage=[i.get_text()for i in advantage]#['环线房', '近主干道', '配套齐全', '购物方便'],['地铁沿线', '公交直达', '配套齐全', '购物方便']advantage=' '.join(advantage)#print(advantage)"均价:多少1平"average_price=house.select('.resblock-price .main-price .number')average_price=[i.get_text()for i in average_price]#16000,25000,价格待定..average_price=' '.join(average_price)#print(average_price)"总价,单位万"total_price=house.select('.resblock-price .second')total_price=[i.get_text()for i in total_price]#总价400万/套,总价100万/套'...total_price=' '.join(total_price)#print(total_price)"--------------写入表格-------------"information = [recommend_project, house_type, sale_status,big_address,small_address,advantage,average_price,total_price]information = np.array(information)information = information.reshape(-1, 8)information = pd.DataFrame(information, columns=['名称', '类型', '销售状态','大地址','具体地址','优势','均价','总价'])information.to_csv('链家网重庆房子数据.csv', mode='a+', index=False, header=False)  # mode='a+'追加写入print('第{0}页存储数据成功'.format(page))else:print('解析失败')#双线程
import threading
for i  in range(1,99,2):#遍历网页1-101url1="https://cq.fang.lianjia.com/loupan/pg"+str(i)+"/"url2 = "https://cq.fang.lianjia.com/loupan/pg" + str(i+1) + "/"t1 = threading.Thread(target=pase_page, args=(url1,i))#线程1t2 = threading.Thread(target=pase_page, args=(url2,i+1))#线程2t1.start()t2.start()

可能是网的问题,很多页的数据没有读取下来。

存储到的信息有近438条。原始数据有1838条。
可以自己把失败的页数存储下来,再重新请求一次。我这里就不搞啦。将就用。

在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/38014.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

【大数据基础】厦门租房信息分析展示

https://dblab.xmu.edu.cn/blog/2307/ 实验部分 爬虫程序 首先在工程文件夹下创建名叫rentspider的Python文件。 # -*- coding: utf-8 -*- import requests from bs4 import BeautifulSoup import csv# num表示记录序号 Url_head "http://fangzi.xmfish.com/web/searc…

Python数据分析基础 寻找出挂牌价最高的四套房,并输出相应的房源信息。

假设字典 house 存放了某小区在售二手房的房源信息(见表 1), 试编写程序,实现以下功能: (1)请编写程序寻找出挂牌价最高的四套房和挂牌价最低的四套房,并输出相应的房源信息。 &am…

解决.net中使用gmail.com邮箱进行Smtp发送信件时失败的问题

我经常使用免费的gmail.com邮箱,因为它容量较大,但我们在使用.net编程实现邮件发送时,常会出现我们意想不到的错误。最常见的就是: (1)The operation has timed out. (2)出现类似提…

outlook登陆邮件接收服务器(POP3)失败问题

用outlook管理qq邮件时,可能会遇到无法登陆问题: 可能的错误之一是:在配置账号密码时,不是输入邮箱的登陆密码, 而是要输入qq邮箱中 提供的授权码: 这样问题即可解决!

Contact form 7表单无法发送邮件的解决办法

在使用Bluehost主机做网站时,我们常常会遇到Contact form 7表单无法发送邮件的情况,收不到邮件,客户发的询盘就收不到,这就是很大的问题了。由于这个主机是自带邮箱系统的,因此我们用第三方的邮件系统就会出现被Blueho…

邮件服务器imap有推送吗,为什么我的邮件服务器支持imap协议还收不到邮件内容...

满意答案 qk2523 2017.04.05 采纳率:48% 等级:7 已帮助:163人 支持imap协议和能不能收到邮件没有什么关系。 1、使用Web方式可以正常接收邮件,但使用Outlook等客户端无法接收邮件。 a)邮件系统所在的服务器安装了其他杀毒软件&…

关于common-email 发送邮件失败问题!!!

1.首先说明一下场景: 邮件服务器为:腾讯的企业邮箱服务器, 有文档说明:http://service.exmail.qq.com/cgi-bin/help?id28&no1000585&subtype1, POP3/SMTP协议 接收邮件服务器:pop.exmail.qq.com …

邮件发送与接收,支持163邮箱、outlook邮箱、exchange邮箱

邮件发送与接收,支持163邮箱、outlook邮箱、exchange邮箱 收件箱支持条件搜索收件与发件均支持上传附件 依赖的jar包 邮件收发公共服务层实现 package com.example.demo.service.impl;import com.example.demo.model.EmailMessageBO; import com.example.demo.mo…

手把手教你设置foxmail客户端支持收发outlook.com邮箱里的邮件

话不多说,入正题啦1,下载安装foxmail客户端,也有免安装版的,这里不作介绍。地址:http://fox.foxmail.com.cn/2,打开foxmail软件,点击“工具”— 帐号管理 3,点击左下角的“新建”按钮…

举个栗子~Tableau 技巧(244):用和弦图(Chord diagram)呈现数据关系

关于和弦图 和弦图(Chord diagram)常用来表示数据之间的相互关系。数据点沿着圆圈分布,通过点和点之间相互连接的弧线来呈现相互之间的关系。和弦图从视觉上来说比较美观,数据呈现又很直观,所以深受数据粉喜爱。 之前…

HuggingGPT 火了:一个 ChatGPT 控制所有 AI 模型,自动帮人完成 AI 任务,网友:留口饭吃吧..._QbitAl 的博客 - CSDN 博客

转载自:https://blog.csdn.net/QbitAI/article/details/129942855 丰色 发自 凹非寺 量子位 | 公众号 QbitAI 最强组合:HuggingFaceChatGPT —— HuggingGPT,它来了! 只要给定一个 AI 任务,例如 “下面这张图片里…

“寻找贾维斯”简史

可能人人都希望自己有个“贾维斯”。 虽然已经退出漫威电影很多年,但是我们还是能够记起那个钢铁侠战衣里无所不能的AI助手。独特的幽默、优雅的语调,以及非常靠谱的人设,让无数科幻迷对这个看不见听得到的角色产生了无尽好感。 对贾维斯的…

jarvis贾维斯语音_保罗·贾维斯(Paul Jarvis)可以教给我们的建立业务的知识

jarvis贾维斯语音 想要在八到九个月内赚足够的钱,让您在一年中的剩余时间里做任何想做的事吗? (Want to make enough money in eight or nine months to last you for the rest of the year doing whatever the heck you want?) So do we. That’s why …

JARVIS(贾维斯)来了,科技改变生活

微软开源地址 https://github.com/microsoft/JARVIS 后续可能性: 每个人都有一个自己的AI助理提高生活便捷性学习知识的速度更快云助理 && 家用私人部署助理

谷歌拼音 输入法设置

谷歌拼音输入法 2.7,默认的是半角字符,中文标点 为了防止 以后 在输入代码的时候,出错,中文和 英文 都用 英文标点吧。

基于ubuntu20.4安装谷歌拼音中文输入法

1.首先命令行安装汉语语言包 sudo apt-get install language-pack-zh-hans 执行该命令后,系统就会自动安装所需要的汉语语言包 图1 安装汉语语言包 2.然后命令行安装谷歌拼音输入法 sudo apt-get install fcitx-googlepinyin 执行该命令后,系统就会自…

google输入法PK搜狗输入法

往往一个人用某个软件用的时间久了,久而久之就会形成一种习惯,不再探索或关注其他的类似的软件。造成的后果就是你只知道一款软件就这些功能,其余的知之甚少,就如同今天,看到别人输入法的皮肤特别漂亮,于是就想搜狗有这么漂亮的皮肤。问过后才知道人家用的是个google的拼…

Ubuntu20.04 安装谷歌拼音(googlepinyin)输入法

1.更新一下 sudo apt update 2.安装Fcitx sudo apt install fcitx如果有报错,执行下面命令 sudo apt install fcitx --fix-missing 3.命令行输入: im-config 弹出页面 ,选择ok,然后选择yes按钮,最后选择fcitx。…

谷歌拼音输入法PinyinIME源码修改----随着Setting中中英文的切换对应改变软键盘中英文输入且字符变换

项目中使用的是Google的输入法:谷歌拼音输入法,即PinyinIME。 客户提出需求:需要在Setting中切换中英文的时候,输入法对应成中英文输入,并且字符也对应成中英文,即Setting中设置为中文的时候,输…