使用python爬取携程网旅游信息(包含景点、酒店、美食)

其中本次爬虫的主要思想是:首先是找到携程网url的编写规律,然后根据规律使用beautifulsoup4对所需的html语言中的信息提取,最后就是封装处理。爬取的信息只是用来本次毕设的研究非商业用途。对于毕设的相关总结在:旅游推荐系统毕业设计总结(包含旅游信息爬取、算法应用和旅游推荐系统实现)

如下是我爬取美食的代码:

# -*- coding: utf-8 -*-
import requests
import io
from bs4 import BeautifulSoup as BS
import time
import re"""从网上爬取数据"""headers = {
"Origin": "https://piao.ctrip.com",
"User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/74.0.3729.169 Safari/537.36",
}
places=["beijing1","shanghai2","changsha148","sanya61","chongqing158","hongkong38","chengdu104","haerbin151",
"xian7","guangzhou152","hangzhou14"]
placenames=["北京","上海","长沙","三亚","重庆","香港","成都","哈尔滨","西安","广州","杭州"]places=["changsha148"]
placenames=["长沙"]base="https://you.ctrip.com/fooditem/";
base2="https://you.ctrip.com";
requestlist=[]for j in range(len(places)):  #爬取对应的特色菜requestlist.append({"url":base+places[j]+".html","place":placenames[j]})for i in range(2,2):tmp=base+places[j]+"/s0-p"+str(i)+".html"requestlist.append({"url":tmp,"place":placenames[j]});
#对应的url地址和所查询的位置
print(requestlist)
l=[]
count=1;
for i in range(len(requestlist)):response = requests.get(requestlist[i]["url"], headers=headers)#print(response)html=response.text#print(html)soup=BS(html,'html.parser')vs=soup.find_all(name="div",attrs={"class":"rdetailbox"})print("len(vs)",len(vs))for j in range(len(vs)):print("正在打印的条数:",j)try:#获取子网页链接地址href=vs[j].find(name="a",attrs={"target":"_blank"}).attrs["href"];#print("href",href)# 再次请求子网页,获取景点详细信息res = requests.get(base2+href, headers=headers)print("当前访问的网址:",base2+href)with open("3.html","w",encoding="utf-8") as f:f.write(res.text)soupi = BS(res.text,"html.parser") #该网页的html代码#print(soupi)vis = soupi.find_all(name="li",attrs={"class":"infotext"}); #获取此时的dom文件位置所在#print(vis)introduce=[]for i in range(len(vis)):introduce.append(vis[i].get_text())imgs=[];imglinks=soupi.find_all(name="a",attrs={"href":"javascript:void(0)"})#print(imte)# print(imglinks)# print(type(imglinks))#for img in imte:#imgs.append(img.attrs["src"])tmp={};tmp["id"]=count;tmp["name"]=vs[j].find(name="a",attrs={"target":"_blank"}).string;tmp["name"]=tmp["name"].replace(" ","").replace("\n","");tmp["introduce"]=introducetmp["img"]=imglinkstmp["city"]=requestlist[i]["place"]count=count+1;l.append(tmp);time.sleep(1);except Exception as e:print(e)pass#print ("打印tmp",tmp)# with open("datap/"+tmp["name"]+".pk",'wb') as f:# 	pickle.dump(tmp,f);with io.open("/Users/hujinhong/PycharmProjects/untitled5/food/changsha/"+tmp["name"]+".txt",'w',encoding="utf-8") as f:f.write(str(tmp))
#print(l)
for i in l:print((i))

成功的爬取如下数据:

爬取携程网景点代码如下:

