python链家网二手房数据爬取

python链家网二手房数据爬取

由于想练习一下Python的数据清洗,并将之前学习的机器学习内容付诸以实践,发现二手房市场的数据分析报告的内容十分匮乏。故此,通过Python爬取“链家网”杭州市二手房房源信息,辅助以Mongodb、PowerBI、Spss、Highchart实现数据的获取、数据的存储与查询、数据的初步统计描述、数据的可视化、数据的建模分析、数据的报表呈现。通过机器学习的随机森林算法,通过二手房源的自身特征来预测房源的关注度与累计看房数。

二手房数据的获取

主要使用到的第三方库有:
1.requests
2.Beautifulsoup
3.pymongo
4.multiprocess

    在前几次尝试的过程中发现,“链家网”会在IP频繁访问时,禁止我的IP的访问请求,造成数据爬取失败。沿着IP单一这个问题,尝试过使用代理IP,将免费代理IP网站上的IP地址以及端口号爬取下来,写入csv文件中,由于免费的代理质量不佳,需要自己写代码去验证IP的有效性,通过requests.get()中的timeout设置,当规定时间内没有出现响应的IP剔除,由此构建一个IP代理池。但在实践中发现,之前验证可以的代理,在短时间内很容易再次失效。
    之后查找资料后看到有前人通过服务器动态切换IP地址的方法避免爬虫被封,使用Tornado+Redis维护ADSL拨号服务器代理池,需要Linux的相关知识,下次补习Linux后再研究该怎么操作。后来寻思是不是可以从网站的M端进行数据爬取,有可能M端的反爬没有那么严,果然通过M端的爬取既没有限制IP连对访问的时间频率也没有做出限制。
    代码的思路是:

这里写图片描述
尝试后发现M端的网站房源信息总共100页,也是通过异步加载的方式,通过检查network的XHR可以发现访问的链接只是在后面的pg参数加上页码。通过循环将3000套房源的链接爬取下来后并实现拼接。然后通过请求这些房源的链接来抓取具体数据。实现中发现可以先将房源链接写入txt文本,然后通过multiprocess的pool函数实现多进程处理,爬取速度显著提升。

from bs4 import BeautifulSoup
import requests
import pymongo
import time

client = pymongo.MongoClient('localhost',27017)
lianjia = client['lianjia']
house_info = lianjia['house_info']

headers = {
  'User-Agent':'Mozilla/5.0 (iPhone; CPU iPhone OS 9_1 like Mac OS X) AppleWebKit/601.1.46 (KHTML, like Gecko) Version/9.0 Mobile/13B143 Safari/601.1'}
cookies = {
  'cookie
  • 2
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
好的,我可以为您介绍一下如何使用 Python 爬虫爬取房产数据并保存到本地。 首先,您需要选择一个合适的站来进行爬取。例如,可以选择链家、安居客等房产站。然后,您需要分析该站的页面结构和数据请求方式,确定需要爬取哪些数据,以及如何获取这些数据。 接着,您可以使用 Python 的 requests 库来发送 HTTP 请求,获取页内容。然后,可以使用 BeautifulSoup 库来解析页内容,提取需要的数据。 最后,您可以使用 Python 的 Pandas 库将数据保存到本地的 Excel 或 CSV 文件中。以下是一个示例代码: ```python import requests from bs4 import BeautifulSoup import pandas as pd # 发送 HTTP 请求获取页内容 url = 'https://bj.lianjia.com/ershoufang/' headers = {'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/58.0.3029.110 Safari/537.3'} response = requests.get(url, headers=headers) soup = BeautifulSoup(response.content, 'html.parser') # 解析页内容,提取需要的数据 house_list = soup.find_all('div', {'class': 'info'}) data = [] for house in house_list: name = house.find('div', {'class': 'title'}).text.strip() price = house.find('div', {'class': 'price'}).text.strip() area = house.find('div', {'class': 'houseInfo'}).text.strip() data.append([name, price, area]) # 将数据保存到本地文件 df = pd.DataFrame(data, columns=['名称', '价格', '面积']) df.to_excel('house_data.xlsx', index=False) ``` 这是一个简单的示例代码,您可以根据您需要爬取数据站的不同来进行修改和优化。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值