使用Python编写一个完整的爬虫程序,从携程网抓取热门旅游景点的名称、评分和评论条数等数据,并将这些信息存储到CSV文件中
时间: 2024-10-25 10:13:49 浏览: 25
在Python中编写一个完整的携程网爬虫涉及到几个关键步骤,包括设置请求头、解析HTML、筛选所需信息以及保存到CSV文件。这里我将给出一个基础的示例,使用`requests`库发送HTTP请求,`BeautifulSoup`库解析HTML内容,`pandas`库处理和保存数据。注意,实际操作需要遵守网站的robots.txt协议,尊重版权并可能需要处理反爬虫机制。
首先,确保已经安装了必要的库:
```bash
pip install requests beautifulsoup4 pandas
```
然后,编写一个基本的爬虫脚本:
```python
import requests
from bs4 import BeautifulSoup
import csv
import pandas as pd
def get_hotel_data(url):
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'
}
response = requests.get(url, headers=headers)
soup = BeautifulSoup(response.text, 'lxml')
# 假设我们找到一个包含景点数据的div,如class='hotel-info'
data_div = soup.find('div', class_='hotel-info')
if data_div is not None:
# 这里只是一个示例,你需要查找实际的数据元素并提取所需字段
name = data_div.find('h1').text
rating = float(data_div.find('span', class_='rating').text.split('/')[0])
review_count = int(data_div.find('span', class_='review-count').text)
return name, rating, review_count
else:
return None, None, None
def save_to_csv(results, filename):
data = []
for name, rating, count in results:
data.append([name, rating, count])
df = pd.DataFrame(data, columns=['Name', 'Rating', 'Review Count'])
df.to_csv(filename, index=False)
# 携程网某个景点页面的URL
url = "https://example.ctrip.com/hotel/1234567" # 替换为你想爬取的具体景点链接
results = []
for i in range(1, 11): # 如果有多页数据,可以遍历更多页,假设每页10个景点
page_url = f"{url}?page={i}"
result = get_hotel_data(page_url)
if result is not None:
results.append(result)
save_to_csv(results, 'hotels.csv')
```
请注意,这个示例仅作演示,实际的网页结构可能会有所不同,你需要分析网站源码确定正确的HTML标签和属性来提取数据。同时,由于网站结构的复杂性和变化,爬虫可能会因网站调整而失效。
阅读全文