对携程酒店用户评价爬取

(1)直接贴代码,后面逐步分析

!pip install beautifulsoup4
!pip install xlwt

import re
import urllib.request,urllib.error
import  xlwt
import sqlite3
from bs4 import BeautifulSoup

def main():
    BaseUrl="https://m.ctrip.com/webapp/hotel/hoteldetail/dianping/65822792.html?&fr=detail&atime=20210519&days=1"
    #1.爬取网页
    datalist=getDate(BaseUrl)
    savaPath="D:/XieCheng.xls"
   #2.保存数据
    SavaPath(datalist,savaPath)
    
#用户名
findTitle=re.compile(r'<span>(.*?)</span>')
#等级
findLevel=re.compile(r'<span class="user-level-base user-level-1>(.*?)</span>',re.S)
#入住时间
findTime=re.compile(r'<span class="checkin-line">(.*?)</span>')
#入住类型
findType=re.compile(r'<em class="item hotel-border">(.*?)</em>')
#入住房间
findHotel=re.compile(r' <span class="hotel-arr" data-ubt-key="c_hotel_comment_baseroom" style="color:#4289ff;">(.*?)</span>')
#评价
findAssess=re.compile(r'<p class="tree-ellips-line6 comment-swarp">(.*?)</p>',re.S)
#回复
findResponse=re.compile(r' <li style="display:none;">(.*?)</li>',re.S)
  #获取网页  
def  getDate(BaseUrl):
    datalist=[]
    html=AskURL(BaseUrl)
    soup=BeautifulSoup(html,"html.parser")
    #逐一解析
    for item in soup.find_all('div',class_="dn hotel-t-b-border"):
        
        data=[]#此列表用于保存一条评价的全部信息
        item=str(item)
        Title=re.findall(findTitle,item)
        data.append(Title)
        Level=re.findall(findLevel,item)
        data.append(Level)
        Time=re.findall(findTime,item)
        data.append(Time)
        Type=re.findall(findType,item)
        data.append(Type)
        Hotel=re.findall(findHotel,item)
        data.append(Hotel)
        Assess=re.findall(findAssess,item)
        data.append(Assess)
        Responseaa=re.findall(findResponse,item)
        data.append(Responseaa)
        datalist.append(data)   
    return datalist
    
 #获得一个指定的url网页内容
def  AskURL(url):
              #模拟浏览器头部,像豆瓣发送请求
     head={"user-agent": "Mozilla/5.0 (Linux; Android 6.0; Nexus 5 Build/MRA58N) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/90.0.4430.212 Mobile Safari/537.36 Edg/90.0.818.62"}
     #用户代理,告诉服务器,我们是什么类型的机器,浏览器(本质是让它返回可以接受的文件内容)
     request=urllib.request.Request(url,headers=head)
     html=""
     try:
        response=urllib.request.urlopen(request)
        html=response.read().decode("utf-8")
      #  print(html)
     except urllib.error.URLError  as e:
            if hasattr(e,"code"):
                print(e.code)
            if hasattr(e,"reason"):
                print(e.reason)
                
     return html
        
        
  #3.保存数据
def  SavaPath(datalist,savaPath):
        print("save....")
        book=xlwt.Workbook(encoding="utf-8",style_compression=0)#创建Workbook对象
        sheet=book.add_sheet('携程酒店评价',cell_overwrite_ok=True)#创建工作表
        col=("用户名","等级","入住时间","入住类型","入住房间","评价","回复")
        for i in range(0,7):
             sheet.write(0,i,col[i])
        for i in range(0,len(datalist)):
             print("第%d条"%(i+1))
             data=datalist[i]
             for j in range(0,7):
                 sheet.write(i+1,j,data[j])
            
        book.save(savaPath)
        
#main()       
        
if __name__ == '__main__':#当程序执行时,调用函数
    main()

(2)如果直接爬取携程官网是没有评价的,评价是后来载入的

点开这个网页,就是我想要的评价了。

(3)代码分析

#获得一个指定的url网页内容
def  AskURL(url):
              #模拟浏览器头部,像豆瓣发送请求
     head={"user-agent": "Mozilla/5.0 (Linux; Android 6.0; Nexus 5 Build/MRA58N) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/90.0.4430.212 Mobile Safari/537.36 Edg/90.0.818.62"}
     #用户代理,告诉服务器,我们是什么类型的机器,浏览器(本质是让它返回可以接受的文件内容)
     request=urllib.request.Request(url,headers=head)
     html=""
     try:
        response=urllib.request.urlopen(request)
        html=response.read().decode("utf-8")
      #  print(html)
     except urllib.error.URLError  as e:
            if hasattr(e,"code"):
                print(e.code)
            if hasattr(e,"reason"):
                print(e.reason)
                
     return html

这是获得网页,会获取到网页,这时候就要用正则表达式了

#用户名
findTitle=re.compile(r'<span>(.*?)</span>')
#等级
findLevel=re.compile(r'<span class="user-level-base user-level-1>(.*?)</span>',re.S)
#入住时间
findTime=re.compile(r'<span class="checkin-line">(.*?)</span>')
#入住类型
findType=re.compile(r'<em class="item hotel-border">(.*?)</em>')
#入住房间
findHotel=re.compile(r' <span class="hotel-arr" data-ubt-key="c_hotel_comment_baseroom" style="color:#4289ff;">(.*?)</span>')
#评价
findAssess=re.compile(r'<p class="tree-ellips-line6 comment-swarp">(.*?)</p>',re.S)
#回复
findResponse=re.compile(r' <li style="display:none;">(.*?)</li>',re.S)

