用BeatuifulSoup和Requests爬取猫途鹰网

服务器与本地的交换机制

我们每次浏览网页都是再向网页所在的服务器发送一个Request,然后服务器接受到Request后返回Response给网页。

Request

当前Http1.1版本共有get、post、head、put、options、connect、trace、delete共八种发送请求的方式。不过不需要全部记住,目前最常用的为get和post。

Response

我们会在Response中得到服务器返回给我们的信息,例如status_code为304或200则表示访问网页成功。

可能会发生的问题:

403问题:在我用urlopen打开TripAdvisor准备访问页面时,我的请求没有设置其他参数,该网页的服务器获取不到我发送请求的浏览器,操作系统等等一些信息,服务器会将这次访问视为非正常访问,这是很多网站都具有的反爬虫机制。

解决方法:

url = "https://www.tripadvisor.cn/"
wb_data = requests.get(url)
Soup = BeautifulSoup(wb_data.text, "lxml")

爬取猫途鹰网

爬取基本信息
# 爬取猫途鹰
url = "https://www.tripadvisor.cn/"
wb_data = requests.get(url)
Soup = BeautifulSoup(wb_data.text, "lxml")
# Soup = BeautifulSoup(urlopen("https://www.tripadvisor.cn/"), "lxml")
images = Soup.select("#popularDestinations > div.section > ul.regionContent > li.active > ul > li > a > span.thumbCrop > img")
nations = Soup.select("#popularDestinations > div.section > ul.regionContent > li.active > ul > li > div.title > a.countryName")
locations = Soup.select("#popularDestinations > div.section > ul.regionContent > li.active > ul > li > div.title > a.cityName")
messages = Soup.select("#popularDestinations > div.section > ul.regionContent > li.active > ul > li > div.counts > span.attractionCount > a")
tags = Soup.select("div.popIcons")

Info = []
for image, nation, location, message, tag in zip(images, nations, locations, messages, tags):
   data = {
       "image": image.get("src"),
       "nation": nation.get_text(),
       "location": location.get_text(),
       "message": message.get_text(),
       "tag": list(tag.stripped_strings)
  }
   Info.append(data)
   print(data)
{'image': 'https://ccm.ddcdn.com/ext/photo-s/03/9b/30/02/phuket.jpg', 'nation': '泰国', 'location': '普吉岛', 'message': '景点 1917', 'tag': ['游记', '指南']}
{'image': 'https://ccm.ddcdn.com/ext/photo-s/03/9b/2d/ad/bangkok.jpg', 'nation': '泰国', 'location': '曼谷', 'message': '景点 2700', 'tag': ['游记', '指南']}
{'image': 'https://ccm.ddcdn.com/ext/photo-b/1280x250/03/9b/2d/c0/chiang-mai.jpg', 'nation': '泰国', 'location': '清迈', 'message': '景点 1337', 'tag': ['游记', '指南']}
.......
伪造Cookie爬取需要登陆才能获取到的信息

暂时不知道怎么用,无论加不加都能爬取的到。。。。。。。。。。先记录一下

https://www.tripadvisor.cn/TravelMapHome为例子

构造向服务器提交的参数:headers

这些数据在你已登陆的页面的Request headers下都能找到,我们便是仿照这个Cookie告诉服务器我们已经登陆,以此跳过登陆环节,直接爬取。

爬取赛欢网

目标解析赛欢网的各种比赛的分类,并组成三层一对多的列表。

获取第一层主分类(topType)
tops = soup.select("#wp > div > div.w1180 > div > ul > li > h5 > span > a")
for top in tops:
   data = {
       "top" : top.get_text()
  }
   print(data)
{'top': '基础学科类'}{'top': '创业商业类'}{'top': '科技创新类'}{'top': '数学建模类'}{'top': '平面艺术类'}{'top': '游戏动漫类'}{'top': '志愿活动类'}{'top': '地区竞赛类'}
获取第二层分类(middleType)

由于第一层分类和第二层分类之间具有一对多的关系,我们需要找到一片区域将一对多中的多打包起来,例如科技创新类下有多个二层分类(都在class为nexinnercontents的div下),我们便可以获取class为portal_block_summary的div(里面包含多个二层分类)将其打包。

url = "https://www.saihuan.net/"
soup = BeautifulSoup(urlopen(url), "lxml")
tops = soup.select("#wp > div > div.w1180 > div > ul > li > h5 > span > a")
middles = soup.select("div.portal_block_summary")
for top, middle in zip(tops, middles):
   data = {
       "top": top.get_text(),
       "middle": list(middle.stripped_strings)
  }
   print(data)
{'top': '基础学科类', 'middle': ['基础学科', '数学', '物理', '化学', '化工', '力学', '地理', '医学']}
{'top': '创业商业类', 'middle': ['创业商业', '创业', '商业', '电商', '互联网+', '策划营销', '策划', '销售', '营销', '市场', '案例']}
......

