本文转载自:http://gkhelp.cn/1206.html

当我刚接触 Python 时,我已经被 Python 深深所吸引。Python 吸引我的地方不仅仅能用其编写网络爬虫,而且能用于数据分析。我能将大量的数据中以图形化方式呈现出来,更加直观的解读数据。
数据分析的前提是有数据可分析。如果没有数据怎么办?一是可以去一些数据网站下载相关的数据,不过数据内容可能不是自己想要的。二是自己爬取一些网站数据。
今天,我就爬取全国各地所有的必胜客餐厅信息,以便后续做数据分析。

抓取目标

我们要爬取的目标是必胜客中国。打开必胜客中国首页,进入“餐厅查询”页面

我们要爬取的数据内容有城市、餐厅名字、餐厅地址以及餐厅联系电话。因为我看到页面中有地图,所以页面一定有餐厅地址的经纬度。因此,餐厅的经纬度也是我们需要爬取的数据。
至于全国有必胜客餐厅的城市列表,我们可以通过页面的“切换城市”获取。

分析目页面

在编写爬虫程序之前,我都是先对页面进行简单分析,然后指定爬取思路。而且对页面结构进行分析往往会有一些意想不到的收获。
我们使用浏览器的开发者工具对页面结构进行简单分析。

我们在 StoreList 页面中能找到我们所需的数据。这个能确定数据提取的 Xpath 语法。
StoreList 页面的 Response 内容比较长。我们先不着急关闭页面,往下看看,找找看是否有其他可利用的内容。最后,我们找到调用获取餐厅列表信息的 JavaScript 函数代码。

我们接着搜索下GetStoreList函数,看看浏览器如何获取餐厅列表信息的。

从代码中,我们可以了解到页面使用 Ajax 方式来获取数据。页面以 POST 方式请求地址http://www.pizzahut.com.cn/StoreList/Index。同时,请求还携带参数 pageIndex 和 pageSize。

爬取思路

经过一番页面结构分析之后,我们指定爬取思路。首先,我们先获取城市信息。然后将其作为参数,构建 HTTP 请求访问必胜客服务器来获取当前城市中所有餐厅数据。
为了方便数据爬取,我将所有城市全部写入到 cities.txt 中。等要爬取数据时,我们再从文件中读取城市信息。
爬取思路看起来没有错,但是还是有个难题没有搞定。我们每次打开必胜客的官网,页面每次都会自动定位到我们所在的城市。如果无法破解城市定位问题,我们只能抓取一个城市数据。
于是乎,我们再次浏览首页,看看能不能找到一些可用的信息。最终,我们发现页面的 cookies 中有个 iplocation 字段。我将其进行 Url 解码,得到 深圳|0|0 这样的信息。

看到这信息,我恍然大悟。原来必胜客网站根据我们的 IP 地址来设置初始城市信息。如果我们能伪造出 iplocation 字段信息,那就可以随便修改城市了。

代码实现

文件中读取城市信息。

全国有必胜客餐厅的城市, 我将城市放到文件中, 一共 380 个城市

cities = []
def get_cities():""" 从文件中获取城市 """  file_name = 'cities.txt'with open(file_name, 'r', encoding='UTF-8-sig') as file:for line in file:city = line.replace(' ', '')cities.append(city)

依次遍历 cities 列表,将每个城市作为参数,构造 Cookies 的 iplocation 字段。

依次遍历所有城市的餐厅

for city in cities:restaurants = get_stores(city, count)results[city] = restaurantscount += 1time.sleep(2)

再以 POST 方式携带 Cookie 去请求必胜客服务器。最后再对返回页面数据进行提取。

def get_stores(city, count):""" 根据城市获取餐厅信息 """session = requests.Session()# 对【城市|0|0】进行 Url 编码city_urlencode = quote(city + '|0|0')# 用来存储首页的 cookiescookies = requests.cookies.RequestsCookieJar()headers = {'User-agent': 'Mozilla/5.0 (Windows NT 6.3; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/55.0.2883.87 UBrowser/6.2.3964.2 Safari/537.36','accept': 'text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,*/*;q=0.8','Host': 'www.pizzahut.com.cn','Cache-Control': 'max-age=0','Connection': 'keep-alive',}print('============第', count, '个城市:', city, '============')resp_from_index = session.get('http://www.pizzahut.com.cn/', headers=headers)# print(resp_from_index.cookies)# 然后将原来 cookies 的 iplocation 字段,设置自己想要抓取城市。cookies.set('AlteonP', resp_from_index.cookies['AlteonP'], domain='www.pizzahut.com.cn')cookies.set('iplocation', city_urlencode, domain='www.pizzahut.com.cn')# print(cookies)page = 1restaurants = []while True:data = {'pageIndex': page,'pageSize': "50",}response = session.post('http://www.pizzahut.com.cn/StoreList/Index', headers=headers, data=data, cookies=cookies)html = etree.HTML(response.text)# 获取餐厅列表所在的 div 标签divs = html.xpath("//div[@class='re_RNew']")temp_items = []for div in divs:item = {}content = div.xpath('./@onclick')[0]# ClickStore('22.538912,114.09803|城市广场|深南中路中信城市广场二楼|0755-25942012','GZH519')# 过滤掉括号和后面的内容content = content.split('('')[1].split(')')[0].split('','')[0]if len(content.split('|')) == 4:item['coordinate'] = content.split('|')[0]item['restaurant_name'] = content.split('|')[1] + '餐厅'item['address'] = content.split('|')[2]item['phone'] = content.split('|')[3]else:item['restaurant_name'] = content.split('|')[0] + '餐厅'item['address'] = content.split('|')[1]item['phone'] = content.split('|')[2]print(item)temp_items.append(item)if not temp_items:breakrestaurants += temp_itemspage += 1time.sleep(5)return restaurants

