爬取时需要进行的操作:
1:输入你是要爬取国内的还是海外的,1表示国内,2表示海外;
2:然后输入你要爬取的城市名称,就可以了;
每个函数的功能:
choose_area函数根据你输入的是国内还是海外,输出不同的区域名称
url_list函数根据你输入的城市名称,来爬取城市有多少房源,来判断有几页数据,因为小猪短租网上面只显示13页数据,超过了的话页只显示13页的数据,所以做个判断就可以
get_url函数根据你输入的城市名称和页码,来构建你输入的城市每页的url
get_html函数就是获取每页的html数据
get_zf_url函数根据每页的html数据来爬取每个租房的url链接
get_zf_message函数,通过传入的租房url链接来获取每个租房的信息
'''
遇到不懂的问题?Python学习交流群:1136201545满足你的需求,资料都已经上传群文件,可以自行下载!
'''
import re
import requests
url = 'http://jci.xiaozhustatic1.com/e17061601/xzjs?k=Front_Search&httphost=bj.xiaozhu.com' #获取城市名称的链接
ser = input('输入你要查找的地区(1:国内;2:海外):') #输入你你要查找是国内的短租房还是海外的短租房
html = requests.get(url).text #通过上面提供的url来爬取每个省份的拼音
def choose_area(): #判断你需要查找的是国内的还是海外的,并输出相应的内容
city_tup = re.compile('citys[[0-9]\d*]=new Array(.*?);').findall(html)
#print(city_tup)
for city_name in city_tup[29:]:
#print(city_name)
city_time = re.compile('[0-9]\d*:[0-9]\d*').findall(city_name)
if ser == '1':
if len(city_time) == 0:
city = re.compile('[\u4E00-\u9FA5]+').findall(city_name)[0] #城市名称
city_jc = re.compile('[a-z]\w*').findall(city_name)[1] #城市拼音
city_zf = re.compile('[0-9]\d*').findall(city_name)[0] #城市租房数量
city_dic = {city:[city_jc,city_zf]}
yield city_dic
else:
pass
elif ser == '2':
if len(city_time) != 0:
city = re.compile('[\u4E00-\u9FA5]+').findall(city_name)[0]
city_jc = re.compile('[a-z]\w*').findall(city_name)[1]
city_zf = re.compile('[0-9]\d*').findall(city_name)[0]
city_dic = {city: [city_jc, city_zf]}
yield city_dic
else:
pass
def get_url(city_jc,page): #提供省份的名称和页码来构建需要爬取的url
url = 'http://{}.xiaozhu.com/search-duanzufang-p{}-0/'.format(city_jc,page)
return url
#根据你提供的省份名称来判断,这个省份有多少房源,但是每个省份的房源只显示13页的数据,所有做个判断,超过了的话就只显示13页,没有超过的话就有几页就显示几页
def url_list(city_name):
#city_name = input('输入你要查找的城市名称:')
for city in choose_area():
if city_name in city.keys():
if int(int(city[city_name][1])/24) > 13:
for page in range(1,14):
url = get_url(city[city_name][0],page)
yield url
elif int(int(city[city_name][1])/24)
1663681728
查看更多评论