对携程酒店用户评价爬取
对携程酒店用户评价爬取
(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条。关于动态爬取我放在下一篇。
对携程酒店用户评价爬取相关推荐
- 携程酒店数据爬取2020.5
携程酒店数据爬取2020.5 1. 开题 目前网上有好多爬取携程网站的教程,大多数通过xpath,beautifulsoup,正则来解析网页的源代码.然后我这个菜b贪方便,直接copy源码的xpath ...
- js逆向之携程酒店房价抓取
团队持续招人,app逆向方向,私聊.2019-05-11 修复携程eleven参数改版问题 1 在调用require的时候判断是不是参数是不是path,如果是抛出异常 2 重新window的构造方法的 ...
- 破解携程中文验证码爬取机票价格数据
国内机票预定APP携程处于垄断地位,但是携程有反爬虫策略,对于密集的查询请求会要求验证,验证操作有两次,一次是拖动验证,一次是点选中文,selenium+webdriver可以轻松绕过这一反爬虫设置. ...
- python 携程登陆,Python爬取携程信息
python爬取携程景点评论信息 今天要分析的网站是携程网,获取景点的用户评论,评论信息通过json返回API,页面是这个样子的 按下F12之后,F5刷新一下 具体需要URL Request的方式为P ...
- 爬取携程和蚂蜂窝的景点评论数据\携程评论数据爬取\旅游网站数据爬取
本人长期出售超大量微博数据.旅游网站评论数据,并提供各种指定数据爬取服务,Message to YuboonaZhang@Yahoo.com.同时欢迎加入社交媒体数据交流群:99918768 前言 ...
- 爬虫-携程酒店信息抓取降妖除魔(下)
#这篇主要是讲抓取酒店页面list的经历,也有很多坑,反爬,价格数据放在其他位置 多分析才能事半功倍 1.通过分析酒店相关信息list也是ajax加载,存放在json数据中,价格也在同一个json中但 ...
- 携程航班信息爬取(python)---第一次写博客,不好请别见外!
1.航班信息接口 api="https://flights.ctrip.com/itinerary/api/12808/products",这个接口中包含了所要查询的航班信息. * ...
- python爬取携程景点_python爬取携程景点评论信息
今天要分析的网站是携程网,获取景点的用户评论,评论信息通过json返回API,页面是这个样子的 按下F12之后,F5刷新一下 具体需要URL Request的方式为POST,还需要你提取的哪一页,下面 ...
- python爬取携程酒店信息_不写代码玩转爬虫实例(3) - 抓取携程酒店信息
背景需求 有不少朋友问永恒君携程网站的酒店信息怎么抓取,今天这篇文章来分享一下使用web scraper来快速实现抓取携程酒店信息. 例如,在携程官网搜索北京 密云水库的酒店信息, 可以搜索到非常多的 ...
最新文章
- Python树莓派编程1.2 探索树莓派
- python dict遍历_Python 容器(二):字典(Dict)
- [转载] Python中定义函数,循环语句,条件语句
- 从linux使用sz命令下载大于4g的文件到windows
- Linux上RandomAccessFile访问FTP文件出错
- chrome插件“京东商品佣金助手”之项目介绍(一)
- java供应商管理系统项目简介,基于jsp的供应商管理系统-JavaEE实现供应商管理系统 - java项目源码...
- Quantile-Quantile (q-q) Plots
- 如何将多张图片转换为pdf格式
- 如何下载微信公众号视频
- NCB:神经元线粒体应激记忆可通过mtDNA水平升高跨代遗传
- Codeforces 982E Billiard 扩展欧几里德
- html设置表单里面字体格式为中文,html设置字体样式 html怎么设置字体样式 html字体怎么设置...
- 如何优雅的解决”重复请求“问题
- 秦羽接引的鸿蒙第四人,星辰变:仙界最强的五人,秦羽第二,敖无虚垫底,小黑难进前三...
- SAP SM30实现表关键字段自增
- mysql 民族表_我国西北地区藏族.蒙古族等民族的藏传佛教格鲁派中心是( )。...
- 「TCG 规范解读」初识 TPM 的应用环境
- 使用ROT13加密解密
- 智能密集型仓储货架自动化立体库|四向穿梭式货架对于仓库空间面积上有什么要求?