python爬取58同城房子发布的手机号码_python3爬虫-爬取58同城上所有城市的租房信息...

这是一个使用Python实现的58同城租房信息爬虫,它可以遍历所有城市的租房信息。爬虫首先获取所有城市及其缩写,然后针对每个城市,抓取不同类型的租房页面,如个人房源、安选房源、经纪人等。通过处理页面中的加密数据,爬虫能够解析并保存房源的图片、标题、详情、地址、标签和价格等信息。数据保存到MySQL数据库中,也可选择保存为文件。
摘要由CSDN通过智能技术生成

from fake_useragent importUserAgentfrom lxml importetreeimportrequests, osimporttime, re, datetimeimportbase64, json, pymysqlfrom fontTools.ttLib importTTFont

ua=UserAgent()classCustomException(Exception):def __init__(self, status, msg):

self.status=status

self.msg=msgclassCity_58:'''58同城的爬虫类,目前就写这两个

出租房url: https://cd.58.com/chuzu/ cd代表成都缩写

二手房url: https://cd.58.com/ershoufang/'''font_dict={"glyph00001": "0","glyph00002": "1","glyph00003": "2","glyph00004": "3","glyph00005": "4","glyph00006": "5","glyph00007": "6","glyph00008": "7","glyph00009": "8","glyph00010": "9",

}

conn=Nonedef __init__(self):

self.session=requests.Session()

self.session.headers={"user-agent": ua.random

}

self.__init__all_city()def __init__all_city(self):'''获取所有城市的名字及缩写的对应关系'''api= "https://www.58.com/changecity.html"headers=self.session.headers.copy()

response= self.session.get(api, headers=headers)

html=response.text

res= re.findall("cityList = (.*?)", html, re.S)[0]

res= re.sub("\s", "", res)

dic=json.loads(res)for k, v indic.items():for k1, v1 inv.items():

dic[k][k1]= v1.split("|")[0]

city_dict={}deftraverse_dict(dic: dict):for k, v indic.items():if k == "海外" or k == "其他":continue

ifisinstance(v, dict):

traverse_dict(v)

city_dict[k]=v

traverse_dict(dic)

other_city= re.findall("independentCityList = (.*?)var", html, re.S)[0]

res= re.sub("\s", "", other_city)

other_city_dic=json.loads(res)for k, v inother_city_dic.items():

other_city_dic[k]= v.split("|")[0]

city_dict.update(other_city_dic)

self.all_city_dict=city_dictdef spider_zufang(self, city: str = "成都", is_get_all: bool =True):'''爬取租房信息的爬虫方法'''

assert self.all_city_dict is not None, "获取所有城市信息失败 !"format_city=self.all_city_dict.pop(city, None)assert format_city is not None, "{}该城市不在爬取城市之内".format(city)whileTrue:

self.city=city#self.file = open("./house_info.json", "a", encoding="utf-8")

start_url = self.__init_zufang(format_city)#思路是什么,首先进入区域的租房页面,在该页面中先提取出相应的title,比如经纪人,个人房源等等...

#我们需要构建出相应的url就可以了

#start_url的格式为 https://cd.58.com/chuzu/ 我们需要转为这样的格式 https://cd.58.com/jintang/hezu/

#我们访问转化后的地址,再拿去到相应的链接,比如经纪人,个人房源等链接

#拿到该链接以后,这就是这个分类里的第一页url,我们再对这个链接发生请求,

#拿到响应体,这里可以写一个while循环,因为我们不知道有多少页,其实也可以知道有多少页,就是在这个响应体中可拿到

#我的思路就是写一个while循环,判断是否有下一页,有的继续,没有的话直接break

for url_info_list in self.__get_url(start_url):#这里的话,最好进行判断一下,因为每个title(值个人房源,品牌公寓等..)不一样的话,可能爬取的策略也不太一样

title = url_info_list[1]if title in ["个人房源", "安选房源", "经纪人", "热租房源"] or "出租" intitle:

好的,这是一个比较具体的问题,我可以为你提供一些思路和参考代码。 首先,我们需要了解58同城二手房信息的页面结构和数据请求方式。通过分析网页源代码和浏览器开发者工具,可以发现58同城二手房信息的页面是采用Ajax技术加载的,数据请求方式是POST请求,请求参数中包含了城市、区域、价格等筛选条件。 接下来,我们可以使用Python的requests模块发送POST请求,获取二手房信息的JSON数据。然后,使用Python的json模块解析JSON数据,提取出我们需要的房源信息,例如房源名称、总价、单价、房间数、面积、朝向、楼层等信息。 最后,我们可以使用Python的pandas模块将房源信息存储到CSV文件中,方便后续的数据分析和处理。 下面是一个简单的代码示例,仅供参考: ```python import requests import json import pandas as pd # 设置请求头信息 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'} # 设置POST请求参数 data = { 'PGTID': '0d100000-0000-1e9c-0d96-1d72c30b2f0e', 'ClickID': '1', 'comm_id': '0', 'created': '7', 'curPage': '1', 'datainfo': 'eyJwYWdlIjoxLCJ0eXBlIjoxLCJjaXR5IjoxLCJjYXRlZ29yeSI6IjIwMjEtMDYtMDEiLCJhbGwiOiIiLCJwYXJhbXMiOiIiLCJ1dGlsaXR5IjoiIiwic3RhdHVzIjoiIiwiYWpheCI6IiJ9', 'from': '1', 'isfirst': 'true', 'local': '1', 'order': 'time', 'over': '0', 'param': '2_1_0_0_0_0_0', 'propertytype': '1', 'room': '0', 'showMore': '1', 'shownow': '0', 'sign': 'dfc3f07bcfd1ad6c124a3d7b5fbc4c6b', 'source': 'list', 'sug': '0', 'w': '1' } # 发送POST请求,获取JSON数据 url = 'https://appapi.58.com/house/listV3?' response = requests.post(url, headers=headers, data=data) json_data = json.loads(response.text) # 解析JSON数据,提取房源信息 house_list = [] for item in json_data['data']['list']: house_info = {} house_info['title'] = item['title'] house_info['total_price'] = item['price'] house_info['unit_price'] = item['unitprice'] house_info['room_num'] = item['room'] house_info['area'] = item['area'] house_info['orientation'] = item['orient'] house_info['floor'] = item['floor'] house_list.append(house_info) # 将房源信息存储到CSV文件中 df = pd.DataFrame(house_list) df.to_csv('house_info.csv', index=False) ``` 这段代码可以爬取58同城二手房信息的第一页数据,并将房源信息存储到名为house_info.csv的CSV文件中。如果需要爬取多页数据,可以通过修改POST请求参数中的curPage参数来实现。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值