加入收藏 | 设为首页 | 会员中心 | 我要投稿 湖南网 (https://www.hunanwang.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 教程 > 正文

100行代码爬取世界全部必胜客餐厅信息

发布时间:2018-11-28 05:15:16 所属栏目:教程 来源:极客猴
导读:当我刚打仗 Python 时,我已经被 Python 深深所吸引。Python 吸引我的处所不只仅能用其编写收集爬虫,并且能用于数据说明。我能将大量的数据中以图形化方法泛起出来,越发直观的解读数据。 数据说明的条件是稀有据可说明。假如没稀有据怎么办?一是可以去一
副问题[/!--empirenews.page--]

当我刚打仗 Python 时,我已经被 Python 深深所吸引。Python 吸引我的处所不只仅能用其编写收集爬虫,并且能用于数据说明。我能将大量的数据中以图形化方法泛起出来,越发直观的解读数据。

数据说明的条件是稀有据可说明。假如没稀有据怎么办?一是可以去一些数据网站下载相干的数据,不外数据内容也许不是本身想要的。二是本身爬取一些网站数据。

本日,我就爬取世界各地全部的必胜客餐厅信息,以便后续做数据说明。

01抓取方针

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

100行代码爬取世界全部必胜客餐厅信息

我们要爬取的数据内容有都市、餐厅名字、餐厅地点以及餐厅接洽电话。由于我看到页面中有舆图,以是页面必然有餐厅地点的经纬度。因此,餐厅的经纬度也是我们必要爬取的数据。

至于世界有必胜客餐厅的都市列表,我们可以通过页面的“切换都市”获取。

100行代码爬取世界全部必胜客餐厅信息

02说明目页面

在编写爬虫措施之前,我都是先对页面举办简朴说明,然后指定爬取思绪。并且对页面布局举办说明每每会有一些意想不到的收成。

我们行使赏识器的开拓者器材对页面布局举办简朴说明。

100行代码爬取世界全部必胜客餐厅信息

我们在 StoreList 页面中能找到我们所需的数据。这个能确定命据提取的 Xpath 语法。

StoreList 页面的 Response 内容较量长。我们先不着急封锁页面,往下看看,找找看是否有其他可操作的内容。最后,我们找到挪用获取餐厅列表信息的 JavaScript 函数代码。

100行代码爬取世界全部必胜客餐厅信息

我们接着搜刮下GetStoreList函数,看看赏识器怎样获取餐厅列表信息的。

100行代码爬取世界全部必胜客餐厅信息

从代码中,我们可以相识到页面行使 Ajax 方法来获取数据。页面以 POST 方法哀求地点http://www.pizzahut.com.cn/StoreList/Index。同时,哀求还携带参数 pageIndex 和 pageSize。

03爬取思绪

颠末一番页面布局说明之后,我们指定爬取思绪。起首,我们先获取都市信息。然后将其作为参数,构建 HTTP 哀求会见必胜客处事器来获取当前都市中全部餐厅数据。

为了利便数据爬取,我将全部都市所有写入到 cities.txt 中。等要爬取数据时,我们再从文件中读取都市信息。

爬取思绪看起来没有错,可是照旧有个困难没有搞定。我们每次打开必胜客的官网,页面每次城市自动定位到我们地址的都市。假如无法破解都市定位题目,我们只能抓取一个都市数据。

于是乎,我们再次赏识首页,看看能不能找到一些可用的信息。最终,我们发明页面的 cookies 中有个 iplocation 字段。我将其举办 Url 解码,获得 深圳|0|0 这样的信息。

100行代码爬取世界全部必胜客餐厅信息

看到这信息,我名顿开。原本必胜客网站按照我们的 IP 地点来配置初始都市信息。假如我们能伪造出 iplocation 字段信息,那就可以任意修改都市了。

04代码实现

第一步是从文件中读取都市信息。

  1. # 世界有必胜客餐厅的都市, 我将都市放到文件中, 一共 380 个都市 
  2. cities = [] 
  3.  
  4. def get_cities(): 
  5.     """ 从文件中获取都市 """  file_name = 'cities.txt' 
  6.   with open(file_name, 'r', encoding='UTF-8-sig') as file: 
  7.         for line in file: 
  8.             city = line.replace(' 
  9. ', '') 
  10.             cities.append(city) 

第二步是依次遍历 cities 列表,将每个都市作为参数,结构 Cookies 的 iplocation 字段。

  1. # 依次遍历全部都市的餐厅 
  2. for city in cities: 
  3.     restaurants = get_stores(city, count) 
  4.     results[city] = restaurants 
  5.     count += 1 
  6.   time.sleep(2) 

(编辑:湖南网)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

热点阅读