Python爬虫网络实践:去哪儿旅游数据爬取指南
在这个博客中,我们将探索如何使用 Python 来进行网络数据抓取,并以抓取旅游数据为例进行演示。我们将通过一个简单的示例来说明如何利用 Python 中的常用库进行网页抓取,从而获取旅游网站上的信息。
背景
在今天的数字化时代,网络是一个充满了各种信息和资源的巨大宝库。然而,要从网络上获取所需的信息,可能需要花费大量的时间和精力。幸运的是,有一种被称为网页抓取的技术可以帮助我们自动化这个过程。
代码解析
1. 导入必要的库
import os
from hashlib import md5
import pandas as pd
import requests
from bs4 import BeautifulSoup
os:用于操作文件路径等系统功能的标准 Python 库。
hashlib:用于生成哈希值的标准 Python 库,这里用于生成景点名称的哈希值作为数据的唯一标识。
pandas:用于数据处理和分析的流行 Python 库。
requests:用于发送 HTTP 请求和接收响应的 Python 库。
BeautifulSoup:用于解析 HTML 和 XML 文档的 Python 库。
2. 定义 get_page 函数
def get_page(url, city):
response = requests.get(url=url)
page_text = response.text
html = BeautifulSoup(page_text, 'lxml')
li_list = html.find('div', class_='listbox').find('ul').find_all('li')
for li in li_list:
# 解析网页中的景点信息并存储到字典中
name = li.find('a', class_='titlink').text
strategy_sum = li.find('div', class_='strategy_sum').text
comment_sum = li.find('div', class_='comment_sum').text
cur_star = li.find('span', class_='cur_star')['style'].split(':')[1].replace('%', '')
ranking_sum = li.find('span', class_='ranking_sum').text
desbox = li.find('div', class_='desbox')
link = li.find('a', class_='imglink')['href']
img = li.find('a', class_='imglink').find('img')['src']
# 将景点信息存储到字典中
citydata = {
'key': md5(name.encode('utf-8')).hexdigest(),
'城市': city,
'景点名称': name,
'攻略数量': strategy_sum,
'评论数量': comment_sum,
'星级': cur_star,
'排名': ranking_sum,
'简介': desbox.text,
'链接': link,
'图片': img
}
# 将字典转换为 DataFrame,并将数据追加到 CSV 文件中
df = pd.DataFrame(citydata, index=[0])
df.to_csv('data.csv', encoding='utf-8-sig', index=False, header=False, mode='a+')
print(citydata)
get_page 函数用于从指定 URL 获取网页数据,并解析其中的景点信息。然后将解析后的信息存储到字典 citydata 中,并将字典转换为 DataFrame,最后将数据追加到 CSV 文件中。
3. 主函数
if __name__ == '__main__':
filename = 'data.csv'
df = pd.DataFrame(columns=['key','城市', '景点名称', '攻略数量', '评论数量', '星级', '排名', '简介', '链接', '图片'])
# 如果文件不存在,则创建一个新的 CSV 文件
if not os.path.exists(filename):
df.to_csv(filename, encoding='utf-8-sig', index=False)
# 定义要爬取的城市和其对应的 URL
urls = [
{'city': '厦门','url': 'https://travel.qunar.com/p-cs299782-xiamen-jingdian-1-{page}','page': 0, 'max_page': 80},
# 其他城市的 URL 数据...
]
# 循环遍历城市列表并爬取数据
for url in urls:
while url['page'] <= url['max_page']:
url['page'] += 1
get_page(url['url'].format(page=url['page']), url['city'])
print('\r[{city}] 第{page}页/共{max_page}页'.format(city=url['city'],page=url['page'],max_page=url['max_page']),end=' ')
time.sleep(5)
主函数部分负责执行代码的主要逻辑,包括创建 CSV 文件、定义要爬取的城市和对应的 URL,以及循环遍历城市列表并调用 get_page 函数来爬取数据。
通过以上步骤,我们实现了一个简单的网页抓取程序,用于抓取旅游网站上的景点信息,并将数据存储到 CSV 文件中以供后续分析和处理。
如有遇到问题可以找小编沟通交流哦。另外小编帮忙辅导大课作业,学生毕设等。不限于python,java,大数据,模型训练等。