功能说明:爬取去哪儿网城市下面若干条景点详细信息并将数据导入Excel表(使用xlwt库)

爬取去哪儿网的教程参考自 https://blog.csdn.net/gscsd_t/article/details/80836613

xlwt库使用方法参考自: https://my.oschina.net/dddttttt/blog/466103

第一次学爬虫,代码可能写得不太好,注释比较详细,勉强能看吧....

爬取景点的程序大致是参考上面教程的,只不过我自己增加了一些爬取的数据,改了下爬取范围,然后那个教程里面是把爬取的数据写到mysql数据库里,我这里是写到excel表格中。

上面教程已经把爬虫过程说的比较清楚了,这里再简单叙述一遍补充下,顺便加深下印象(下面是爬取结果)

上图:去哪儿网北京景点截图

上图:爬取结果(表格的样式是我为了好看手动加的,代码里并没有,要想有的话可以用xlwt来设置)

下面开始教程。

先去http://piao.qunar.com/ticket/list.htm?keyword=%E6%88%90%E9%83%BD&region=%E6%88%90%E9%83%BD&from=mpshouye_hotcity,或者其它任意一个城市页面里,打开调试工具,刷新,查看第一个请求的html页面,点开看里面的请求头,

把User-Agent那段复制粘贴下来,当做python请求的header,这样就能伪装成浏览器访问服务器,绕过最简单的一个反爬虫机制。

要爬取的是北京,上海,成都,三亚等若干个热门城市。首先需要获取它们的url,每个城市都是一个li标签,里面的a标签对于的href属性就能拿到url中的地址,再拼接上去哪儿的主机名就是完整url,然后一个for循环遍历每个城市进行解析。

特别注意:‘keyword=成都&region=成都’这部分python获取到后在控制台打印变成了keyword=成都®ion=成都,估计可能是因为有些特殊符号编码的问题,比如&会编码成& 不过具体我也不太懂,所以这里就直接用字符串替换把®替换回去了。

点开某一个景点比如成都,滑动到最下面打开浏览器的开发工具,选中任意页码,就出现上图信息,可以看到,每一页的信息封在类似http://piao.qunar.com/ticket/list_%E6%88%90%E9%83%BD_%E6%88%90%E9%83%BD.html?from=mpshouye_hotcity&page=5 的url中,最后参数的page就代表页码,所以如果需要前5页数据,就for循环5次,每次url修改page的值即可得到对于页面地址,然后再去解析每页数据即可

如上图,每一个景点都是一个class为sight_item的div标签,所以直接用beautifulSoup的find_all就可以查找到所有对应标签, 再一个for循环处理每个景点sight,再用类似的方法去看每个景点想爬的信息在什么标签下面直接去取就是。

最后用xlwt提供的write(rowIndex,colIndex,value),write_merge(rowTop,bottomTop,leftCol,rightCol,value)来往excel中写数据即可。具体用法看下手册就是,就那么几个API比较简单。

