赞
踩
这里我选择哈尔滨作为目标城市,采集哈尔滨的景点信息。第一页的网址
https://place.qyer.com/haerbin/sight/
点击页面下方翻页到第二页, 页面内容已经发生变化,但是网址栏中的网址没有变化,依然是
https://place.qyer.com/haerbin/sight/
所以可以判断该网站为动态网站类型,对付这类网站,需要打开开发者工具Network面板来构建网址规律。
我用的chrome浏览器, F12键(Mac 快捷键command+option+I)打开开发者工具,如下图。
打开开发者工具后, 点击Network面板。为了让 Network监测到数据流, 点击2 。这样就能发现下方截图中的
poi.php?action=list_json
可以基于上方截图确认,该网站现在用的是post请求方法, 写代码时可以用requests.post(url, data)方式发起请求。
网址规律翻页规律如何构造呢, 通过检查发现 Payload决定着翻页,我们也看到下面截图中,page: 2对应着页面 2。
我们顺便点击Preview,检查预览数据是否与页面数据有对应关系。截图中「丁香公园」出现在页面和preview中。
构造网址规律, 以第二页为例, 发起请求,查看数据
采集的字段包括
景点名称
景点链接
评论人数
评级
图片链接
使用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(1, 93): #更新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()
当下这个大数据时代不掌握一门编程语言怎么跟的上脚本呢?当下最火的编程语言Python前景一片光明!如果你也想跟上时代提升自己那么请看一下.
感兴趣的小伙伴,赠送全套Python学习资料,包含面试题、简历资料等具体看下方。
一、Python所有方向的学习路线
Python所有方向的技术点做的整理,形成各个领域的知识点汇总,它的用处就在于,你可以按照下面的知识点去找对应的学习资源,保证自己学得较为全面。
二、Python必备开发工具
工具都帮大家整理好了,安装就可直接上手!
三、最新Python学习笔记
当我学到一定基础,有自己的理解能力的时候,会去阅读一些前辈整理的书籍或者手写的笔记资料,这些笔记详细记载了他们对一些技术点的理解,这些理解是比较独到,可以学到不一样的思路。
四、Python视频合集
观看全面零基础学习视频,看视频学习是最快捷也是最有效果的方式,跟着视频中老师的思路,从基础到深入,还是很容易入门的。
五、实战案例
纸上得来终觉浅,要学会跟着视频一起敲,要动手实操,才能将自己的所学运用到实际当中去,这时候可以搞点实战案例来学习。
六、面试宝典
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。