查看原文
其他

网络爬虫 | 采集穷游网某城市旅游景点

大邓 大邓和他的Python
2024-09-09

一、发现网址规律

1.1 判断网站类型

这里我选择哈尔滨作为目标城市,采集哈尔滨的景点信息。第一页的网址

https://place.qyer.com/haerbin/sight/


点击页面下方翻页到第二页, 页面内容已经发生变化,但是网址栏中的网址没有变化,依然是

https://place.qyer.com/haerbin/sight/

所以可以判断该网站为动态网站类型,对付这类网站,需要打开开发者工具Network面板来构建网址规律。

1.2  抓包构建网址规律

1.2.1 Headers

我用的chrome浏览器, F12键(Mac 快捷键command+option+I)打开开发者工具,如下图。

打开开发者工具后, 点击Network面板。为了让 Network监测到数据流,  点击2 。这样就能发现下方截图中的

poi.php?action=list_json

可以基于上方截图确认,该网站现在用的是post请求方法, 写代码时可以用requests.post(url, data)方式发起请求。

1.2.2 Payload

网址规律翻页规律如何构造呢, 通过检查发现 Payload决定着翻页,我们也看到下面截图中,page: 2对应着页面 2

1.2.3 Preview

我们顺便点击Preview,检查预览数据是否与页面数据有对应关系。截图中「丁香公园」出现在页面和preview中。



1.3 构造网址规律

构造网址规律, 以第二页为例, 发起请求,查看数据



二、存储数据

采集的字段包括

  • 景点名称
  • 景点链接
  • 评论人数
  • 评级
  • 图片链接

使用csv格式存储数据

import csv

with open('harbin_sight.csv''w', encoding='utf-8', newline=''as csvf:
    fieldnames = ['sightName''sightUrl''commentCount''rate''imgUrl']
    writer = csv.DictWriter(csvf, fieldnames = fieldnames)
    writer.writeheader()
    
    for sight in resp.json()['data']['list']:
        sight_info = {'sightName': sight['cnname'],
                      'sightUrl''https:' + sight['url'],
                      'commentCount': sight['commentCount'],
                      'rate': sight['grade'],
                      'imgUrl': sight['photo']
                     }
        
        writer.writerow(sight_info)

代码运行后, 尝试检查harbin_sight.csv, 现在该文件内暂时存储了第二页的景点信息

import pandas as pd

df = pd.read_csv('harbin_sight.csv')

print('景点数: ', len(df))
df.head()


三、批量采集

以哈尔滨为例, 景点页面一共有92页,批量采集这92页信息。完整代码

import requests
import csv
import time

url = 'https://place.qyer.com/poi.php?action=list_json'
#控制翻页的字典
formdata = {'page'2,
            'type''city',
            'pid'11597,
            'sort'32,
            'subsort''all',
            'isnominate'-1,
            'haslastm''false',
            'rank'6}

headers = {'User-Agent''Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/117.0.0.0 Safari/537.36'}


#新建csv,存储数据
with open('harbin_sight.csv''w', encoding='utf-8', newline=''as csvf:
    #设置csv的字段
    fieldnames = ['sightName''sightUrl''commentCount''rate''imgUrl']
    writer = csv.DictWriter(csvf, fieldnames = fieldnames)
    writer.writeheader()
    
    #采集哈尔滨从第1页到92页
    for page in range(193):
        #更新formdata网页数信息,相当于翻页
        formdata['page'] = page
        #time.sleep(1) 控制访问速度,每秒访问1次
        time.sleep(1)
        resp = requests.post(url, data=formdata, headers=headers)
        
        print('正在采集哈尔滨第{}页信息'.format(page))
        #存储数据
        for sight in resp.json()['data']['list']:
            sight_info = {'sightName': sight['cnname'],
                          'sightUrl''https:' + sight['url'],
                          'commentCount': sight['commentCount'],
                          'rate': sight['grade'],
                          'imgUrl': sight['photo']
                         }
            writer.writerow(sight_info)
    

Run

正在采集哈尔滨第1页信息
正在采集哈尔滨第2页信息
......
正在采集哈尔滨第91页信息
正在采集哈尔滨第92页信息


检查数据

import pandas as pd

df = pd.read_csv('harbin_sight.csv')

print('景点数: ', len(df))
df.head()


精选内容

96G数据集 | 2亿条中国大陆企业工商注册信息

70G数据集 | 3571万条专利申请数据集(1985-2022年)

数据集 | 2006年-2022年企业社会责任报告

93G数据集 | 中国裁判文书网(2010~2021)

数据集 | 2001-2022年A股上市公司年报&管理层讨论与分析

数据集 | 3.9G全国POI地点兴趣点数据集

数据集 | 2014年-2022年监管问询函

CAR2023 | 文本分析在会计中的应用

管理世界 | 使用文本分析词构建并测量 短视主义

管理世界 | 使用 经营讨论与分析 测量 企业数字化指标

管理世界 | 用正则表达式、文本向量化、线性回归算法从md&a数据中计算 「企业融资约束指标

管理世界 | 政府与市场心理因素的经济影响及其测度

管理世界 | 机器学习如何赋能管理学研究?——国内外前沿综述和未来展望

中国管理科学 | 使用业绩说明会文本数据测量上市公司前瞻性信息

管理科学学报 | 使用LDA算法计算政策扩散速度与扩散程度

文本分析 | 中国企业高管团队创新注意力(含代码)

金融研究 | 使用Python构建「关键审计事项信息含量」

PNAS | 14000+篇心理学顶刊论文可复现性调研(含代码)

网络爬虫 | 使用Python采集B站弹幕和评论数据

网络爬虫 | 使用Python披露采集 Up 主视频详情信息

可视化 | 绘制《三体》人物关系网络图

可视化 | 99-21年地方政府报告关键词变化趋势

可视化 | Netflix 数据可视化最佳实践

可视化 | 使用geopandas可视化地图数据

使用 Word2Vec 和 TF-IDF 计算五类企业文化

数据集 | 07-21年上市公司「委托贷款公告」

数据集 | 200w政府采购合同公告明细数据(1996.6-2022.12)

数据集 | 84w条业绩说明会问答数据(2005-2023)

单个csv文件体积大于电脑内存,怎么办?

高管数据 | 使用pandas对xlsx中的简介字段做文本分析

继续滑动看下一个
大邓和他的Python
向上滑动看下一个

您可能也对以下帖子感兴趣

文章有问题?点此查看未经处理的缓存