首先是在实验楼上看到这个项目的。刚好准备暑假实习租房,正好可以用到。实验和做项目的过程中也遇到了一些问题,特在此记录一下
Python版本:python 3.4
系统:Windows
1、首先实验中是通过从58上获取北京地区品牌公寓的租房信息,而本人是需要获得杭州的租房信息,因此目的地点不同,而且也不是要租品牌公寓,而是要获取实习工作地点附近的小区,然后对比小区进行实地勘察租房,这样来说才能租到相对便宜和好的房间。因此本项目中的房源主要是从安居客上面获取杭州600-1000价格房源的小区地址,然后将这些地址保存为csv文件。
具体获取房源小区的代码如下:
from bs4 import BeautifulSoup
import requests
import csv
import time
user_agent = 'Mozilla/5.0 (Windows NT 6.1; Win64; x64)'
headers = {'User-Agent': user_agent}
csv_file = open("rent.csv","w", -1,"UTF-8",newline='')
csv_writer = csv.writer(csv_file, delimiter=',')
while True:
page += 1
url = 'https://hz.zu.anjuke.com/fangyuan/zj5362-p' + str(page) + '/'
print("fetch: ", url)
time.sleep(1)
response = requests.get(url,headers=headers)
html = BeautifulSoup(response.text,features="lxml")
house_list = html.select("div.zu-itemmod")
# 循环在读不到新的房源时结束
if not house_list:
break
for house in house_list:
title= house.select("address.details-item a")[0].string
csv_writer.writerow([title])
csv_file.close()
将获取的代码保存入csv格式的文件中。上面保存入csv文件的信息需要注意的是本人使用的是Python3版本,原先看的实验楼实验中的python版本是2,所以信息即使保存入csv中,但是由于编码的问题,最后在调用高德API时出现了无法读取csv文件信息的问题。解决办法就是将csv文件写入的代码改为csv_file = open("rent.csv","w", -1,"UTF-8",newline=''),其中newline=''表示不换行写入。
2、其中在爬取信息的时候还遇到了一个问题,刚开始使用的是58同城爬取信息。但是58上面对价格这样的数字进行了编码,所以爬取到的价格信息是乱码的数字,形如:“齤閏麣”,通过查找网上的讲解和代码,解决了这个问题。具体的解决可以参考下面的代码:其中string表示获得的乱码的字符串,bs64_str是从网页中获得的编码方式
response = requests.get(url.format(page=page))
bs64_str = re.findall("charset=utf-8;base64,(.*?)'\)", response.text)[0]
def get_page_show_ret(string,bs64_str):
font = TTFont(BytesIO(base64.decodebytes(bs64_str.encode())))
c = font['cmap'].tables[0].ttFont.tables['cmap'].tables[0].cmap
ret_list = []
for char in string:
decode_num = ord(char)
if decode_num in c:
num = c[decode_num]
num = int(num[-2:]) - 1
ret_list.append(num)
else:
ret_list.append(char)
ret_str_show = ''
for num in ret_list:
ret_str_show += str(num)
return ret