因技术有限,以至于存在不少纰漏(下文代码中会详细说明),还请多多包涵,希望看到的大佬带带我这个菜鸡解决,先在此感谢了
本文属于补全代码,原文连接如下,对此我只想说,恰饭没错,但是这样的引流确实膈应人Python爬取去哪了旅游景点数据_【CSDN官方推荐】-CSDN博客
本文仅供学习、交流使用,不具有任何商业用途如有问题请及时联系我以作处理
导入库函数
import requests import parsel from parsel import Selector from time import sleep from random import random import pandas as pd import numpy as np
全部代码内容
myheader = {"user-agent":"Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/94.0.4606.54 Safari/537.36"
} #挂请求头
fout = open('去哪儿旅行-大连景点信息1.txt','w',encoding='utf-8')#建立txt文件存储
for page in range(1,41):#构建页面循环
url = f'https://piao.qunar.com/ticket/list_%E5%A4%A7%E8%BF%9E.html?from=mps_search_suggest_h&keyword=%E5%A4%A7%E8%BF%9E&page={page}'
sleep(2*random())
response = requests.get(url=url, headers=myheader)
per=Selector(response.text)
result=per.css('#search-list')
try:
for i in range(1,16):#循环查取每页内的所需值
# li=result.css(f'#search-list > div:nth-child({i})') 此处和下面代码作用相同,都为定位到包含爬取信息的父标签
li=result.xpath(f'//*[@id="search-list"]/div[{i}]') #上面使用了Selector对象进行定位,这里使用的是Xpath相对路径,可能也是因为这个所以导致爬取信息不完整,
sleep(2*random()) #接上文:个人盲猜包含信息的父标签是动态的,所以导致有的页面无法有效爬取,希望看到的的大佬可以进行改进
title = li.css('.sight_item_caption a::attr(title)').get() # 景区名字
level = li.css('.sight_item_info .level::text').get() # 景区等级
area = li.css('.area a::attr(title)').get() # 地区
address = li.css('.address span::attr(title)').get() # 地址
string = li.css('.product_star_level em::attr(title)').get() # 热度
star_level = float(string.strip('热度: '))
intro = li.css('.intro::attr(title)').get() # 简介
price = li.css('.sight_item_price em::text').get() # 价格
hot_num = li.css('.hot_num::text').get() # 月销
print(title,level,area, address,star_level,intro,price, hot_num,sep='#',file=fout)#打印每个景点各个信息,以"#"号隔开并存取到txt文件中
except : #1.有的没有景区热度所以使用try函数抛出了异常 2.抛出了了上面因为父标签构建爬取到的信息
sleep(1*random()) #随机休眠伪装一下
print(f'-------第{page:02}页爬取完成------')
fout.close()
#pandas兄yyds,最后需要excel所以重新读取另存了xlsx文件
df = pd.read_csv('去哪儿旅行-大连景点信息.txt',sep='#',
names=['景区名字','景区等级','地区',
'地址','热度','简介','价格','月销'])
df.to_excel('去哪儿旅行-大连景点信息.xlsx',index=False)
print('-------搞完睡觉,没意思了-------')
运行效果如图



