首页 > 技术文章 > Python爬虫学习(三) ——————爬取外卖信息

Beyond-Ricky 2017-12-20 20:46 原文

 距离上一次写博客已经差不多有半年了,深表惭愧.....  废话不多说,说说今天的任务,今天我们的目的爬取外卖信息,选择的平台是饿了吗。

第一步:饿了吗官网进去,定位中南海

 

第二步:随笔点进去一个商家

我们需要爬取的是每一种食品的名称、月销售量、评分、评论数

第三步:查看源代码发现根本找不到我们需要的元素,很显然这是一个动态页面,那我们可以通过抓包来查看请求过程,F12+F5,

很显然在这里找到了我们需要的东西,找到了入口之后直接上代码:

 1 # -*- coding: utf-8 -*-
 2 # @Time    : 2017/12/10 13:43
 3 # @Author  : Ricky
 4 # @FileName: elm.py
 5 # @Software: New_start
 6 # @Blog    :http://www.cnblogs.com/Beyond-Ricky/
 7 
 8 import requests
 9 import json
10 restaurant_url = 'https://www.ele.me/restapi/shopping/v2/menu?restaurant_id=147207648'
11 web_data = requests.get(restaurant_url)
12 content = web_data.text
13 json_obj = json.loads(content)
14 for item in json_obj:
15     for food in item.get('foods'):
16         print(food.get('name'))
17         print(food.get('tips'))
18         print(food.get('rating'))

4.我们的目的是爬取中南海附近所有的外卖信息,这样一个个爬取肯定是浪费时间的,返回到上一页,我们再随便打开几个店铺,发现几个url只有后面一串数字不同,观察之后发现这就是店铺的id,因此我们只需要获取所有店铺的id就可以获取所有店铺的外卖信息了。爬取id的过程其实和上一个页面差不多,都是通过抓包完成的,这里不多做解释。直接上完整代码

 1 # -*- coding: utf-8 -*-
 2 # @Time    : 2017/12/10 15:35
 3 # @Author  : Ricky
 4 # @FileName: final_version.py
 5 # @Software: New_start
 6 # @Blog    :http://www.cnblogs.com/Beyond-Ricky/
 7 
 8 import requests
 9 import json
10 import time
11 from bs4 import BeautifulSoup
12 import lxml
13 id_list = []#店铺的id列表
14 name_list = []#店铺的名称列表
15 address_list = []#店铺的地址列表
16 
17 def get_all_id():
18     for offset in range(0,985,24):
19         url='https://www.ele.me/restapi/shopping/restaurants?extras%5B%5D=activities&geohash=wx4g06hu38n&latitude=39.91406&limit=24&longitude=116.38477&offset={}&terminal=web'.format(offset)
20         web_data = requests.get(url)
21         soup=BeautifulSoup(web_data.text,'lxml')
22         content = soup.text
23         json_obj = json.loads(content)
24         for item in json_obj:
25             restaurant_address = item.get('address')
26             address_list.append(restaurant_address)
27             restaurant_name = item.get('name')
28             name_list.append(restaurant_name)
29             restaurant_id = item.get('id')
30             id_list.append(restaurant_id)
31     return name_list,address_list,id_list
32 get_all_id()
33 m=0#用来计数,第几个店铺
34 n=0#用来记录数据,第几条数据
35 for id in id_list:
36     m=m+1
37     restaurant_url = 'https://mainsite-restapi.ele.me/shopping/v2/menu?restaurant_id='+str(id)
38     print('*************************这里是店铺分界线******第{}个店铺*********************************************'.format(m))
39 
40     print(name_list[m])
41     print(address_list[m])
42     headers = {'User-agent':'Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/50.0.2661.102 Safari/537.36'}
43 
44     web_data = requests.get(restaurant_url,headers=headers)
45     #time.sleep(3)
46     content = web_data.text
47     json_obj = json.loads(content)
48     try:
49         for item in json_obj:
50             for food in item.get('foods'):
51 
52                 n +=1
53                 print('第%d条数据:' % n)
54                 print(food.get('name'),food.get('tips'),'评分',food.get('rating'))
55     except AttributeError as e :
56         pass
57     except IndexError as e1:
58         pass

 

至此我们的任务就完成了!写得不好的地方欢迎指正!后面还会有爬虫系列的文章,谢谢大家!

 

推荐阅读