闲来无事,所以爬下去哪儿网站的旅游景点信息,爬取网页之前,最重要的是分析网页的架构。

1. 选择要爬取的网页及定位自己要爬取的信息

url=http://piao.qunar.com/   爬取全国热门城市的境内门票

首先要得到全国热门城市的城市名及它们背后的链接

2. 根据获得的链接进入对应的页面

进一步分析页面,将我们要的数据一个个找出来

3. 得到页面的下一页

这里我为什么要把后面这张图片拿出来是因为我要根据最大页数来遍历每一页,倒数第二个a标签中的数据是页数信息

到这里我们就将我们的思路屡清楚了:

1.首先根据初始给的url,解析该url得到城市的城市名及背后的链接

2.再根据得到的链接解析出其中包含很多页的每一页链接

3.根据得到的每一个的链接,再来对每一页的信息解析

4.将解析后的数据存入到MySQL数据库中

4. 设计数据库

5. 直接上代码

import requests
from bs4 import BeautifulSoup
import re
import pymysql# 解析出每个城市及其该城市对应的url
def parse_city(url):html = requests.get(url,headers=headers)html = html.textsoup = BeautifulSoup(html,'lxml')city = soup.find_all('ul',{'class':'mp-sidebar-list','mp-role':'hotCityList'})[0].find_all('li')for i in city:# 得到每个城市的名字和对应的urlcity_name = i.a.textcity_url = i.a['href']city_url='http://piao.qunar.com'+city_urlcity_page(city_name,city_url)# 解析出每个城市的url的下一页
def city_page(city_name,city_url):html = requests.get(city_url,headers=headers)html = html.textsoup = BeautifulSoup(html,'lxml')page = soup.find_all('div',{'class':'pager'})[0].find_all('a')# 得到a标签中的hrefpage_url = page[0]['href']# 得到下一页的url,这个url由我们来指定,只需把页数前面的字符串匹配出来即可page_select_url = re.findall('(.*page=)',page_url)[0]# 将完整的页数的url拼接起来page_select_url = 'http://piao.qunar.com'+page_select_url# 这里选-2是有深意的,因为在选择每一页的地方倒一是下一页,而倒二则是尾页数page_num = int(page[-2].text)print('有%s页的数据'%page_num)for i in range(1,page_num+1):# 遍历得到某个城市中所有页数print('第%d页信息'%i)parse_page_url = page_select_url+str(i)print('网页地址:',parse_page_url)# 将每一页的url都传递到parse_page中进行解析parse_page(city_name,parse_page_url)# 解析每个城市每一页的信息
def parse_page(city_name,parse_page_url):html = requests.get(parse_page_url,headers=headers)html = html.textsoup = BeautifulSoup(html,'lxml')jingdian = soup.find_all('div',{'class':'result_list','id':'search-list'})[0].find_all('div',{'class':'sight_item'})for c in jingdian:# 景点名jd_name = c.find_all('a',{'data-click-type':'l_title','class':'name'})[0].text# 景点级别,有的景区无级别,所以要设置一个异常try:jd_jb = c.find_all('span',{'class':'level'})[0].textexcept:jd_jb='普通景区'# text得到的是  地址:北京市东城区景山前街4号  这种格式,所以以空格拆分,取后面那个jd_address = c.find_all('p',{'class':{'address','color999'}})[0].text.split()[-1]# 景点介绍jd_jieshao = c.find_all('div',{'class':{'intro','color999'}})[0].text# 景点价格,有的是免费,并无价格这一参数,所以设置一个异常try:jd_price = c.find_all('span',{'class':'sight_item_price'})[0].find_all('em')[0].textexcept:jd_price=0# 有的是免费,并销量这一参数,所以设置一个异常try:jd_xiaoliang = c.find_all('span',{'class':'hot_num'})[0].text# 景点销量jd_xiaoliang=int(jd_xiaoliang)except:jd_xiaoliang=0print('{0}  {1}  {2}  {3}  {4}'.format(jd_name,jd_jb,jd_jieshao,jd_price,jd_xiaoliang))mysql(city_name,jd_name,jd_jb,jd_jieshao,jd_price,jd_xiaoliang)# 定义一个类,将连接MySQL的操作写入其中
class down_mysql:def __init__(self,city_name,jd_name,jd_jb,jd_jieshao,jd_price,jd_xiaoliang):self.city_name = city_nameself.jd_name = jd_nameself.jd_jb = jd_jbself.jd_jieshao = jd_jieshaoself.jd_price = jd_priceself.jd_xiaoliang = jd_xiaoliangself.connect = pymysql.connect(host = 'localhost',db = 'test',port = 3306,user = 'root',passwd = '123456',charset = 'utf8',use_unicode = False)self.cursor = self.connect.cursor()# 保存数据到MySQL中def save_mysql(self):sql = "insert into qu_na(city_name,jd_name,jd_jb,jd_jieshao,jd_price,jd_xiaoliang) VALUES (%s,%s,%s,%s,%s,%s)"try:self.cursor.execute(sql,(self.city_name,self.jd_name,self.jd_jb,self.jd_jieshao,self.jd_price,self.jd_xiaoliang))self.connect.commit()print('数据插入成功')except:print('数据插入错误')
def mysql(city_name,jd_name,jd_jb,jd_jieshao,jd_price,jd_xiaoliang):# 新建类,将数据保存在MySQL中down = down_mysql(city_name,jd_name,jd_jb,jd_jieshao,jd_price,jd_xiaoliang)down.save_mysql()if __name__=='__main__':headers = {'User-Agent': 'Mozilla/4.0(compatible;MSIE 5.5;Windows NT)', }start_url='http://piao.qunar.com/'parse_city(start_url)

