本次实验利用某爬虫软件爬取某房产网站中苏州地区的房产数据,数据文件为house.xlsx,部分数据显示如下。 house.png(1)如何利用Python从地址中提取出区的数据,从建造年代中提取出房龄数据
时间: 2024-02-19 21:57:41 浏览: 74
可以使用Python中的正则表达式库re来从地址中提取出区的数据,代码如下:
```python
import re
address = "江苏省苏州市相城区元和街道江南家园3幢1单元401室"
pattern = r"苏州市(.+?)区"
match = re.search(pattern, address)
if match:
district = match.group(1)
print(district)
```
该代码中的正则表达式`r"苏州市(.+?)区"`表示匹配以“苏州市”开头,以“区”结尾,中间部分为任意字符的字符串,并使用括号将区的名称部分作为捕获组。运行代码后,输出为“相城”。
从建造年代中提取房龄数据的方法也可以使用正则表达式,代码如下:
```python
import re
build_year = "2005年"
pattern = r"(\d{4})年"
match = re.search(pattern, build_year)
if match:
year = int(match.group(1))
age = 2021 - year
print(age)
```
该代码中的正则表达式`r"(\d{4})年"`表示匹配以四个数字和“年”结尾的字符串,并使用括号将四个数字作为捕获组。运行代码后,输出为“16”,表示该房屋的房龄为16年。
相关问题
任务 本次实验利用某爬虫软件爬取某房产网站中苏州地区的房产数据,数据文件为house.xlsx:爬取的数据往往是带有单位的字符串,这也会影响后期的数据分析,所以需要将这些单位去掉,再转换为数值型数据。如将字符串“均价”的40000元/m2转换为数值40000.
这个任务主要是关于数据清洗和预处理的过程。首先,你需要通过爬虫工具从指定的房产网站抓取苏州地区的房产数据,并将其存储到Excel表格house.xlsx中。在这个过程中,可能会遇到包含价格单位的信息,例如"元/m²"、"万/套"等。
清洗阶段的关键步骤包括:
1. 数据解析:读取excel文件,提取出含有价格信息的单元格,通常这些内容会被保存为字符串形式,比如 "40000元/m²"。
2. 单位去除:对于每一条价格记录,需要识别并移除其中的价格单位,只保留纯数字部分。这里可以使用正则表达式或者字符串处理函数来实现。
3. 数据转换:将处理后的数字字符串转换为数值类型,通常是浮点数,以便后续进行数据分析。例如,"40000元/m²" 转换为数值 40000.
在Python中,你可以使用pandas库来完成这个过程,代码大概会像这样:
```python
import pandas as pd
import re
# 读取Excel文件
df = pd.read_excel('house.xlsx')
# 定义一个函数来处理价格列
def clean_price(price_string):
# 使用正则表达式匹配并替换单位
price_num = re.sub(r'[^\d\.]', '', price_string)
# 将剩余字符串转换为float
return float(price_num)
# 应用函数到价格列
df['price'] = df['price_column'].apply(clean_price)
```
python爬取链家二手房信息400条,并存入house.xlsx表格中
好的,我可以为您提供以下代码来实现这个爬取任务。不过需要注意的是,网站的反爬虫机制比较严格,如果爬取过于频繁会被封IP,建议加上一些延时等措施。
```
import requests
import openpyxl
from bs4 import BeautifulSoup
import time
url = "https://bj.lianjia.com/ershoufang/pg"
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"}
wb = openpyxl.Workbook()
sheet = wb.active
sheet.title = "house"
sheet['A1'] = '小区名称'
sheet['B1'] = '户型'
sheet['C1'] = '面积'
sheet['D1'] = '朝向'
sheet['E1'] = '楼层'
sheet['F1'] = '年代'
sheet['G1'] = '总价(万)'
sheet['H1'] = '单价(元/平米)'
row = 2
for i in range(1, 21):
print("正在爬取第{}页数据".format(i))
res = requests.get(url + str(i), headers=headers)
res.encoding = 'utf-8'
soup = BeautifulSoup(res.text, 'html.parser')
house_list = soup.find_all('div', {'class': 'info clear'})
for house in house_list:
name = house.find('div', {'class': 'title'}).a.get_text()
room = house.find('div', {'class': 'houseInfo'}).get_text().split('|')[1].strip()
square = house.find('div', {'class': 'houseInfo'}).get_text().split('|')[2].strip()
direction = house.find('div', {'class': 'houseInfo'}).get_text().split('|')[3].strip()
floor = house.find('div', {'class': 'positionInfo'}).get_text().split('-')[1].strip()
year = house.find('div', {'class': 'positionInfo'}).get_text().split('-')[0].strip()
total_price = house.find('div', {'class': 'totalPrice'}).span.get_text()
unit_price = house.find('div', {'class': 'unitPrice'}).get_text().strip()[2:-4]
sheet.cell(row=row, column=1, value=name)
sheet.cell(row=row, column=2, value=room)
sheet.cell(row=row, column=3, value=square)
sheet.cell(row=row, column=4, value=direction)
sheet.cell(row=row, column=5, value=floor)
sheet.cell(row=row, column=6, value=year)
sheet.cell(row=row, column=7, value=total_price)
sheet.cell(row=row, column=8, value=unit_price)
row += 1
time.sleep(1)
wb.save('house.xlsx')
print("数据爬取完成!")
```
阅读全文