事由:近期和朋友聊天,聊到黄山酒店事情,需要了解一下黄山的酒店情况,然后就想着用python 爬一些数据出来,做个参考

主要思路:通过查找,基本思路清晰,目标明确,仅仅爬取美团莫一地区的酒店信息,不过于复杂,先完成一个小目标

环境:

  python 3.6

主要问题:

1. 在爬取美团黄山酒店第一页后,顺利拿到想要的信息,但在点击第二页后,chrome中检查信息能够看见想要的信息,但是查看源代码却没有,思考后,应该是Ajax动态获取的,然后查找办法,最终通过selenium模拟浏览器,然后进行爬取
2. 标签查找,通过chrome进行分析整体网站标签信息后,对某一个标签的class未清楚认识,导致错误认识,消耗比较长的调试时间

代码如下:

import requests
from bs4 import BeautifulSoup
from selenium import webdriver
from selenium.webdriver.common.desired_capabilities import DesiredCapabilities
import xlwt url = 'http://hotel.meituan.com/huangshan/' #获取酒店分页信息,返回最大页码
def get_page_num(url):
html = requests.get(url).text
soup = BeautifulSoup(html,'lxml')
page_info = soup.find_all('li',class_='page-link') #获取酒店首页的页面导航条信息
page_num = page_info[-1].find('a').get_text() #获取酒店页面的总页数
return int(page_num) #返回酒店页面的总页数 #获取所有酒店详细信息,包含酒店名称,链接,地址,评分,消费人数,价格,上次预定时间
def get_hotel_info(url):
dcap = dict(DesiredCapabilities.PHANTOMJS)
dcap['phantomjs.page.settings.userAgent'] = ('Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/58.0.3029.110 Safari/537.36') #设置userAgent,可以从浏览器中找到,用于反爬虫禁止IP
browser = webdriver.PhantomJS("/Users/chenglv/phantomjs-2.1.1-macosx/bin/phantomjs", desired_capabilities=dcap) #指定phantomjs程序路径
browser.get(url)
hotel_info = {}
hotel_id = ['酒店名','网址','酒店地址','评价','消费人数','价格','上次预约时间']
col_num = 1
page_num = 1 book = xlwt.Workbook(encoding='utf-8',style_compression=0) #创建excel文件
sheet = book.add_sheet('hotel_info',cell_overwrite_ok=True) #创建excel sheet表单 for i in range(len(hotel_id)): #写入表单第一行,即列名称
sheet.write(0,i,hotel_id[i]) #excel中写入第一行列名 while(page_num < get_page_num(url)+1): #获取一个页面的所有酒店信息
for item in browser.find_elements_by_class_name('info-wrapper'):
hotel_info['name'] = item.find_element_by_class_name('poi-title').text
hotel_info['link'] = item.find_element_by_class_name('poi-title').get_attribute('href')
hotel_info['address'] = item.find_element_by_class_name('poi-address').text.split(' ')[1]
hotel_info['star'] = item.find_element_by_class_name('poi-grade').text
hotel_info['consumers'] = item.find_element_by_class_name('poi-buy-num').text
hotel_info['price'] = item.find_element_by_class_name('poi-price').text
hotel_info['last_order_time'] = item.find_element_by_class_name('last-order-time').text #将当前页面中的酒店信息获取到后,写入excel的行中
for i in range(len(hotel_info.values())):
sheet.write(col_num,i,list(hotel_info.values())[i])
col_num+=1 browser.find_element_by_class_name('paginator').find_element_by_class_name('next').find_element_by_tag_name('a').click() #一个页面写完后,通过点击"下一页"图标至下一页,继续获取
page_num += 1
book.save('hotel_info_huangshan.csv') def main():
get_hotel_info(url) if '__main__' == __name__:
main()

运行后结果如下图:

此部分仅因兴趣编写,还有很多未考虑,后期可以进行多层爬取,以及爬取更多的内容。