运行程序

然后再来看我们的MySQL数据库

看到景点名这个字段空了这么多我就知道我表设计错了,这个字段给大了,总而言之还算是爬下来了

requests爬取去哪儿网站相关推荐

  1. 使用requests爬取实习僧网站数据

    任务要求: 爬取实习僧网站的招聘公司信息和职位信息,并存储到数据库中,对应的数据库表和需要爬取的字段见下面表一和表二(注意:爬取存在的字段) 代码以上传带github上:使用requests爬取实习僧 ...

  2. 使用python requests 爬取妹子图网站图片

    import requests import os import re# 封面图http://mm.chinasareview.com/wp-content/uploads/2017a/07/04/l ...

  3. 用requests爬取一个招聘网站

    import requestsimport re session = requests.session()第一步:访问登陆页,拿到X_Anti_Forge_Token,X_Anti_Forge_Cod ...

  4. 基于selenium爬取去哪儿酒店信息

    去哪儿网站中,要爬取旅游的酒店信息,我们用通常的requests库进行爬取的时候发现,当我们要翻页的时候网址未出现变化,返回的网页源码信息始终只有第一页的内容,那么有没有一种方式可以使得能够翻页爬取呢 ...

  5. python3.x+requests 爬取网站遇到中文乱码的解决方案

    正常情况下,遇见问题上google找答案能甩百度100条街,但是这个问题是个例外······人家老外就没有乱码的问题.言归正传,首先建议大家看一下python3.x+requests 爬取网站遇到中文 ...

  6. 使用Python requests和BeautifulSoup库爬取去哪儿网

    功能说明:爬取去哪儿网城市下面若干条景点详细信息并将数据导入Excel表(使用xlwt库) 爬取去哪儿网的教程参考自 https://blog.csdn.net/gscsd_t/article/det ...

  7. Python3爬取企查查网站的企业年表并存入MySQL

    Python3爬取企查查网站的企业年表并存入MySQL 本篇博客的主要内容:爬取企查查网站的企业年报数据,存到mysql中,为了方便记录,分成两个模块来写: 第一个模块是爬取数据+解析数据,并将数据存 ...

  8. Python爬取斗鱼直播网站信息

    一.需求 爬取斗鱼直播网站信息,如直播名字.主播名字.热度.图片和房间网址,将这些数据保存到csv文件中,并单独创建文件夹保存图片. 斗鱼直播网址:https://www.douyu.com/g_LO ...

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

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

最新文章

  1. MyBatis的功能架构是怎样的
  2. 有意思的逻辑思维题(二)(hdu1052)
  3. 类型的设计--类型和成员基础(二)
  4. 从零开始学Pytorch(十一)之ModernRNN
  5. 如何不让你的APP在模拟器中运行。
  6. 为什么只看重结果_买家下单最看重的三项服务,做好这三点,让你的销量涨涨涨...
  7. 数据结构与算法python—6.链表及python实现
  8. 遍历对象键值对的两种方法
  9. java 叠加层_java中不可选择的叠加层
  10. MATLAB 线型图
  11. 最新仿淘宝源码使用原生HTML+CSS描写
  12. 丰富的无线局域网技术
  13. C++:函数指针进阶(三):Lambda函数详解
  14. 于的繁体字有几种写法_与的繁体字怎么写_与字有几笔、五行属性-幸运吧起名网...
  15. 线性代数---魏福义版 第二章习题答案
  16. Anaconda学习总结
  17. 最简单的方法!UEFI引导+GPT分区安装win10+Ubuntu16.04双系统
  18. atmel c keil 包_Atmel SAM D21开发板试用心得 ——利用Keil5,全速运行
  19. 契约锁助力上市公司IPO申报 信息披露、重大事项决策等文件网上签
  20. bs4 Beautiful Soup详解

热门文章

  1. eclipse 插件安装 摘要
  2. c语言内存驻留程序,关于用C语言检查内存驻留问题的研究
  3. Git出现 FETCH_HEAD fatal: refusing to merge unrelated histories解决方法
  4. RK3399平台开发系列讲解(SPI子系统)4.36、SPI子系统驱动框架详解
  5. H3C路由器交换机配置 操作系统命令
  6. 《来自Percal25号行星的哥顿人》
  7. java模拟cpu返回_Java CPU 占用高 模拟及排查
  8. 在技术面前,请保持一颗谦卑的心
  9. pytorch中使用TensorBoard进行可视化Loss及特征图
  10. html5复合选择器,传智播客解读Css基本选择器与复合选择器