代码:
import requests #网络请求
from requests import Response #网络响应
import re #解析页面数据 正则
import xlwt #存储数据 excel
base_url="https://xa.58.com/zufang/pn{}" #定义了一个名为 base_url 的字符串变量,用于构建访问特定页面的 URL
header ={
"User-Agent":"Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/122.0.0.0 Safari/537.36 Edg/122.0.0.0"
} #网页中网络里面找的
#1.请求网页数据
def get_data(url):
#发送网络请求,将服务的相应放到resp中
resp:Response = requests.get(url,headers=header)
#处理响应
if resp.status_code==200:#检查前面发送的请求(resp)的状态码是否为 200
print ("请求成功!")
print(resp.text)
parse_data(resp.text)
else:
print("请求失败!")
sublist = []
house_list = []
#2. 解析数据re
def parse_data(data):
houses = re.findall(r"""
<li.+?house-cell.+?<a.+?strongbox.+?>(.+?)</ a>.+?room">(.+?)</p >.+?"money".+?class="strongbox">(.+?)</b>
""", data, flags=re.VERBOSE | re.DOTALL)
for h in houses:
print(h[0].lstrip().rstrip()) #这行代码的作用是打印出列表 h 中的第一个元素,并去除其左右两端的空格。
# lstrip() 方法用于去除字符串左侧的空格,rstrip() 方法用于去除字符串右侧的空格
ret = h[1].split("  ") #这行代码的作用是将列表 h 中的第二个元素按照字符串 "  " 进行分割
print(ret[0],ret[1].rstrip())
print(h[2])
sublist.append(h[0].lstrip().rstrip())#将列表 h 中的第一个元素去除左右两端的空格后,添加到 sublist 这个列表中
sublist.append(ret[1].rstrip())
sublist.append(h[2])
house_list.append(sublist)
print(house_list)
save_data(house_list)
#3.存储数据到excel文件中
def save_data(list):
# 工作簿--->工作表--->单元格
# 1.创建工作簿
workbook = xlwt.Workbook()
# 2.在工作簿里面添加工作表
sheet = workbook.add_sheet("西安租房信息")
# 3.在工作表中添加单元格
for row in range(len(list)): # 0,1,2,3
for col in range(len(list[row])):
#print(row, col, list[row][col])
sheet.write(row, col, list[row][col])
# 4.保存工作簿
workbook.save("赶集网——租房信息.xlsx")
if __name__=='__main__':
for i in range(1,6):
print(f"开始请求第{i}页数据")
get_data(base_url.format(i))