import requests
import xlwt
from bs4 import BeautifulSoup# 解析首页每个城市
def parseAllCities(url):html = requests.get(url,headers=headers).textbs = BeautifulSoup(html)cities = bs.find_all('li',class_='mp-sidebar-item')  # 所有城市标签cities = cities[:cityNum]   # 取前3个城市(北京,上海,成都)print('城市检验:',cities)global currentCityIndexfor city in cities:currentCityIndex = currentCityIndex + 1global currentRowIndexcurrentRowIndex = 2cityName = city.a.string  # 城市名print('城市名校验:',cityName)cityUrl = 'http://piao.qunar.com' + city.a.get('href') # 获取不含主机名的urlcityUrl = cityUrl.replace('®','&reg') # 避免转义print(cityName,':\n')global currentSheetcurrentSheet = workBook.add_sheet('sheet' + str(currentCityIndex),cell_overwrite_ok=True) # 创建sheetcurrentSheet.write_merge(0,0,0,7,cityName)  # 合并单元格,填写城市名# 填写表头(景区名称,地址,简介,月销量,链接...)tableList = ['景区名称','地址','简介','月销量','链接','价格(单元:元)','等级','热度']for i,val in enumerate(tableList):currentSheet.write(1,i,val)parseSingleCity(cityName,cityUrl)print('\n\n\n')# 解析每个单一的城市(解析多页)
def parseSingleCity(cityName,cityUrl):# 解析城市前5页内容global pageSizefor i in range(1,1+pageSize):pageUrl = cityUrl + '&page=' + str(i)print('第%d页:'%(i))print('网址::', pageUrl)parsePageInfo(pageUrl) # 解析具体信息# 解析每一页的具体信息
def parsePageInfo(pageUrl):html = requests.get(pageUrl,headers=headers).textbs = BeautifulSoup(html)sightList = bs.find_all('div',class_='sight_item') # 所有景点信息# 遍历每个景点for sight in sightList:sightName = sight.find_all('a',class_='name')[0].string # 景区名# 景区等级,有些景区无等级所以可能异常try:sightLevel = sight.find_all('span',class_='level')[0].stringexcept:sightLevel = '无'sightAddress = sight.find_all('p',class_='address')[0].span.string[3:] # 地址,去掉'地址'二字sightDesc = sight.find_all('div',class_='intro')[0].string # 景区介绍# 获取景区最低价格try:sightPrice = sight.find_all('span',class_='sight_item_price')[0].em.string + '元起'except:sightPrice = '免费'# 获取月销量try:sightNum = sight.find_all('span',class_='hot_num')[0].stringexcept:sightNum = 0# 获取景区热度sightStarLevel = sight.find_all('span',class_='product_star_level')[0].text[2:]# 获取景区详细页UrlsightDetailUrl = sight.find_all('a',class_='sight_item_do')[0].get('href')baseUrl = 'http://piao.qunar.com'sightDetailUrl = baseUrl + sightDetailUrl# 打印结果print('{0},{1},{2},{3},{4},{5},{6}'.format(sightName,sightAddress,sightDesc,sightNum,sightDetailUrl,sightPrice,sightLevel))# 结果导入exceltableList = [sightName,sightAddress,sightDesc,sightNum,sightDetailUrl,sightPrice,sightLevel,sightStarLevel]global currentSheetglobal currentRowIndexfor i,val in enumerate(tableList):currentSheet.write(currentRowIndex,i,val) # 填写每一行数据currentRowIndex = currentRowIndex + 1headers = {
'User-Agent': 'Mozilla/5.0 (Windows NT 6.3; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/69.0.3497.92 Safari/537.36'
}
cityNum = 6  # 查询的城市数
pageSize = 10 # 查询的页数
startUrl = 'http://piao.qunar.com/'
currentCityIndex = 0 # 当前处理的城市下标
currentRowIndex = 2 # 当前在excel中的行号
workBook = xlwt.Workbook() # 创建excel表格
currentSheet = None
print('开始')
parseAllCities(startUrl)
workBook.save('testPy.xls')