# -*- coding: utf-8 -*-
import requests
import io
from bs4 import BeautifulSoup as BS
import time"""从网上爬取数据"""
headers = {
"Origin": "https://piao.ctrip.com",
"User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/74.0.3729.169 Safari/537.36",
}
places=["beijing1","shanghai2","changsha148","sanya61","chongqing158","hongkong38","chengdu104","haerbin151",
"xian7","guangzhou152","hangzhou14"]
placenames=["北京","上海","长沙","三亚","重庆","香港","成都","哈尔滨","西安","广州","杭州"]places=["beijing1"]
placenames=["北京"]
city="beijing"
base="https://you.ctrip.com/sight/";
base2="https://you.ctrip.com";
requestlist=[]for j in range(len(places)):  #一个景区爬10页requestlist.append({"url":base+places[j]+".html","place":placenames[j]})for i in range(2,4):tmp=base+places[j]+"/s0-p"+str(i)+".html"requestlist.append({"url":tmp,"place":placenames[j]});
print(requestlist)
l=[]
count=1;
for i in range(len(requestlist)):response = requests.get(requestlist[i]["url"], headers=headers)html=response.textsoup=BS(html,'html.parser')vs=soup.find_all(name="div",attrs={"class":"rdetailbox"})print(len(vs))for j in range(len(vs)):print(j)try:#获取子网页链接地址href=vs[j].find(name="a",attrs={"target":"_blank"}).attrs["href"];# 再次请求子网页,获取景点详细信息res = requests.get(base2+href, headers=headers)print(base2+href)with open("3.html","w",encoding="utf-8") as f:f.write(res.text)soupi = BS(res.text,"html.parser")vis = soupi.find_all(name="div",attrs={"class":"text_style"});introduce=[]for i in range(len(vis)):introduce.append(vis[i].get_text())imgs=[];imglinks=soupi.find_all(name="img",attrs={"width":"350"})#print(imglinks)for img in imglinks:imgs.append(img.attrs["src"])score=soupi.find(name="span",attrs={"class":"score"}).b.get_text()scores=[];scores.append(score);scorelinks=soupi.find(name="dl",attrs={"class":"comment_show"}).find_all(name="dd")for link in scorelinks:scores.append(link.find(name="span",attrs={"class":"score"}).string)comments=[];commentlinks=soupi.find_all(name="span",attrs={"class":"heightbox"});for link in commentlinks:comments.append(link.get_text())tmp={};tmp["id"]=count;tmp["name"]=vs[j].find(name="a",attrs={"target":"_blank"}).string;tmp["name"]=tmp["name"].replace(" ","").replace("\n","");tmp["introduce"]=introducetmp["score"]=scores;tmp["position"]=vs[j].find_all(name="dd",attrs={"class":"ellipsis"})[0].string;tmp["position"]=tmp["position"].replace(" ","").replace("\n","");tmp["img"]=imgstmp["city"]=citytmp["grade"]=soupi.find_all(name="span", attrs={"class": "s_sight_con"})[0].get_text()tmp["grade"]=tmp["grade"].replace(" ","").replace("\n","")#tmp["fujin"]=soupi.find_all(name="a", attrs={"class": "item"})count=count+1;l.append(tmp);time.sleep(1);except Exception as e:print(e)passprint ("打印tmp",tmp)# with open("datap/"+tmp["name"]+".pk",'wb') as f:# 	pickle.dump(tmp,f);with io.open("/Users/hujinhong/PycharmProjects/untitled5/jingdian/beijing/"+tmp["name"]+".txt",'w',encoding="utf-8") as f:f.write(str(tmp))
print(l)
# # browser.close()#关闭浏览器
# with open("data2.txt",'w',encoding='utf-8') as f:
# 	f.write(str(l))
# with open("data2.pk","w",encoding="utf-8") as f:
# 	pickle.dump(l,f);
#https://hotels.ctrip.com/hotel/qingdao7/star2/k1%E4%BA%94%E5%9B%9B%E5%B9%BF%E5%9C%BA#ctm_ref=ctr_hp_sb_lst

成功爬取到携程网的景点,截图如下:

爬取酒店信息代码

