全国的房价一直居高不下,经常各种波动,但是进网站一个个看的话,就太慢了,于是我用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])
效果展示 基本上整个城市的都给爬下来了,我这里只截取了一部分,大家可以换成自己想要了解的城市去爬一下试试!