房价的爬虫
步骤
-
通过翻阅我们查看到总共页数一共是100页,那么我们需要通过format方法获取到这100个url地址列表url_list;
-
遍历url列表,分别发送请求,获得响应html_str;
-
利用正则表达式将到每个房屋element组成的列表det_dicts;
-
遍历det_dicts,将房屋所在地区、小区名、面积、户型、朝向、价格等信息保存到空字典info_dicts中;
-
注意,这里我们事先创建一个columns=[‘地区’,‘小区名’,‘面积’,‘户型’,‘朝向’,‘价格(元/月)’]的空DataFrame对象data,再创建另外一个DataFrame对象df,将字典info_dicts传入到df中,通过append方法将df添加到data中;
-
通过主程序运行后,就可以将DataFrame保存到Excel文件中
代码
import re
import pandas
import pandas as pd
import requests
#求100多行
df=pd.DataFrame(columns=('地区','小区名','面积','户型','朝向','价格(元/月)'))
headers={'user-agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) '
'AppleWebKit/537.36 (KHTML, like Gecko)'
' Chrome/110.0.0.0 Safari/537.36 Edg/110.0.1587.50'}
url='https://bj.lianjia.com/zufang/#contentList'
r_3 = requests.get(url, headers=headers)
ls1 = re.findall(r'\/">(.+?)<\/a>-<a href="', r_3.text) # 地区
ls2 = re.findall(r'<\/a>-<a title="(.+?)" href="\/zufang\/', r_3.text) # 找小区名
ls3 = re.findall(r'<i>\/<\/i>\s*(.+?㎡)', r_3.text) # 找面积
ls4 = re.findall(r'<i>\/<\/i>\s*(.+?)\s*<span class="hide">', r_3.text) # 找户型
ls5 = re.findall(r'<i>\/<\/i>(.+?)\s*<i>\/<\/i>', r_3.text) # 找朝向
ls6 = re.findall(r'<span class="content__list--item-price"><em>(.+\d?)<\/em> 元\/月<\/span>', r_3.text) # 找价钱
dict_1 = {"地区": ls1, '小区名': ls2, '面积': ls3, '户型': ls4, '朝向': ls5, '价格(元/月)': ls6}
data = pd.DataFrame(dict_1)
for pag_index in range(2,5):
urls = 'https://bj.lianjia.com/zufang/'+'pg'+str(pag_index)+'/#contentList'
r_4 = requests.get(urls, headers=headers)
ls1 = re.findall(r'\/">(.+?)<\/a>-<a href="', r_4.text) # 地区
ls2 = re.findall(r'<\/a>-<a title="(.+?)" href="\/zufang\/', r_4.text) # 找小区名
ls3 = re.findall(r'<i>\/<\/i>\s*(.+?㎡)', r_4.text) # 找面积
ls4 = re.findall(r'<i>\/<\/i>\s*(.+?)\s*<span class="hide">', r_4.text) # 找户型
ls5 = re.findall(r'<i>\/<\/i>(.+?)\s*<i>\/<\/i>', r_4.text) # 找朝向
ls6 = re.findall(r'<span class="content__list--item-price"><em>(.+\d?)<\/em> 元\/月<\/span>', r_4.text) # 找价钱
dict_2 = {"地区": ls1, '小区名': ls2, '面积': ls3, '户型': ls4, '朝向': ls5, '价格(元/月)': ls6}
data1 = pd.DataFrame(dict_2)
df_Con = pd.concat([data, data1],axis=0,ignore_index = True) # 重新生成新的索引)
data=df_Con
data.to_excel('2.xlsx') #保存到本地excel表
data_1=list(data['面积'])#[int('面积')/int('价格(元/月)')]
#输出
print((df_Con))