# -*- coding: utf-8 -*-
import requests
import io
from bs4 import BeautifulSoup as BS
import time"""从网上爬取数据"""headers = {
"Origin": "https://piao.ctrip.com",
"User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/74.0.3729.169 Safari/537.36",
}
places=["beijing1","shanghai2","Changsha206","sanya61","chongqing158","hongkong38","chengdu104","haerbin151",
"xian7","guangzhou152","Hangzhou17"]
placenames=["北京","上海","长沙","三亚","重庆","香港","成都","哈尔滨","西安","广州","杭州"]places=["Hangzhou17"]
placenames=["杭州"]
numid=17
base="https://hotels.ctrip.com/hotel/";
base2="https://you.ctrip.com";
requestlist=[]for j in range(len(places)):  #爬取对应的特色菜requestlist.append({"url":base+places[j]+".html","place":placenames[j]})for i in range(2,4):tmp=base+places[j]+"/s0-p"+str(i)+".html"requestlist.append({"url":tmp,"place":placenames[j]});
#对应的url地址和所查询的位置
print(requestlist)l=[]
count=1;
for i in range(len(requestlist)):response = requests.get(requestlist[i]["url"], headers=headers)#print(response)html=response.text#print(html)soup=BS(html,'html.parser')print(soup)vs=soup.find_all(name="div",attrs={"class":"hotel_new_list"})print("len(vs)",vs)for j in range(len(vs)):print("正在打印的条数:",j)try:daid=vs[j].find(name="h2",attrs={"class":"hotel_name"}).attrs["data-id"]#ss=vs[j].find(name="a",attrs={"data-dopost":"T"}).attrs["title"]#print("ss",ss)#print(type(daid))#print(type(j))#获取子网页链接地址href1="https://hotels.ctrip.com/hotel/"+daid+".html?isFull=F"print(daid)href=href1+"&masterhotelid="+daid+"&hcityid="+str(numid)+"#ctm_ref=hod_sr_lst_dl_n_2_"+str(j+1);print("href",href)# 再次请求子网页,获取景点详细信息res = requests.get(href, headers=headers)#print("当前访问的网址:",base2+href)with open("3.html","w",encoding="utf-8") as f:f.write(res.text)soupi = BS(res.text,"html.parser") #该网页的html代码#print(soupi)vis = soupi.find_all(name="div",attrs={"class":"hotel_info_comment"}); #获取此时的dom文件位置所在#print(vis)introduce=[]for i in range(len(vis)):introduce.append(vis[i].get_text())imgs=[];imglinks=soupi.find(name="div",attrs={"data-index":"0"}).attrs["_src"];print(type(soupi.find(name="div",attrs={"data-index":"0"})))#print(soupi)#print(imte)print(imglinks)tmp={};tmp["id"]=count;tmp["name"]=vs[j].find(name="a",attrs={"data-dopost":"T"}).attrs["title"];#函数是这种小括号,字典的话应该就是中括号tmp["name"]=tmp["name"].replace(" ","").replace("\n","");tmp["introduce"]=introducetmp["img"]=imglinkstmp["city"]=placenamescount=count+1;l.append(tmp);time.sleep(1);except Exception as e:print(e)passprint ("打印tmp",tmp)# with open("datap/"+tmp["name"]+".pk",'wb') as f:# 	pickle.dump(tmp,f);# with io.open("/Users/hujinhong/PycharmProjects/untitled5/hotle/hangzhou/"+tmp["name"]+".txt",'w',encoding="utf-8") as f:# 	f.write(str(tmp))
print(l)
# # browser.close()#关闭浏览器
# with open("data2.txt",'w',encoding='utf-8') as f:
# 	f.write(str(l))
# with open("data2.pk","w",encoding="utf-8") as f:
# 	pickle.dump(l,f);
#https://hotels.ctrip.com/hotel/qingdao7/star2/k1%E4%BA%94%E5%9B%9B%E5%B9%BF%E5%9C%BA#ctm_ref=ctr_hp_sb_lst

爬取信息截图如下:

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/35287.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

基于PHP的旅游资讯管理系统

有需要请私信或看评论链接哦 可远程调试 基于PHP的旅游资讯管理系统 一 介绍 此旅游资讯系统基于原生PHP开发,数据库mysql,前端bootstrap,前后端分离。系统角色分为用户和管理员,用户可注册登录,预订旅行行程&#x…

旅游网站、旅游系统

旅游网站 摘要:在社会快速发展的影响下,旅游网站继续发展,大大增加了旅游的数量、多样性、质量等等的要求,使旅游网站的管理和运营比过去十年更加简单化。依照这一现实为基础,设计一个快捷而又方便的网上旅游网站是一项…

麒麟水乡,IU酒店进驻云南旅游咽喉之地曲靖

曲靖位于云南省东北部,是云南连接内地的重要陆路通道,素有“滇黔锁钥”、“入滇门户”、“云南咽喉”之称,是仅次于昆明的云南第二大城市。曾入选“中国十佳宜居城市”榜单10次的城市,拥有3000多年的文明史,早在三国魏…

Python抓取全国旅游景点以及小吃数据,想做旅游攻略?Python助你事半功倍。

前言 疫情自从来了之后已经很久没有出去旅游过了,蹭着这段疫情好转,那肯定是要出去走一走的,这一篇其实是全国旅游中的一站,因为每个城市能玩的地方太多了,一篇文章下来肯定是写不了的,所以今天就抓取一下—…

对去哪儿旅行(功略库)的数据分析

选题背景 去哪儿旅行网站上有丰富的图片,旅行数据以及评论数据,用这些大量的数据来学习数据采集及可视化分析是一个不错的选择 网页分析 可以获取的数据 通过翻阅这些攻略我们可以观察到网站上展示了以下共有的数据:文章标题,…

基于Python的云南旅游景点分析

作为一名云南人,作为一名数据分析人员,我将在本次用Python来给大家介绍云南的相关景点! 欢迎大家来云南旅游哦!资料含各地景点的数据,希望大家学习之后进行相关的练习,学有所成! 所需的资料我…

Android程序员面试5分钟自我介绍法

