该楼层疑似违规已被系统折叠 隐藏此楼查看此楼

import urllib.request

from bs4 import BeautifulSoup

import csv

import re

def openlink(link):

maxTryNum=20

for tries in range(maxTryNum):

try:

response = urllib.request.urlopen(link).read().decode('utf-8')

return response

except:

if tries < (maxTryNum-1):

continue

else:

print("Has tried %d times to access url %s, all failed!", maxTryNum, link)

return None

break

cityurl='http://hotels.ctrip.com/jiudian/neimenggu'

cityhtml = openlink(cityurl)

citysoup = BeautifulSoup(cityhtml, 'html.parser')

city_list = citysoup.find_all('ul', attrs={"class":"p_n_list grid_8"})

citysoup1 = BeautifulSoup(str(city_list), 'html.parser')

city_list1 = citysoup1.find_all('a', attrs={"href":True})

city_id=[]

for city in city_list1:

city_id1 = city['href']

city_id.append(city_id1)

print(city_id)

for cityid in city_id[13:14]:

cityname=re.findall(r"/([a-z]+?)[0-9]",cityid)

csvFile2 = open('Hotel'+str(cityname)+'.csv','w', newline='',encoding='utf-8-sig') # 设置newline,否则两行之间会空一行

writer = csv.writer(csvFile2)

data1=['所属盟市', '所属旗县', '酒店名称', '星级', '房间数', '开业年份', '地址', '联系方式']

data=[data1]

m = len(data)

for i in range(m):

writer.writerow(data[i])

print('programbegin..................................................................')

pagecounturl='http://hotels.ctrip.com'+cityid

print(pagecounturl)

pagecounthtml = openlink(pagecounturl)

#1.获取酒店名称信息

pagecountsoup = BeautifulSoup(pagecounthtml,'html.parser')

page_count = pagecountsoup.find_all(attrs={"data-pagecount":True})

for count in page_count:

pagecount=count['data-pagecount']

print(pagecount)

for k in range(1,int(pagecount)+1):

print("***正在抓取第"+str(k)+"页********")

pageurl=''

hotel_id=[]

pageurl='http://hotels.ctrip.com'+cityid+'/p'+str(k)

print(pageurl)

paghtml=openlink(pageurl)

#1.获取酒店名称信息

if paghtml==None:

with open('Pageerror.txt', 'a+') as f:

f.write(pageurl+'\n')

continue

pagesoup = BeautifulSoup(paghtml,'html.parser')

hotel_list = pagesoup.find_all("h2",attrs={"data-id":True})

for hotel in hotel_list:

hotel_id1=hotel['data-id']

hotel_id.append(hotel_id1)

print("hotel_id是...............................................................:")

print(hotel_id,len(hotel_id)+1)

result=[]

for i in range(1,len(hotel_id)+1):

url1=''

result0=[]

# url1='http://hotels.ctrip.com/hotel/'+hotel_id[i-1]+'.html?isFull=F#ctm_ref=hod_sr_lst_dl_n_'+str(k)+'_'+str(i) #为爬取的当前页面的网址,

#num[i]为每个页面网址id,'.html?isFull=F#ctm_ref=hod_sr_lst_dl_n_2_'需要修改2为3,4,等等,#str(i)是个数

url1='http://hotels.ctrip.com/hotel/'+hotel_id[i-1]+'.html?isFull=F'

print(url1)

html1 = openlink(url1)

#1.获取酒店名称信息

if html1==None:

with open('Hotelerror.txt', 'a+') as f1:

f.write(url1+'\n')

continue

soup1 = BeautifulSoup(html1,'html.parser')

print("soup1是:")

result1 = soup1.find_all('h1')

print("result1是:")

print(result1)

hotelName = result1[0].string

print("酒店名称为:{}".format(hotelName))

print(i)

#2.获取酒店位置

soup12 = BeautifulSoup(html1,'html.parser')

result12 = soup12.find_all(attrs={"class":"adress"})

hotelAdress_m = result12[0].get_text().split('\n')[1]

