昨天花了一天时间写的,改来改去,不断提升性能,终于可以把代码放出来了,如果发现服务域名无效,只需要更改Origin为http形式就行。

import csvimport requests
from bs4 import BeautifulSoup as bs
from  multiprocessing import Pool
import  gevent,timeclass Comment(object):#请求头headers = {"Cookie":"_abtest_userid=dc18ac38-f25f-488b-8535-e709964f2257; gad_city=a4f35f7b1b0a14c597bf3a50fb024f55; MKT_Pagesource=PC; _ga=GA1.2.7662667.1551412569; _gid=GA1.2.815726266.1551412569; _RSG=Wd46GhfGxU6uCJw.ghACmB; _RDG=2808fbf74f24dd23c52c70ca0da70efd1f; _RGUID=67bb429a-d018-49e0-bc0c-2ababee93338; appFloatCnt=25; manualclose=1; TicketSiteID=SiteID=1006; StartCity_Pkg=PkgStartCity=1; Session=smartlinkcode=U130026&smartlinklanguage=zh&SmartLinkKeyWord=&SmartLinkQuary=&SmartLinkHost=; Union=AllianceID=4897&SID=130026&OUID=&Expires=1552049736787; ASP.NET_SessionSvc=MTAuOC4xODkuNjJ8OTA5MHxqaW5xaWFvfGRlZmF1bHR8MTU1MDU2ODM3MDEyOQ; _gat=1; Mkt_UnionRecord=%5B%7B%22aid%22%3A%224897%22%2C%22timestamp%22%3A1551490732614%7D%5D; _RF1=125.88.24.39; _jzqco=%7C%7C%7C%7C%7C1.89900671.1551412570377.1551490727886.1551490732641.1551490727886.1551490732641.0.0.0.187.187; __zpspc=9.12.1551487431.1551490732.14%232%7Cwww.baidu.com%7C%7C%7C%7C%23; _bfi=p1%3D290510%26p2%3D290510%26v1%3D228%26v2%3D226; _bfa=1.1551412564624.2kwvv2.1.1551451759831.1551487429617.7.229; _bfs=1.25","Host": "you.ctrip.com","Origin": "https://you.ctrip.com","User-Agent":"Mozilla/5.0 (Macintosh; Intel Mac OS X 10_12_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/71.0.3578.98 Safari/537.36"}def __init__(self,url):self.url =urldef request(self,poiID,districtEName,Filename):data = {"poiID": poiID,"districtEName": districtEName,"districtId": 152,"pagenow": 1,"order": 3.0,"star": 0.0,"tourist": 0.0,"resourceId": 6766,"resourcetype": 2}response = requests.post(url=self.url,headers=Comment.headers,data=data)print(response.status_code)if response.status_code == 404:print(Filename+"Nodone!")returnsoup = bs(response.text,"lxml")self.WriteScore(soup,Filename)pagenum = self.getPageNum(soup)pagenum = int(pagenum.get_text())print(Filename+"正在采集...")try:gevent.joinall([gevent.spawn(self.writeCommentInformation,j,poiID, districtEName,Filename) for j in range(pagenum)])except Exception as e:print(e)print("error--------")#获取数据def getCommentInformation(self,page,poiID,districtEName):#请求数据包data = {"poiID": poiID, #景区id"districtEName": districtEName, #区域名字"districtId": 152,"pagenow": page,"order": 3.0,"star": 0.0,"tourist": 0.0,"resourceId": 6766,"resourcetype": 2}response = requests.post(url=self.url,headers=Comment.headers,data=data)soup = bs(response.text, "lxml")#返回作者,日期,评论return  [author.get_text() for author in soup.find_all(name="a",attrs={"itemprop":"author"})],\[ date.get_text() for date in soup.find_all(name="em", attrs={"itemprop": "datePublished"})],\[ comment.get_text() for comment in soup.find_all(name="span", attrs={"class": "heightbox"})]# 获取综合,景色 趣味 性价比分数def getSocre(self,soup):return  [score.get_text() for score in soup.find_all(name="span",attrs={"class":"score"})]#写入数据def writeCommentInformation(self,i, poiID, districtEName,FileName):author,date,comment=self.getCommentInformation(i, poiID, districtEName)print(FileName+str(i)+"页采集完毕--"+str(len(author)))if len(author)==0:returnwith open("/Volumes/Tigo/Data/"+FileName+".csv","a+",encoding="utf-8") as f:w = csv.writer(f)w.writerows(list(zip(author,date,comment)))def getPageNum(self,soup):return soup.find(name="b",attrs={"class":"numpage"})#写入景区评分def WriteScore(self,soup,Filename):filewriteScore = open("/Volumes/Tigo/Data/" + Filename+"评分" + ".csv", "a+", encoding="utf-8")writeFile = csv.writer(filewriteScore)l = []l.append(Filename)l.extend(self.getSocre(soup))writeFile.writerow(l)filewriteScore.close()if __name__=="__main__":url = "http://you.ctrip.com/destinationsite/TTDSecond/SharedView/AsynCommentView" #数据请求地址---固定不变的,只需要改变请求数据包就行c = Comment(url)pool = Pool(5)with open("/Volumes/Tigo/RequestsData.csv","r") as f: #从文件中读取景区id和区域名r = csv.reader(f)for i in r:pool.apply_async(func=c.request,args=(i[2],i[4],i[0],))pool.close()pool.join()