将城市以及城市所有餐厅信息等数据写到 Json 文件中

with open('results.json', 'w', encoding='UTF-8') as file:file.write(json.dumps(results, indent=4, ensure_ascii=False))

爬取结果

程序运行完之后, 就会在当前目录下生成一个名为results.json文件

本文转载自:https://blog.csdn.net/qq_37331184/article/details/84532548

更多案例请关注“思享会Club”公众号或者关注思享会博客:http://gkhelp.cn/

爬取全国所有必胜客餐厅信息相关推荐

  1. 100行代码爬取全国所有必胜客餐厅信息

    点击上方"极客猴",选择"置顶公众号" 第一时间获取Python技术干货! 题图: by jinovich from Instagram 阅读文本大概需要 10 ...

  2. 100 行代码爬取全国所有必胜客餐厅信息

    阅读文本大概需要 10 分钟. 当我刚接触 Python 时,我已经被 Python 深深所吸引.Python 吸引我的地方不仅仅能用其编写网络爬虫,而且能用于数据分析.我能将大量的数据中以图形化方式 ...

  3. python爬取餐饮数据_使用 Python 分析全国所有必胜客餐厅

    本文原创发布于微信公众号「极客猴」,欢迎关注第一时间获取更多原创分享 在之前的一篇文章中,我讲到如何爬取必胜客官网中全国各大城市餐厅的信息.虽然餐厅数据信息被抓取下来,但是数据一直在硬盘中" ...

  4. python数据分析库有哪些餐厅_使用 Python 分析全国所有必胜客餐厅

    作者:极客猴 来源:极客猴 题图:by thefolkpr0ject from Instagram 阅读文本大概需要 7 分钟. 在之前的一篇文章中,我讲到如何爬取必胜客官网中全国各大城市餐厅的信息. ...

  5. python爬虫:scrapy爬取传智播客教师信息

    推荐一个Chrome浏览器的xpath解析工具: xPath helper 轻松获取HTML元素的xPath 打开/关闭控制台:Ctrl-Shift键-X 参考:介绍一款chrome爬虫网页解析工具- ...

  6. python爬虫餐饮行业数据分析统计服_用Python分析统计必胜客餐厅

    在之前的 一篇文章100行代码爬取全国所有必胜客餐厅 信息,我讲到如何爬取必胜客官网中全国各大城市餐厅的信息.虽然餐厅数据信息被抓取下来,但是数据一直在硬盘中"躺尸".不曾记得,自 ...

  7. Python爬虫之编辑cookie实例:必胜客餐厅

    转载自公众号:python_shequ 今天,我就爬取全国各地所有的必胜客餐厅信息,以便后续做数据分析. 01抓取目标 我们要爬取的目标是必胜客中国.打开必胜客中国首页,进入"餐厅查询&qu ...

  8. python查询高校信息_Python 3爬取全国高校基本信息-Go语言中文社区

    最近接了一个单子,是爬取全国高校的基本信息,高校名字,高校层次,高校地区,招生办电话,招生办官网~ 镇楼图如下: 开发环境:python3.6(最新3.7也可以的) +pycharm 第三放库:req ...

  9. 使用python scrapy爬取全国小区信息(包括小区价格,经纬度,面积,户数等),并保存到mysql和excel

    目标 此次爬取的网站是楼盘网,因为只爬取小区信息,所以先从深圳小区(http://sz.loupan.com/community/)网页入手分析,然后发散爬取至全国. 爬取的信息包括 省,所属市,所属 ...

最新文章

  1. WPF QuickStart系列之样式和模板(Style and Template)
  2. 作为“山寨版脸书”Reels在网站推广中真的要和Tik Tok死磕?
  3. ECSHOP去版权标志删除Powered by ECShop(转)
  4. Linux centos 主机名颜色设置 和 别名设置
  5. python代码覆盖率怎么统计的_Python代码覆盖率统计工具coverage.py用法详解
  6. HDU4506 小明系列故事——师兄帮帮忙
  7. Java EE EJB拦截器教程和示例
  8. 南京打造大数据创新孵化平台
  9. 7 学大厂,拓展基础组件封装思路 BAT?TMD
  10. AJAX 跨域访问 — 方法大全
  11. [深度学习] ImageAI库使用笔记
  12. 七牛云存储之文件上传(Android)
  13. ❤️字节跳动8年测试经验,彻夜无眠整理的40道自动化测试面试题(附精准答案),爆肝2W字❤️
  14. 怎样使用NetFlow分析网络异常流量
  15. 程序员的那些搞笑牛逼注释
  16. CocosCreator 游戏小地图/地图雷达
  17. 面对疫情,健身俱乐部管理者最应该做的6件事
  18. android WebView多标签,加速解决卡顿,视频播放笔记
  19. jquery获取元素下面的所有指定元素
  20. 研究生哪些行为可以在导师那超加分?

热门文章

  1. 关于JS出现的Cannot read property 'val' of null错误
  2. html小球碰撞源代码,JS实现小球的弹性碰撞效果
  3. location 简介
  4. java stopwatch_Spring StopWatch使用实例详解
  5. 【matlab】matlab读写bin文件注意事项
  6. 游戏的分类,知识普及
  7. 4 个无质量损失的免费在线图像压缩器
  8. 过陌陌APK签名校验
  9. iOS 7: 如何为iPhone 5S编译64位应用。
  10. 绿色邮件系统_论坛邮件群发_论坛邮件群发asp