Python网络实践:去哪儿旅游数据爬取指南

简介: Python网络实践:去哪儿旅游数据爬取指南

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 文件中以供后续分析和处理。


相关文章
|
17天前
|
缓存 API 网络架构
淘宝item_search_similar - 搜索相似的商品API接口,用python返回数据
淘宝联盟开放平台中,可通过“物料优选接口”(taobao.tbk.dg.optimus.material)实现“搜索相似商品”功能。该接口支持根据商品 ID 获取相似推荐商品,并返回商品信息、价格、优惠等数据,适用于商品推荐、比价等场景。本文提供基于 Python 的实现示例,包含接口调用、数据解析及结果展示。使用时需配置淘宝联盟的 appkey、appsecret 和 adzone_id,并注意接口调用频率限制和使用规范。
|
19天前
|
机器学习/深度学习 算法 安全
【PSO-LSTM】基于PSO优化LSTM网络的电力负荷预测(Python代码实现)
【PSO-LSTM】基于PSO优化LSTM网络的电力负荷预测(Python代码实现)
|
2月前
|
存储 Web App开发 前端开发
Python + Requests库爬取动态Ajax分页数据
Python + Requests库爬取动态Ajax分页数据
|
1月前
|
传感器 大数据 API
Python数字限制在指定范围内:方法与实践
在Python编程中,限制数字范围是常见需求,如游戏属性控制、金融计算和数据过滤等场景。本文介绍了五种主流方法:基础条件判断、数学运算、装饰器模式、类封装及NumPy数组处理,分别适用于不同复杂度和性能要求的场景。每种方法均有示例代码和适用情况说明,帮助开发者根据实际需求选择最优方案。
56 0
|
1月前
|
API 数据安全/隐私保护 开发者
Python自定义异常:从入门到实践的轻松指南
在Python开发中,自定义异常能提升错误处理的精准度与代码可维护性。本文通过银行系统、电商库存等实例,详解如何创建和使用自定义异常,涵盖异常基础、进阶技巧、最佳实践与真实场景应用,助你写出更专业、易调试的代码。
72 0
|
19天前
|
JSON 安全 API
Python处理JSON数据的最佳实践:从基础到进阶的实用指南
JSON作为数据交换通用格式,广泛应用于Web开发与API交互。本文详解Python处理JSON的10个关键实践,涵盖序列化、复杂结构处理、性能优化与安全编程,助开发者高效应对各类JSON数据挑战。
98 1
|
21天前
|
人工智能 自然语言处理 安全
Python构建MCP服务器:从工具封装到AI集成的全流程实践
MCP协议为AI提供标准化工具调用接口,助力模型高效操作现实世界。
255 1
|
21天前
|
传感器 数据采集 监控
Python生成器与迭代器:从内存优化到协程调度的深度实践
简介:本文深入解析Python迭代器与生成器的原理及应用,涵盖内存优化技巧、底层协议实现、生成器通信机制及异步编程场景。通过实例讲解如何高效处理大文件、构建数据流水线,并对比不同迭代方式的性能特点,助你编写低内存、高效率的Python代码。
96 0
|
2月前
|
数据采集 监控 调度
干货分享“用 多线程 爬取数据”:单线程 + 协程的效率反超 3 倍,这才是 Python 异步的正确打开方式
在 Python 爬虫中,多线程因 GIL 和切换开销效率低下,而协程通过用户态调度实现高并发,大幅提升爬取效率。本文详解协程原理、实战对比多线程性能,并提供最佳实践,助你掌握异步爬虫核心技术。
|
2月前
|
JSON 数据挖掘 API
闲鱼商品列表API响应数据python解析
闲鱼商品列表API(Goodfish.item_list)提供标准化数据接口,支持GET请求,返回商品标题、价格、图片、卖家信息等。适用于电商比价、数据分析,支持多语言调用,附Python示例代码,便于开发者快速集成。

热门文章

最新文章

推荐镜像

更多