使用Python requests和BeautifulSoup库爬取去哪儿网相关推荐

  1. python爬取小说网站资源_利用python的requests和BeautifulSoup库爬取小说网站内容

    1. 什么是Requests?html Requests是用Python语言编写的,基于urllib3来改写的,采用Apache2 Licensed 来源协议的HTTP库.python 它比urlli ...

  2. 利用Python中的BeautifulSoup库爬取豆瓣读书中书本信息

    利用BeautifulSoup库,获取前250本图书的信息,需要爬取的信息包括书名.书名的URL链接.作者.出版社和出版时间.书本价格.评分和评论,把这些信息存到txt文件,要求将这些信息对齐,排列整 ...

  3. 利用Python中的BeautifulSoup库爬取安居客第一页信息

    题目: 网址为https://beijing.anjuke.com/sale/, 利用BeautifulSoup库,爬取第1页的信息,具体信息如下:进入每个房源的页面,爬取小区名称.参考预算.发布时间 ...

  4. Python 爬虫篇-利用BeautifulSoup库爬取墨迹天气网的天气信息实例演示,调用墨迹天气api接口获取空气质量

    安装方法: pip install BeautifulSoup4 BeautifulSoup 详细使用文档 墨迹天气抓取演示 墨迹天气没有提供专门的天气接口 api,但我们可以用 BeautifulS ...

  5. 【爬虫】用Python爬取去哪儿网热门旅游信息(并打包成旅游信息查询小工具)

    以下内容为本人原创,欢迎大家观看学习,禁止用于商业用途,谢谢合作! ·作者:@Yhen ·原文网站:CSDN ·原文链接:https://blog.csdn.net/Yhen1/article/det ...

  6. python爬虫去哪儿网_大型爬虫案例:爬取去哪儿网

    世界那么大,我想去看看.相信每到暑假期间,就会有很多人都想去旅游.但是去哪里玩,没有攻略这又是个问题.这次作者给大家带来的是爬取去哪网自由行数据.先来讲解一下大概思路,我们去一个城市旅行必定有一个出发 ...

  7. python selenium爬取去哪儿网的酒店信息——详细步骤及代码实现

    目录 准备工作 一.webdriver部分 二.定位到新页面 三.提取酒店信息 ??这里要注意?? 四.输出结果 五.全部代码 准备工作 1.pip install selenium 2.配置浏览器驱 ...

  8. python爬取去哪儿网酒店信息

    python爬取去哪儿网酒店信息 利用selenium+python爬取去哪儿网酒店信息,获取酒店名称.酒店地址.第一条评论.评论数.最低价格等信息,写入excel表. 1.观察网页结构 浏览器地址栏 ...

  9. python selenium 爬取去哪儿网的数据

    python selenium 爬取去哪儿网的数据 完整代码下载:https://github.com/tanjunchen/SpiderProject/tree/master/selenium+qu ...

最新文章

  1. 《数据挖掘导论》实验课——实验一、数据处理之Numpy
  2. Silverlight实用窍门系列:22.Silverlight使用WebService调用C++,Delphi编写的DLL文件【实例源码下载】...
  3. mysql同时购买两种商品_SQL题1——查询所有购入商品为两种或两种以上的购物人记录...
  4. ASP.NET Core 中文文档 第四章 MVC(2.2)模型验证
  5. 常考数据结构与算法-NC105 二分查找-II
  6. nginx搭建文件服务器脚本,nginx搭建web服务器,配置端口复用
  7. 联想服务器支持esxi版本,联想中国(Lenovo China)_服务频道_服务政策
  8. be my friend
  9. 【人脸识别】基于matlab ksvd字典学习人脸表情识别【含Matlab源码 460期】
  10. String.format(“0:D2}“,a)字符串格式化
  11. 教育未来JAVA培训中心笔记(一):初学者如何学好JAVA
  12. 应用随机过程-复习笔记-Chapter4-关于期望的各态历经性习题答案
  13. 目标追踪小任务(基于SIFT,LK光流,ceres)
  14. JUCE学习笔记08-合成器(一)振荡器与包络发生器
  15. vue+element ui 走马灯添加图片+图片自适应
  16. sd卡重新分区以及格式化
  17. Java使用OpenOffice将office文件转换为PDF
  18. Reflex WMS中阶系列1 – Reflex WMS系统打印单据,是打印成PDF还是直接从打印机里打印出来?
  19. PHP利用qq邮箱发邮件
  20. 免费Web托管公司000Webhost被黑 1350万明文密码泄露

热门文章

  1. MPG(MPEG2 Program Stream)格式解析
  2. Golang实现高并发的调度模型---MPG模式
  3. vue 3.0尤雨溪亲推ui组件库naive
  4. 代数几何:Zariski Closures、不可约簇-素理想
  5. G. Good Key, Bad Key(思维)
  6. 2014年1月MBA联考英语真题答案及解析:阅读
  7. 北航软件学院考研复试攻略
  8. 遍历和添加json对象的属性 和 遍历普通js对象的属性
  9. $.each(json,function(index,item){ }); jquery遍历
  10. 第一组生活日历软件的应用体验