本帖最后由 正己 于 2020-8-25 15:07 编辑
0x0前言
又到了一年一度的好日子,今天全国各地的宾馆老板个个喜笑颜开。
某种症状也已经出现了人传人的现象,呱呱呱呱呱呱。
0x1
我写了个小工具,希望能帮到晚上的hxd。首先我们要确定一个原则,超过一张床的房子是绝对不考虑的,懂得都懂。
bed = li.xpath('.//div[@class="_1etkxf1"]/span/span/text()')[1] #获取床数
if bed[-2:] == '1床': #超过一张床的就绝对不会考虑
其他的废话不多说,我代码都写了注释,如果没有环境的,我也帮你们打包好了。
0x2最后
由于我个人的疏忽,没考虑到评价为空,导致程序出错,我重新修改了一下代码,现在就可以完美运行了。还有就是关于生成的csv文件,不能直接打开,要在excel中选择文本导入。
蓝奏云链接:https://www.lanzoui.com/iRi96g1ce7a[/color]
附上源代码
import requests
from lxml import etree
import pandas as pd
headers={
'user-agent': 'Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/84.0.4147.125 Safari/537.36'
} #构建请求头
infos =[] #创建一个空列表
def get_url(link):
htmls = requests.get(url=link,headers=headers).text #伪装请求
html = etree.HTML(htmls) #解析
lis = html.xpath('//div[@class="_y5sok6"]') #获取页面属性
for li in lis:
bed = li.xpath('.//div[@class="_1etkxf1"]/span/span/text()')[1] #获取床数
if bed[-2:] == '1床': #超过一张床的就绝对不会考虑
name = li.xpath('.//div[@class="_goi623"]/div/text()')[0] #获取名字
price = li.xpath('.//div[@class="_1orel7j7"]/div/span[2]/text()')[0] #获取价格
assess = li.xpath('.//div[@class="_11jctj9"]/span/span/text()') #获取评价
housetype = li.xpath('.//div[@class="_1etkxf1"]/span/span/text()')[0] #获取房子类型
if assess: #判断评价是否为空
info ={'房名':name,'价格':price,'房子类型':housetype,'评价':assess[0]}
else:
info = {'房名': name, '价格': price, '房子类型': housetype, '评价': None}
infos.append(info) #写入字典
data = pd.DataFrame(infos) #传入数据
data.to_csv('民宿.csv') #生成csv文件
print('保存成功')
if __name__ == '__main__':
dizhi = input("请输入城市名称(拼音),例如:xiamen :")
url = 'https://www.airbnb.cn/s/{}/homes?query={}&items_offset='.format(dizhi,dizhi) #传入城市参数
for i in range(10): #循环url
num = i * 18
link = url + str(num)
get_url(link)
|