获取到的网页我是保存在excel表格里面的。

标题

(4)由于携程是动态载入,所以一次只能爬取10条。关于动态爬取我放在下一篇。

对携程酒店用户评价爬取相关推荐

  1. 携程酒店数据爬取2020.5

    携程酒店数据爬取2020.5 1. 开题 目前网上有好多爬取携程网站的教程,大多数通过xpath,beautifulsoup,正则来解析网页的源代码.然后我这个菜b贪方便,直接copy源码的xpath ...

  2. js逆向之携程酒店房价抓取

    团队持续招人,app逆向方向,私聊.2019-05-11 修复携程eleven参数改版问题 1 在调用require的时候判断是不是参数是不是path,如果是抛出异常 2 重新window的构造方法的 ...

  3. 破解携程中文验证码爬取机票价格数据

    国内机票预定APP携程处于垄断地位,但是携程有反爬虫策略,对于密集的查询请求会要求验证,验证操作有两次,一次是拖动验证,一次是点选中文,selenium+webdriver可以轻松绕过这一反爬虫设置. ...

  4. python 携程登陆,Python爬取携程信息

    python爬取携程景点评论信息 今天要分析的网站是携程网,获取景点的用户评论,评论信息通过json返回API,页面是这个样子的 按下F12之后,F5刷新一下 具体需要URL Request的方式为P ...

  5. 爬取携程和蚂蜂窝的景点评论数据\携程评论数据爬取\旅游网站数据爬取

    本人长期出售超大量微博数据.旅游网站评论数据,并提供各种指定数据爬取服务,Message to YuboonaZhang@Yahoo.com.同时欢迎加入社交媒体数据交流群:99918768 前言   ...

  6. 爬虫-携程酒店信息抓取降妖除魔(下)

    #这篇主要是讲抓取酒店页面list的经历,也有很多坑,反爬,价格数据放在其他位置 多分析才能事半功倍 1.通过分析酒店相关信息list也是ajax加载,存放在json数据中,价格也在同一个json中但 ...

  7. 携程航班信息爬取(python)---第一次写博客,不好请别见外!

    1.航班信息接口 api="https://flights.ctrip.com/itinerary/api/12808/products",这个接口中包含了所要查询的航班信息. * ...

  8. python爬取携程景点_python爬取携程景点评论信息

    今天要分析的网站是携程网,获取景点的用户评论,评论信息通过json返回API,页面是这个样子的 按下F12之后,F5刷新一下 具体需要URL Request的方式为POST,还需要你提取的哪一页,下面 ...

  9. python爬取携程酒店信息_不写代码玩转爬虫实例(3) - 抓取携程酒店信息

    背景需求 有不少朋友问永恒君携程网站的酒店信息怎么抓取,今天这篇文章来分享一下使用web scraper来快速实现抓取携程酒店信息. 例如,在携程官网搜索北京 密云水库的酒店信息, 可以搜索到非常多的 ...

最新文章

  1. Python树莓派编程1.2 探索树莓派
  2. python dict遍历_Python 容器(二):字典(Dict)
  3. [转载] Python中定义函数,循环语句,条件语句
  4. 从linux使用sz命令下载大于4g的文件到windows
  5. Linux上RandomAccessFile访问FTP文件出错
  6. chrome插件“京东商品佣金助手”之项目介绍(一)
  7. java供应商管理系统项目简介,基于jsp的供应商管理系统-JavaEE实现供应商管理系统 - java项目源码...
  8. Quantile-Quantile (q-q) Plots
  9. 如何将多张图片转换为pdf格式
  10. 如何下载微信公众号视频
  11. NCB:神经元线粒体应激记忆可通过mtDNA水平升高跨代遗传
  12. Codeforces 982E Billiard 扩展欧几里德
  13. html设置表单里面字体格式为中文,html设置字体样式 html怎么设置字体样式 html字体怎么设置...
  14. 如何优雅的解决”重复请求“问题
  15. 秦羽接引的鸿蒙第四人,星辰变:仙界最强的五人,秦羽第二,敖无虚垫底,小黑难进前三...
  16. SAP SM30实现表关键字段自增
  17. mysql 民族表_我国西北地区藏族.蒙古族等民族的藏传佛教格鲁派中心是(        )。...
  18. 「TCG 规范解读」初识 TPM 的应用环境
  19. 使用ROT13加密解密
  20. 智能密集型仓储货架自动化立体库|四向穿梭式货架对于仓库空间面积上有什么要求?

热门文章

  1. MySQL数据库综合练习四
  2. 雅虎市值_雅虎! 启动BrowserPlus,计划对其进行开源
  3. 度量两个矩阵的相似性
  4. ApacheDS安装 [ LDAP和Kerberos ] 配置
  5. Python基金投资回测
  6. 如何快速的在Windows自带cmd生产文件的MD5数值
  7. mysql怎么创建窗口应用程序,使用 MySQL 数据库创建简单的 Web 应用程序
  8. 如何用服务器文件管理系统记录共享文件的访问日志、记录共享文件复制、修改、删除和剪切等操作?...
  9. 高通平台usb充电检测
  10. 从公式到代码详细解析PLV(锁相值)