有简历,为何还要自我介绍? 要回答这个问题,首先搞清楚为什么面试官要请你做自我介绍?面试官通过自我介绍想考察被面试者什么?只有了解面试官的目的,被面试者才能做好自我介绍。 面试官通过被面试者自我介绍…

刷完这份2023年Android中高级最全面试真题答案解析,拿到offer几率提升50%

前言 今年以来,经济回暖,但行业岗位缺口紧缩的趋势恢复还需一段时间。尤其对于Android开发而言,想要跳槽到一个高薪岗位更是难上加难。 因此,想要杀出重围,必然要有万全的准备。除了一份美观的简历,刷一刷…

靠这份35w字Java面试题,终于收到字节Java开发岗满意Offer了!

靠这份35w字Java面试题,终于收到字节Java开发岗满意Offer了! 前天面Java PDD一面挂 美团一面挂 寄 美团全程Java八股文 字节40分钟八股文10分钟算法题,算法题是个普通的middle,没啥问题。 但是,八股跨度大且精细,寄。…

7个实用的Python自动化代码

关于Python有一句名言:不要重复造轮子 但是问题有三个: 1、你不知道已经有哪些轮子已经造好了,哪个适合你用。有名有姓的的著名轮子就400多个,更别说没名没姓自己在制造中的轮子 2、确实没重复造轮子,但是在重复制造…

创建用户账户

这一节内容我们来一起学习Linux中有关于用户身份及文件权限的内容。在windows中,我们可以通过图形化界面去创建及管理用户,但在Linux系统中,我们习惯用命令的方式去创建以及管理用户。 以上两图是windows系统中,如何创建用户以及管…

跨境电商卖家应该知道的3个社交媒体营销策略

关键词:跨境电商卖家、社交媒体营销 社交媒体是获取、吸引和留住客户的强大营销渠道。普通人拥有超过八个社交媒体帐户,使用每个平台参与社区,发现新产品并与朋友和家人保持联系。 社交媒体最强大的方面是,您的目标受众只需点击几…

人工智能时代,职场中的你是否真不可替代?用Python玩转ChatGPT

最近一段时间,ChatGPT在网络上很火。小伙伴们在感叹这款神奇的聊天机器人强大功能的同时。不知不觉会发现,我们已经被莫名其妙地带入到一个人工智能时代。 不管你愿不愿意承认,实事就是如此。相信很多小伙伴都很想体验一把这个智能应用&#…

2023年,总要干点不一样的事情

2020年——不寻常的一年,但我还是启动了两个新项目: 开设 “高效敏捷测试49讲” 专栏 (文字语音),后来形成了图书《敏捷测试:以持续测试促进持续交付》。 发起并成功举办了 全球软件质量效能大会&#xff0…

AIGC最近很火,给大家推荐一个已经有1000位开发者使用的中文aigc开源模型,包括ai画图、ai聊天

AIGC最近火得一塌糊涂! 12月16日,Science发布2022年度科学十大突破,其中AIGC作为人工智能领域的重要突破也赫然在列。 作为2022年以来AI圈最大的趋势,AIGC意味着,AI进军到了此前被视为“人类独占”的领域,如…

笔记本就能运行的ChatGPT平替来了,附完整版技术报告(附github代码)

关注并星标 从此不迷路 计算机视觉研究院 公众号ID|ComputerVisionGzq 学习群|扫码在主页获取加入方式 计算机视觉研究院专栏 作者:Edison_G GPT4All 是基于大量干净的助手数据(包括代码、故事和对话)训练而成的聊天机…

开源的短视频生成和编辑工具 Open Chat Video Editor

GitHub - SCUTlihaoyu/open-chat-video-editor: Open source short video automatic generation tool

Android 实现图文混排

Android 实现图文混排 需求: 在文字中间添加图片或者在文字后面添加图片;文字换行后,图片在第二行的后面;图片加点击事件,文字没有点击事件。 实现方案: 使用TextView Imageview实现,第1点…

IDEA2020 安装教程,图文教程

1、下载IDEA 首先在官网下载IDEA,官网下载地址为:IDEA下载地址 我这里选择的是Ultimate版本 IDEA各版本的区别: Community 社区版,免费,但是功能有限制,Android Studio就是基于这个版本定制的。 Ultimate …

手机剪映app图文成片功能怎么用

剪映作为一款简易的剪辑工具。很多小伙伴都在使用。近期软件更是为了让大家方便剪辑推出了图文成片功能。想知道怎么使用吗?那就千万不要错过本期内容哦~ 剪映新功能图文成片介绍 通过该功能。用户们只要输入一段文字。软件就能智能为大家匹配图片素材、添加字幕、…