数据集在这里:

https://github.com/LianZS/SpyderPro/blob/master/RequestsData.xlsx

高性能爬取携程网景区评论数据相关推荐

  1. python爬取抖音用户评论_python实现模拟器爬取抖音评论数据的示例代码

    目标: 由于之前和朋友聊到抖音评论的爬虫,demo做出来之后一直没整理,最近时间充裕后,在这里做个笔记. 提示:大体思路 通过fiddle + app模拟器进行抖音抓包,使用python进行数据整理 ...

  2. python爬淘宝app数据_一篇文章教会你用Python爬取淘宝评论数据(写在记事本)

    [一.项目简介] 本文主要目标是采集淘宝的评价,找出客户所需要的功能.统计客户评价上面夸哪个功能多,比如防水,容量大,好看等等. [二.项目准备工作] 准备Pycharm,下载安装等,可以参考这篇文章 ...

  3. Python爬取京东商品评论数据

    一.前言 本文将承接笔者的上篇文章Python爬取京东商品数据,使用京东商品唯一id字段"sku"拼接url,得到真实的京东商品评论网址,进而解释数据并保存到文件中,所爬取到的数据 ...

  4. python 爬虫动态网页的区别_Python开发爬虫之动态网页抓取篇:爬取博客评论数据——通过Selenium模拟浏览器抓取...

    区别于上篇动态网页抓取,这里介绍另一种方法,即使用浏览器渲染引擎.直接用浏览器在显示网页时解析 HTML.应用 CSS 样式并执行 JavaScript 的语句. 这个方法在爬虫过程中会打开一个浏览器 ...

  5. python动态页面元素爬取_Python开发爬虫之动态网页抓取篇:爬取博客评论数据——通过浏览器审查元素解析真实网页地址...

    由于主流网站都使用JavaScript展示网页内容,和前面简单抓取静态网页不同的是,在使用JavaScript时,很多内容并不会出现在HTML源代码中,而是在HTML源码位置放上一段JavaScrip ...

  6. Python开发爬虫之动态网页抓取篇:爬取博客评论数据——通过浏览器审查元素解析真实网页地址...

    由于主流网站都使用JavaScript展示网页内容,和前面简单抓取静态网页不同的是,在使用JavaScript时,很多内容并不会出现在HTML源代码中,而是在HTML源码位置放上一段JavaScrip ...

  7. (2020)使用Airtest来爬取某宝评论数据

    本帖子背景:本帖子,是一个学习的过程.一个爬取某宝评论的小单子,促使我前来学习简单的.不用掉头发的.不用爆肝的(再说,我也没那能力去硬干它啊)教程 昨天晚上,大学四年的舍友微信问我"说还搞爬 ...

  8. Python爬取豆瓣电影评论数据(通用模板代码)----以《中国医生》为例

    中国医生豆瓣电影评论获取 1 前言 2 数据源分析 3数据爬取(代码实现) 4 结果展示 1 前言   豆瓣是影迷评分.非视频网站,也非购票平台,能长期专门使用豆瓣标记.评价电影的,相对来说是属于影迷 ...

  9. 如何写一个python程序浏览淘宝_一篇文章教会你用Python爬取淘宝评论数据(写在记事本)...

    [一.项目简介] 本文主要目标是采集淘宝的评价,找出客户所需要的功能.统计客户评价上面夸哪个功能多,比如防水,容量大,好看等等. [二.项目准备工作] 1. 准备Pycharm,下载安装等,可以参考这 ...

最新文章

  1. Define in the var of function
  2. 自己动手制作笔记本SP2系统安装光盘
  3. vim循环下表复制_Vim求生手册,让你离“Vim党”更近一步!
  4. icp点云匹配迭代最近邻算法
  5. ES5、ES6、ES7、ES8
  6. 编辑器js获取浏览器高度和宽度值(转)
  7. 《MySQL——主备一致性六问六答》
  8. 编程不仅是写代码!?
  9. Uva 10305 - Ordering Tasks
  10. pythonrequests库使用方法_python三方库之requests-快速上手
  11. java中逗号分隔的字符串和List相互转换
  12. 简述与oracle相关的程序组,oracle数据库复习程序.doc
  13. 将阿拉伯数字转换为语文汉字数字
  14. 数据库原理 | 第2章 关系运算习题
  15. P3369 普通平衡树模板 treap
  16. python实现1分钟内股价波动邮件提示
  17. 酒精传感器与单片机的衔接
  18. JAVA练习题库/JAVA面试题库
  19. logback出现大量XXX_IS_UNDEFINED日志文件的问题
  20. 高德地图手机端定位偏移问题

热门文章

  1. linux终端教程,Linux终端命令
  2. 【MM小贴士】SAP内询报价标准功能的使用
  3. 2009年山西省各市GDP排名、城镇居民人均可支配收入排名、农民人均纯收入排名...
  4. 2021物联网产业链全景图谱(附PDF下载)
  5. mysql数据库怎么查看性能_mysql如何查看数据库性能
  6. 同余方程组有解的充要条件
  7. winrar解压器_你真的很需要一个解压压缩软件
  8. Jmeter并发测试 - 设置集合点
  9. Win10启动Telnet方式
  10. STM32通过DAC输出音频波形