hotelAdress_q = result12[0].get_text().split('\n')[2]

hotelAdress_a = result12[0].get_text().split('\n')[3]

print("酒店所属盟市为:{}".format(hotelAdress_m))

print("酒店所属旗县为:{}".format(hotelAdress_q))

print("酒店地址为:{}".format(hotelAdress_a))

#3.获取酒店房间数

soup13 = BeautifulSoup(html1,'html.parser')

result13 = soup13.find_all(attrs={"class":"htl_room_txt text_3l"})

result13 =str(result13)

soup14 = BeautifulSoup(result13,'html.parser')

result14 = soup14.find_all('p')

print(result14[0].get_text().strip().split('\n')[0].split('\xa0\xa0'))

hotel_inform=result14[0].get_text().strip().split('\n')[0]

regex_str1 = ".*?([0-9]+年开业)"

regex_str2 = ".*?([0-9]+间房)"

match_obj1 = re.match(regex_str1,str(hotel_inform))

match_obj2 = re.match(regex_str2,str(hotel_inform))

if match_obj1:

hotelStartbussi = match_obj1.group(1)[:-3]

print("酒店开业年份为:{}".format(hotelStartbussi))

else:

hotelStartbussi ="无"

print("酒店开业年份为:{}".format(hotelStartbussi))

match_ob2 = re.match(regex_str2,str(hotel_inform))

if match_obj2:

hotelRoomnum = match_obj2.group(1)[:-2]

print("酒店房间数为:{}".format(hotelRoomnum))

else:

hotelRoomnum ="无"

print("酒店开业年份为:{}".format(hotelStartbussi))

# 4.获取酒店床位数

# 5.获取酒店电话

result15 = soup14.find_all('span')

if 'data-real' in str(result15[0]):

