去哪儿网旅游景点数据爬虫
时间: 2025-02-15 12:15:11 浏览: 41
编写爬取去哪儿网旅游景点数据的 Python 爬虫
为了有效地从去哪儿网获取旅游景点的相关信息,可以采用 requests
和 BeautifulSoup
库来进行网页内容解析。考虑到目标网站可能存在的反爬机制,建议设置合理的请求间隔并模拟浏览器行为。
准备工作
安装必要的库可以通过 pip 完成:
pip install requests beautifulsoup4 lxml
请求页面与解析HTML结构
使用 requests.get()
方法发送 HTTP GET 请求到指定 URL 地址,并利用 BeautifulSoup 解析返回的内容。对于静态页面而言,这一步骤足以获得所需的信息[^1]。
提取具体字段
根据 HTML 文档中的标签属性定位各个元素位置,提取出包括但不限于以下几项的关键信息:
- 景点名称
- 图片链接
- 英文名字
- 排名情况
- 描述文字
- 经纬度坐标
下面是一个简单的例子展示如何实现上述功能:
import requests
from bs4 import BeautifulSoup
import json
import time
def fetch_page(url):
headers = {
'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64)',
}
response = requests.get(url, headers=headers)
if response.status_code != 200:
raise Exception('Failed to load page {}'.format(url))
soup = BeautifulSoup(response.text, "lxml")
return soup
def parse_sights(soup):
sights_list = []
items = soup.find_all('li', class_='item')
for item in items:
sight_info = {}
try:
name_tag = item.select_one('.name a')
img_url = item.img['src']
en_name = item.span.string.strip()
rank = int(item.em.string.replace('#',''))
desc = ''.join([p.text for p in item.find('div',class_="desc").find_all('p')])
location_data = item.script.string.split('=')[1].strip().rstrip(';').replace("'",'"')
loc_dict = json.loads(location_data)
lng,lat=loc_dict["lng"],loc_dict["lat"]
sight_info.update({
'中文名': name_tag.text,
'图片URL':img_url ,
'英文名':en_name,
'排名':rank,
'简介':desc,
'经度':lng,
'维度': lat})
sights_list.append(sight_info)
except AttributeError as e:
continue
return sights_list
if __name__ == '__main__':
base_url = 'https://www.qunar.com/sight/list.htm?keyword=%E9%83%A8%E7%BD%AA&region=&from=mpl_search_suggest&page={}'
all_sights = []
for i in range(1, 12): # 假设共有11页
url = base_url.format(i)
print(f'Processing {url}')
html_doc = fetch_page(url)
parsed_result = parse_sights(html_doc)
all_sights.extend(parsed_result)
time.sleep(2) # 防止被封IP
print(json.dumps(all_sights[:], ensure_ascii=False))
这段脚本会遍历多页的结果集,每一页都会调用一次 fetch_page()
来获取完整的 HTML 内容;接着由 parse_sights()
负责处理单个列表条目内的各项细节。最后将所有的记录保存在一个 JSON 数组里输出显示出来[^3]。
相关推荐