这时候第二层分类虽然已经打包进来了,但是发现第三层的分类也被打包进来了,原因在于第三层分类都在class为nexinnertxts的div中,也在刚刚的打包范围内。

The second day of Crawler learning的更多相关文章

  1. The sixth day of Crawler learning

    爬取我爱竞赛网的大量数据 首先获取每一种比赛信息的分类链接 def get_type_url(url):    web_data = requests.get(web_url)    soup = B ...

  2. The fifth day of Crawler learning

    使用mongoDB 下载地址:https://www.mongodb.com/dr/fastdl.mongodb.org/win32/mongodb-win32-x86_64-2008plus-ssl ...

  3. The fourth day of Crawler learning

    爬取58同城 from bs4 import BeautifulSoupimport requestsurl = "https://qd.58.com/diannao/35200617992 ...

  4. The third day of Crawler learning

    连续爬取多页数据 分析每一页url的关联找出联系 例如虎扑 第一页:https://voice.hupu.com/nba/1 第二页:https://voice.hupu.com/nba/2 第三页: ...

  5. The first day of Crawler learning

    使用BeautifulSoup解析网页 Soup = BeautifulSoup(urlopen(html),'lxml') Soup为汤,html为食材,lxml为菜谱 from bs4 impor ...

  6. Machine and Deep Learning with Python

    Machine and Deep Learning with Python Education Tutorials and courses Supervised learning superstiti ...

  7. Node.js Learning Paths

    Node.js Learning Paths Node.js in Action Node.js Expert situations / scenario Restful API OAuth 2.0 ...

  8. 【Machine Learning】KNN算法虹膜图片识别

    K-近邻算法虹膜图片识别实战 作者:白宁超 2017年1月3日18:26:33 摘要:随着机器学习和深度学习的热潮,各种图书层出不穷.然而多数是基础理论知识介绍,缺乏实现的深入理解.本系列文章是作者结 ...

  9. 【Machine Learning】Python开发工具:Anaconda+Sublime

    Python开发工具:Anaconda+Sublime 作者:白宁超 2016年12月23日21:24:51 摘要:随着机器学习和深度学习的热潮,各种图书层出不穷.然而多数是基础理论知识介绍,缺乏实现 ...

随机推荐

  1. 2019-1-16-win10-uwp-发布的时候-ILC-编译不通过

    title author date CreateTime categories win10 uwp 发布的时候 ILC 编译不通过 lindexi 2019-1-16 20:37:5 +0800 20 ...

  2. @codeforces - 455E@ Function

    目录 @description@ @solution@ @accepted code@ @details@ @description@ 已知 a 序列,并给定以下关系: \[\begin{cases} ...

  3. Android内核剖析读书笔记(1)—Framework概述

    一.Framework组成 1.服务端组成 a.WindowManagerService     决定各窗口的叠放次序.隐藏或者显示窗口 b.ActivityManagerService   管理应用 ...

  4. @loj - 2478@「九省联考 2018」林克卡特树

    目录 @description@ @solution@ @part - 1@ @part - 2@ @accepted code@ @details@ @description@ 小 L 最近沉迷于塞 ...

  5. [C#] 查标准正态分布表

    C#里面要计算正态分布是一件比较麻烦的事情,一般是通过查表来实现的. static double[] ayZTFB = null; /// <summary> /// 计算标准正态分布表 ...

  6. day2_python之数据类型常用操作方法

    一.什么可变数据类型和不可变数据类型 可变数据类型:value值改变,id值不变:不可变数据类型:value值改变,id值也随之改变. 如何确定一种数据类型是可变的还是不可变的: 根据可变数据类型与不 ...

  7. [Offer收割]编程练习赛108 - 树上的最短边 树链剖分

    直接点权下放到边权,每次查询从dfs序的st[u]+1,ed[v]之间查询, #include<iostream> #include<stdio.h> #include< ...

  8. H3C 路由器SSH服务配置命令(续)

  9. 容器服务kubernetes federation v2实践五:多集群流量调度

    概述 在federation v2多集群环境中,通过前面几篇文章的介绍,我们可以很容易的进行服务多集群部署,考虑到业务部署和容灾需要,我们通常需要调整服务在各个集群的流量分布.本文下面简单介绍如何在阿 ...

  10. oracle的group by用法

    原文链接:https://www.cnblogs.com/Each-Person-Got-a-Dream/p/8946961.html sql如下: select min(es.sku_price) ...