Python 爬取美团酒店信息的更多相关文章

  1. python爬取“美团美食”汕头地区的所有店铺信息

    一.目的 获取美团美食每个店铺所有的评论信息,并保存到数据库和本地 二.实现步骤 获取所有店铺的poiId 首先观察详情页的url,后面是跟着一串数字的,而这一串数字代表着每个店铺特有的id号,我们称 ...

  2. Python爬取拉勾网招聘信息并写入Excel

    这个是我想爬取的链接:http://www.lagou.com/zhaopin/Python/?labelWords=label 页面显示如下: 在Chrome浏览器中审查元素,找到对应的链接: 然后 ...

  3. python爬取豆瓣视频信息代码

    目录 一:代码 二:结果如下(部分例子)   这里是爬取豆瓣视频信息,用pyquery库(jquery的python库). 一:代码 from urllib.request import quote ...

  4. 使用python抓取美团商家信息

    抓取美团商家信息 import requests from bs4 import BeautifulSoup import json url = 'http://bj.meituan.com/' ur ...

  5. python 爬取豆瓣书籍信息

    继爬取 猫眼电影TOP100榜单 之后,再来爬一下豆瓣的书籍信息(主要是书的信息,评分及占比,评论并未爬取).原创,转载请联系我. 需求:爬取豆瓣某类型标签下的所有书籍的详细信息及评分 语言:pyth ...

  6. python爬取梦幻西游召唤兽资质信息(不包含变异)

    一.分析 1.爬取网站:https://xyq.163.com/chongwu/ 2.获取网页源码: request.get("https://xyq.163.com/chongwu/&qu ...

  7. python 爬取bilibili 视频信息

    抓包时发现子菜单请求数据时一般需要rid,但的确存在一些如游戏->游戏赛事不使用rid,对于这种未进行处理,此外rid一般在主菜单的响应中,但有的如番剧这种,rid在子菜单的url中,此外返回的 ...

  8. python爬取网业信息案例

    需求:爬取网站上的公司信息 代码如下: import json import os import shutil import requests import re import time reques ...

  9. python爬取电影网站信息

    一.爬取前提1)本地安装了mysql数据库 5.6版本2)安装了Python 2.7 二.爬取内容 电影名称.电影简介.电影图片.电影下载链接 三.爬取逻辑1)进入电影网列表页, 针对列表的html内 ...

随机推荐

  1. 【Android 应用开发】 自定义组件 宽高适配方法, 手势监听器操作组件, 回调接口维护策略, 绘制方法分析 -- 基于 WheelView 组件分析自定义组件

    博客地址 : http://blog.csdn.net/shulianghan/article/details/41520569 代码下载 : -- GitHub : https://github.c ...

  2. Workflow相关表简单分析

    静态定义表(没有ITEM_KEY,因为ITEM_KEY代表一个wf实例) --获取item_type定义. SELECT * FROM wf_item_types t WHEREt.name= 'CU ...

  3. PA模块常用表

    SELECT * FROM pa_projects_all; --项目 SELECT * FROM pa_project_types; --项目类型 SELECT * FROM pa_project_ ...

  4. Python学习笔记 - function调用和定义

    调用函数: #!/usr/bin/env python3 # -*- coding: utf-8 -*- # 函数调用 >>> abs(100) 100 >>> a ...

  5. 【一天一道LeetCode】#48. Rotate Image

    一天一道LeetCode系列 (一)题目 You are given an n x n 2D matrix representing an image. Rotate the image by 90 ...

  6. 【一天一道LeetCode】#21. Merge Two Sorted Lists

    一天一道LeetCode系列 (一)题目 Merge two sorted linked lists and return it as a new list. The new list should ...

  7. saiku显示不出新的cube(加载的cube,saiku会保存到缓存中,不重新加载)

    当用workbench 修改cube后,保存到saiku路径. saiku读取该cube时,如果以前加载过该cube(同路径,同名).则不会新加载,而是用缓存中的cube,这个cube是以前的cube ...

  8. SpriteBuilder中的CCSprite9Slice是个什么鬼?

    CCSprite大家都知道,但是加上后面那一串又变成了神马呢? 我们可以首先到官方的API文档网站查一下,如下: http://www.cocos2d-swift.org/docs/api/Class ...

  9. linux下ruby使用tcl/tk编程环境设置

    正常情况下最新的ruby都是不带tcl/tk选项编译的,所以我们在运行tcl/tk代码时都会发生找不到tk库的错误.解决办法很简单只要以tcl/tk选项编译ruby即可. 这里以ubuntu 15.0 ...

  10. Linux - sed 工具

    我们先来谈一谈 sed 好了, sed 本身也是一个管线命令,可以分析 standard input 的啦! 而且 sed 还可以将数据进行取代.删除.新增.撷取特定行等等的功能呢!很不错吧- 我们先 ...