hotelContacter=result15[0]['data-real'].split('

print("酒店联系方式为:{}".format(hotelContacter))

else:

hotelContacter='无'

print("酒店联系方式为:{}".format(hotelContacter))

# 6.星级

soup16 = BeautifulSoup(html1,'html.parser')

result16 = soup16.find_all(attrs={"class":"grade"})

result16 =str(result16)

soup17 = BeautifulSoup(result16,'html.parser')

result17 = soup17.find_all('span')

if 'title' in str(result17[0]):

hotelStar = result17[0]['title']

print("酒店星级为:{}".format(hotelStar))

else:

hotelStar ='无'

print("酒店星级为:{}".format(hotelStar))

result0=[format(hotelAdress_m),format(hotelAdress_q),format(hotelName),format(hotelStar),format(hotelRoomnum),format(hotelStartbussi),format(hotelAdress_a),format(hotelContacter)]

result.append(result0)

for j in range(0,len(result)):

data1=[result[j]]

m1 = len(data1)

for j1 in range(m1):

writer.writerow(data1[j1])

csvFile2.close()

python爬虫携程酒店_携程酒店爬取分享相关推荐

  1. python爬虫搜狐新闻_应用案例2:爬取搜狐体育的新闻信息

    爬虫学习使用指南 Auth: 王海飞 Data:2018-06-25 Email:779598160@qq.com github:https://github.com/coco369/knowledg ...

  2. python怎么爬取b站_【Python爬虫实例学习篇】——4、超详细爬取bilibili视频

    [Python爬虫实例学习篇]--4.超详细爬取bilibili视频 由于经常在B站上学习,但无奈于家里网络太差,在线观看卡顿严重,于是萌生了下载视频的想法(如果只是单纯想下载视频,请用you-get ...

  3. Python爬虫: 单网页 所有静态网页 动态网页爬取

    Python爬虫: 单网页 所有静态网页 动态网页爬取 前言:所有页代码主干均来自网上!!!感谢大佬们. 其实我对爬虫还挺感兴趣的,因为我玩instagram(需要科学上网),上过IG的人都知道IG虽 ...

  4. Python爬虫新手入门教学(十七):爬取yy全站小视频

    前言 本文的文字及图片来源于网络,仅供学习.交流使用,不具有任何商业用途,如有问题请及时联系我们以作处理. Python爬虫.数据分析.网站开发等案例教程视频免费在线观看 https://space. ...

  5. Python爬虫新手入门教学(十):爬取彼岸4K超清壁纸

    前言 本文的文字及图片来源于网络,仅供学习.交流使用,不具有任何商业用途,如有问题请及时联系我们以作处理. Python爬虫.数据分析.网站开发等案例教程视频免费在线观看 https://space. ...

  6. python爬虫实战之图灵社区图书信息的爬取(找了久,才找到一个比较好爬取的网站)

    python爬虫实战之图灵社区图书信息的爬取 程序的描述 目标 获取图灵社区(https://www.ituring.com.cn/book)中40本图书的书名 将获取的信息以列表的形式输出到屏幕上, ...

  7. Python爬虫新手入门教学(十三):爬取高质量超清壁纸

    前言 本文的文字及图片来源于网络,仅供学习.交流使用,不具有任何商业用途,如有问题请及时联系我们以作处理. Python爬虫.数据分析.网站开发等案例教程视频免费在线观看 https://space. ...

  8. Python爬虫新手入门教学(二):爬取小说

    前言 本文的文字及图片来源于网络,仅供学习.交流使用,不具有任何商业用途,如有问题请及时联系我们以作处理. Python爬虫.数据分析.网站开发等案例教程视频免费在线观看 https://space. ...

  9. Python爬虫初级(十三)—— 水木社区论坛爬取实战

    欢迎关注公众号K的笔记阅读博主更多优质学习内容 上一篇文章:Python爬虫初级(十二)-- 新闻消息抓取实战 实战阶段一:分析首页大板块 URL 我们首先打开待爬取页面 -- 水木社区的首页:htt ...

  10. python爬虫实例电商_如何用代码爬抓电商数据(附淘宝API调用实例)

    原标题:如何用代码爬抓电商数据(附淘宝API调用实例) 欢迎关注天善智能 hellobi.com,我们是专注于商业智能BI,大数据,数据分析领域的垂直社区,学习.问答.求职,一站式搞定! 对商业智能B ...

最新文章

  1. 重磅直播|立体视觉之立体匹配理论与实践​
  2. python经典100例答案pdf-Python3基础训练经典100题(带答案)下载
  3. cocos2dx游戏开发必备工具之PhysicsEditor【ZT】
  4. 算法导论5:基数排序和计数排序 2016.1.5
  5. 精通JavaScript攻击框架:AttackAPI
  6. 一个带新闻,天气的时钟Widget(三)---Webservices篇
  7. 002 Servlet 第一个程序
  8. 决策树留一法python代码_ScikitLearn决策树算法类库使用小结
  9. 解决 Package test is missing dependencies for the following libraries: libcrypto.so.1.0.0
  10. 算法笔记_094:蓝桥杯练习 矩阵相乘(Java)
  11. A Simple Math Problem (矩阵快速幂)
  12. 不想买Xbox?没关系,微软正打算让你在电视上也能玩游戏
  13. MacBook如何配置环境变量
  14. 电脑系统怎么修改图片格式
  15. 阻焊机器人系统_点焊机器人
  16. 同名的同义词和视图解惑
  17. JS实现数组/对象扁平化
  18. 如何将HL7转换为XML
  19. 教你三分钟上手阿里云OOS上传操作
  20. Linux性能测试工具之Disk(四)

热门文章

  1. c语言编程订单统计,C语言课程设计订单管理系统.pdf
  2. 浅谈人工智能的伦理问题
  3. Android中从视频中提取音频
  4. vim 删除文件单行或多行内容
  5. 【智能无线小车系列十】智能小车一体化测试
  6. 【LaTeX教程】九.Latex常见数学公式模板
  7. # MASA MAUI Plugin (十)iOS消息推送(原生APNS方式)
  8. 我国AIS信息服务平台上线 东方通大数据处理亿级报文
  9. Springboot整合JPA多数据源(Oracle+Mysql)
  10. XL4015-ADJ 5A 大电流DC-DC原理图分享