全国的房价一直居高不下,经常各种波动,但是进网站一个个看的话,就太慢了,于是我用Python把房源信息直接爬下来,涨跌一下子就了解清楚了!
先给大家养养眼,然后开始学习。
很多小伙伴在学习过程中没有资料或者遇到问题没人解答啥的,导致学的很慢,可以直接加下这个群,下面的资料都可以找管理员获取点我加群
Python环境、pycharm编辑器/永久激活/翻译插件
python零基础视频教程
Python界面开发实战教程
Python爬虫实战教程
Python数据分析实战教程
python游戏开发实战教程
Python 电子书100本
统统免费领取
Python相关问题可解答
Python相关外包需求可发布
Python相关招聘需求可发布
OK ,我们开始今天的代码部分。
这要安装的模块
import requests # 数据请求模块, 第三方模块 cookies池 import parsel # 第三方模块 import csv # 内置模块
文件权限问题
for page in range(15, 30): print(f'\n====================正在抓取第{page}页数据=======================')
1、数据在的url地址是哪个
url = f'https://newhouse.fang.com/house/s/b9{page}/'
请求伪装, User-Agent代表浏览器的身份标识
headers = {'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/92.0.4515.131 Safari/537.36'}
2、python代码发送指定地址的请求
result = requests.get(url=url, headers=headers) # post put delete ....
result.apparent_encoding 自动获取编码
result.encoding = 'gbk' # result.encoding 指定对象的编码 # print(result.request.headers) html_data = result.text # result.text 获取对象里面的文本内容 # print(html_data) # utf-8 主流的摆那么格式 gbk windows系统下编码的格式 字符串
3、数据解析(想要的数据提取) xpath + 正则 bs4 lxml
selector = parsel.Selector(html_data) # 转换数据类型(对象) # print(selector) divs = selector.xpath('//div[@class="nl_con clearfix"]/ul/li[not(@style)]') # 所有div标签 for div in divs: # 二次提取的思路 name = div.xpath('.//div[@class="nlcd_name"]/a/text()').get() # 名字 if name: name = name.strip() # strip() 去除字符串两端的空格 price = div.xpath('.//div[@class="nhouse_price"]/*/text()').getall() if price == None: # = 代表赋值, == 判断相等 price = '暂未取得预售证 或者 价格待定' else: price = '|'.join(price) rooms = div.xpath('.//div[@class="house_type clearfix"]/a/text()').getall() rooms = '-'.join(rooms) area = div.xpath('.//div[@class="house_type clearfix"]/text()').re('[\d~平米]+') if area: area = area[0] else: area = 'None' address = div.xpath('.//div[@class="address"]/a/@title').get() sale = div.xpath('.//div[@class="fangyuan"]/span/text()').get() tel = div.xpath('.//div[@class="tel"]/p/text()').getall() if len(tel) > 1: tel = '转'.join(tel) else: tel = tel print(name, price, rooms, area, address, sale, tel)
4、数据保存 csv数据: 每条数据用 , 分割
with open('房天下.csv', mode='a', encoding='utf-8', newline='') as f: csv_write = csv.writer(f) csv_write.writerow([name, price, rooms, area, address, sale, tel])
效果展示
基本上整个城市的都给爬下来了,我这里只截取了一部分,大家可以换成自己想要了解的城市去爬一下试试!