使用requests库,pyquery库获取58同城北京二手房信息导入到csv文件当中
import requests
from pyquery import PyQuery as pq
import csv
f = open('58同城北京二手房信息.csv', 'w', newline="", encoding='gbk') # 创建文件对象
csv_write = csv.DictWriter(f, fieldnames=['小区名称', '地址', '总价', '每平价格', '房间个数', '大小', '建造时间'])
csv_write.writeheader() # 写入文件头
#请求头cookie是根据个人的账号登录来设置的
cookie = ''
proxies = {
"http": "http://123.185.0.192",
"https": "http://123.185.0.192"
}
headers = {
"user-agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/107.0.0.0 Safari/537.36 Edg/107.0.1418.52",
'Cookie': cookie
}
MingCheng=[]#小区名称
SuoZaiDi=[]#所在地
ZongJie=[]#总价格
MeiPing=[]#每平价格
FangJian=[]#房间
MianJi=[]#面积
JianZu=[]# 建筑时间
# 批量获取网页数据
for i in range(50):
url = "https://cn.58.com/ershoufang/p{}/?PGTID=%5B%220d100000-008d-2641-7e1b-fc57f33f6aee%22,%220d30000c-0000-1b5a-2bb9-3df5d012e970%22%5D&ClickID=1".format(
i)
r = requests.get(url, headers=headers)
r.raise_for_status()
r.encoding = r.apparent_encoding
demo = r.text
dec = pq(demo)
for inf in dec.find('.property-content'):
global ws
# 获取全部楼盘信息
v = pq(inf)
# 获取其中的小区名称
d = v(".property-content-info-comm-name").text()
# 获取小区所在地
q = v(".property-content-info-comm-address").text()
# 获取总价格
f = v(".property-price-total-num").text() + "万"
# 获取每平价格
g = v(".property-price-average").text()
# 房间
h = v(".property-content-info-text").text()
s = h[:11]
# 面积
k = v(".property-content-info-text:nth-child(2)").text()
# 建筑时间
o = v(".property-content-info-text:nth-child(5)").text()
MingCheng.append(d)
SuoZaiDi.append(q)
ZongJie.append(f)
MeiPing.append(g)
FangJian.append(s)
MianJi.append(k)
JianZu.append(o)
for j in range(len(MingCheng)):
data_dict = {'小区名称': MingCheng[j],'地址':SuoZaiDi[j],'总价':ZongJie[j],'每平价格':MeiPing[j],'房间个数':FangJian[j],'大小':MianJi[j],'建造时间':JianZu[j]}
csv_write.writerow(data_dict)
print('第{}页爬取成功'.format(i + 1))
在其中如果出现了一些提醒GBK问题,我这里的解决方法是将编辑器的编码从UTF-8改为GBK,这样就解决这个报错问题
在写代码期间个人遇见的问题,在未登录的状态的时候,使用requests去获取其中的html结构会有部分内容看不见,所以建议先登个陆
反复访问多的话,平台会进行验证,这个在代码当中还没有写入,所以需要自己手动解决