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

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

发布时间:2018-11-27 21:47:34 所属栏目:教程 来源:极客猴
导读:当我刚接触 Python 时,我已经被 Python 深深所吸引。Python 吸引我的地方不仅仅能用其编写网络爬虫,而且能用于数据分析。我能将大量的数据中以图形化方式呈现出来,更加直观的解读数据。 数据分析的前提是有数据可分析。如果没有数据怎么办?一是可以去一

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

  1. def get_stores(city, count): 
  2.     """ 根据城市获取餐厅信息 """ 
  3.     session = requests.Session() 
  4.     # 对【城市|0|0】进行 Url 编码 
  5.     city_urlencode = quote(city + '|0|0') 
  6.     # 用来存储首页的 cookies 
  7.     cookies = requests.cookies.RequestsCookieJar() 
  8.  
  9.     headers = { 
  10.         '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', 
  11.         'accept': 'text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,*/*;q=0.8', 
  12.         'Host': 'www.pizzahut.com.cn', 
  13.         'Cache-Control': 'max-age=0', 
  14.         'Connection': 'keep-alive', 
  15.     } 
  16.  
  17.     print('============第', count, '个城市:', city, '============') 
  18.     resp_from_index = session.get('http://www.pizzahut.com.cn/', headers=headers) 
  19.     # print(resp_from_index.cookies) 
  20.     # 然后将原来 cookies 的 iplocation 字段,设置自己想要抓取城市。 
  21.     cookies.set('AlteonP', resp_from_index.cookies['AlteonP'], domain='www.pizzahut.com.cn') 
  22.     cookies.set('iplocation', city_urlencode, domain='www.pizzahut.com.cn') 
  23.     # print(cookies) 
  24.  
  25.     page = 1 
  26.     restaurants = [] 
  27.  
  28.     while True: 
  29.         data = { 
  30.             'pageIndex': page, 
  31.             'pageSize': "50", 
  32.         } 
  33.  
  34.         response = session.post('http://www.pizzahut.com.cn/StoreList/Index', headers=headers, data=data, cookies=cookies) 
  35.         html = etree.HTML(response.text) 
  36.         # 获取餐厅列表所在的 div 标签 
  37.         divs = html.xpath("//div[@class='re_RNew']") 
  38.         temp_items = [] 
  39.         for div in divs: 
  40.             item = {} 
  41.             content = div.xpath('./@onclick')[0] 
  42.             # ClickStore('22.538912,114.09803|城市广场|深南中路中信城市广场二楼|0755-25942012','GZH519') 
  43.             # 过滤掉括号和后面的内容 
  44.             content = content.split('('')[1].split(')')[0].split('','')[0] 
  45.  
  46.             if len(content.split('|')) == 4: 
  47.                 item['coordinate'] = content.split('|')[0] 
  48.                 item['restaurant_name'] = content.split('|')[1] + '餐厅' 
  49.                 item['address'] = content.split('|')[2] 
  50.                 item['phone'] = content.split('|')[3] 
  51.             else: 
  52.                 item['restaurant_name'] = content.split('|')[0] + '餐厅' 
  53.                 item['address'] = content.split('|')[1] 
  54.                 item['phone'] = content.split('|')[2] 
  55.             print(item) 
  56.             temp_items.append(item) 
  57.  
  58.         if not temp_items: 
  59.             break 
  60.         restaurants += temp_items 
  61.         page += 1 
  62.         time.sleep(5) 
  63.     return restaurants 

(编辑:核心网)

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

热点阅读