爬虫第三课:互联网中网页的解析

基本步骤

这节课们们的目的就是使用Requests模块+BeautifulSoup模块爬取网站上的信息

首先爬取一个网站主要分两步

1、第一步我们要了解服务器与本地交换机制,选择正确的办法我们才能获取正确的信息。

2、我们需要了解一些解析真实网页获取信息的一些办法,还有一些思路

服务器与本地交换机制

  我们先讲解一下服务器与本地的交换机制,首先我们先了解一个这样运作的常识,我们在平常浏览网页的时候,实际上我们使用浏览器点击每一个页面,都是向网站所在的服务器发起一个请求,我们称之为Request,而这个服务器接到请求之后呢,会给我们一个回信,我们称之为Reaponse,正是这种行为一个Request一个Response,请求与回应,实际上呢 这种方式就被成为HTTP协议,也就是说我们客户端与服务器进行会话的一种方式。

Request 

在向服务器请求的时候,一个Request的行为实际上包含了不同的方法,在HTTP 1.0的时代,实际上只有GET、POST、HEAD三种方法。

然后到了HTTP 1.1之后,也就是现在不叫普及的协议之后,又增添了PUT、OPTIONS、CONNECT、TRSCE、DELETE总共加起来现在是有8中方法。

我们在这里并不会展开细致的讲解,你听到这里的时候可能会感到比较困惑,为什么一种请求还有这么多种方法,实际在这里来讲我们要了解的不需要这么多,我们只需要知道我们向服务器去请求的时候GET和POST是最常用的两种方法。

  简单的来说99%的网页都可以使用这两种方法达成浏览,实际上他们的功能有很多地方很相像,但是却有着不同的作用,比如我们去点击一个页面,点击一个按钮的时候实际上是一个GET,然后再比如我们进行发微博,这种行为就是一种POST行为,但是具体的一些细节我们不展开。

  我们使用爬虫抓取页面实际上也是模仿的这两种方式,而对于我们使用爬虫来讲,知道一个GET方法实际上90%以上的网站我们就都能够顺利的爬取到了,所以说接下来的Request这部分我们将着重展开,GET的使用方法,使用GET的request的请求,最简单来讲包含这些信息,使用它的方法在最左端的get,请求网址的指向与page_one.html,我们知道这是一个网页,使用什么样的协议,就是HTTP 1.1,以及他的这个主网址在哪里,相当与是host后面的后缀形成了你要请求的这个网页链接,这是一个请求,最简单的要发送的信息包含在内,当然使用request的话我们还可以去向服务器发送更多信息,比如说你是谁,你在哪儿,你是处于什么状态,还有你甚至是用什么浏览器,这些信息全部可以通过request已经发送,你发送不同的这些信息给浏览器浏览器会给你反馈不同的结果,比如说我们日常生活中,在使用手机浏览器和使用PC端浏览器所看到的页面结构内容是不一样的,这就是因为我们再使用不同浏览器向网页进行请求的时候,服务器识别了我们请求的客户端到底是什么,然后决定给我们要发送什么形态的网页,开的网页,这就是在一个简单的request中,加上了不同的信息呈现不同的结果。

Response

  response,是网站回应给我们的信息,而简单的来说,我们在之前的学习中爬取的是一个本地的网页,爬取的是一个本地的网页,这些网页如果在网络环境中,实际上是在我们向网站提出一个request,之后然后服务器会把我们请求的这个网页以response的形式去发送给我们,我们会得到了一些基本信息比如说,状态码,告诉我如果是200的话那么意味着我的一次请求成功, 如果我的请求失败应该返回给我403或404。如果请求成功之后,后续应该会把网页中的元素陆陆续续地加载,这也就是我们这节的依据,再一次request的请求之后我们把网站返回给我们的这个网页进行解析,分析它,去抓取我们想要的数据。

  刚才那简单的叙述了一下request 和 response的原理,那么接下来我们打开浏览器来看一些这种比较抽象的概念是如何在真实的网络环境中发生的,我们首先打开一个网页,右键点击检查(或者按F12)进入到开发者模式,我们可以看到网页的源代码已经加载出来了,这时候我们去监视这个网络行为,点击下图中选项栏中的Network,然后点击刷新网页,网页被重新加载。

这时候我们我们可以看到网页中的加载的信息都已经显示在这里。

这时候我们点击途中的第一个网页,在headers中,request和response的信息全部记载在这个监视器中,我们点击Request Headers,在这里我们可以看到网页请求的方式以及一些其他的特定的信息都已显示在这里。下图中我们可以看到这个网页的cookie。

下图是Request中的User-Agent是我们使用代理的名称,以及地址host。

接下来我们再看选项栏中Response中的信息,实际上response的主体信息就是我们这个网页的本身,这边我么可以看到response加载的网页源码和我们之前使用检查打开看到的网页源码是一致的。

进行网页中信息爬取

这个就是Request和Response这种交互行为在浏览器中的演示,那么接下来我们就是通过利用一种与服务器的交互行为来爬去我们想要的这个数据信息,在我们写查询代码之前,我们先来看一下我们要爬去的网页,筛选一下我们需要的元素。我们需要的元素是图片信息,以及图片名称,酒店个数。

1.使用Request向服务器请求获取网页内容

2.使用BeautifulSoup解析页面

3.描述要爬取元素的位置

首先是我们需要的标题,我们根据上节课学习的方法拿到一个标题的CSS Selector,去掉特殊的路径(学习过Html就应该明白),找到所有标题,我们定位一个元素就找到它唯一性的特征。

查找图片的时候,我们为了找到我们需要的图片,我们可以指定图片的高和宽来查找图片

酒店个数

4.整理并筛选所需信息

但是我们输出之后发现我们拿到的图片地址是错误的,这个是因为网站采取了反爬虫的手段,使用js代码控制了图片,我们以后再讲解怎么拿到正确图片的方法。

接下来就是代码展示

from bs4 import BeautifulSoup
import requests

url = ‘https://www.tripadvisor.cn/TravelersChoice-Landmarks‘

wb_data=requests.get(url)

soup = BeautifulSoup(wb_data.text,‘lxml‘)

titles = soup.select(‘div.winnerLayer > div.winnerName > div.mainName.extra > a‘)

imgs = soup.select("img[width=‘472px‘]")

hotelsnum = soup.select(‘div.lodging > div.lodgbdy > ul > li > a ‘)

for title,img,hotelnum in zip(titles,imgs,hotelsnum):
    data = {
        ‘title‘ : title.get_text(),
        ‘img‘:img.get(‘src‘),
        ‘hotelnum‘:hotelnum.get_text(),
    }
    print(data)    

今天的爬虫就讲到这里,重点就是我们先把服务器与本地交换机制了解清楚,然后进行网页信息爬取练习。

原文地址:https://www.cnblogs.com/liudi2017/p/9269710.html

时间: 2024-10-09 00:15:01

爬虫第三课:互联网中网页的解析的相关文章

手把手教你写电商爬虫-第三课 实战尚妆网AJAX请求处理和内容提取

系列教材: 手把手教你写电商爬虫-第一课 找个软柿子捏捏 手把手教你写电商爬虫-第二课 实战尚妆网分页商品采集爬虫 看完两篇,相信大家已经从开始的小菜鸟晋升为中级菜鸟了,好了,那我们就继续我们的爬虫课程. 上一课呢一定是因为对手太强,导致我们并没有完整的完成尚妆网的爬虫. 吭吭~,我们这一课继续,争取彻底搞定尚妆网,不留任何遗憾. 我们先回顾一下,上一课主要遗留了两个问题,两个问题都和ajax有关. 1.由于是ajax加载下一页,导致下一页url并不会被系统自动发现. 2.商品页面的价格是通过a

第三课 Delphi中的封装,继承,多态的应该实例运用

   上一讲我们提到什么是封装,继承.和多态,现在我们讲解delphi中是如何实现它们的?以及为什么我们需要封装,继承和多态. 1.首先来说封装,delphi中用关键字private修饰符来说明,即表示类的成员为私有的,在类的外部是不可见了,只有在本类中可以随便使用.它的访问权限最低. 2.delphi中还有一个比较特殊的修饰符protected,表示该类的成员为保护型.受保护的成员只能由该类的和派生类可以访问.如果想要子类继承父类的某些功能的时候,可以使用某些成员为protected类型,访问

iOS开发中的单元测试(三)——URLManager中的测试用例解析

本文转载至 http://www.cocoachina.com/cms/plus/view.php?aid=8088 此前,我们在<iOS开发中的单元测试(一)&(二)>中介绍了从使用者的角度对比当下比较流行的两款单元测试框架OCUnit和GHUnit,这篇文章中我们将介绍一款导航控件URLManager. URLManager是一个基于UINavigationController和UIViewController,以URL Scheme为设计基础的导航控件,目的是实现ViewCont

ASP.NET MVC5总结(三)登陆中常用技术解析之session与cookie

1.session机制 session机制是在服务器端保持状态的方案,在做系统登陆时,我们往往会用到session来存储一些用户登录的重要信息,而这些信息是不能存在cookie中的. 当访问量增多时,是会比较占用服务器性能的. 写session的方法 1 public static void WriteSession(string key, T value) 2 { 3 if (key.IsEmpty()) 4 return; 5 HttpContext.Current.Session[key]

手把手教你写电商爬虫-第五课 京东商品评论爬虫 一起来对付反爬虫

系列教程: 手把手教你写电商爬虫-第一课 找个软柿子捏捏 手把手教你写电商爬虫-第二课 实战尚妆网分页商品采集爬虫 手把手教你写电商爬虫-第三课 实战尚妆网AJAX请求处理和内容提取 手把手教你写电商爬虫-第四课 淘宝网商品爬虫自动JS渲染 四节课过去了,咱们在爬虫界也都算见过世面的人,现在再来一些什么ajax加载之类的小鱼小虾应该不在话下了,即使是淘宝这种大量的ajax,我们 祭上我们的核武器,也轻松应对了,这一课主要是来看看除了技术上的页面处理外,我们还会遇上更棘手的问题,就是反爬虫,当然现

手把手教你写电商爬虫-第四课 淘宝网商品爬虫自动JS渲染

系列教程: 手把手教你写电商爬虫-第一课 找个软柿子捏捏 手把手教你写电商爬虫-第二课 实战尚妆网分页商品采集爬虫 手把手教你写电商爬虫-第三课 实战尚妆网AJAX请求处理和内容提取 老规矩,爬之前首先感谢淘宝公布出这么多有价值的数据,才让我们这些爬虫们有东西可以搜集啊,不过淘宝就不用我来安利了 广大剁手党相信睡觉的时候都能把网址打出来吧. 工欲善其事,必先利其器,先上工具: 1.神箭手云爬虫,2.Chrome浏览器 3.Chrome的插件XpathHelper 不知道是干嘛的同学请移步第一课

ajax中网页传输(三)XML——下拉列表显示练习

XML:页面之间传递数据,跨平台传递 HTML:超文本标记语言,核心标签 XML的形势为 <xml version='1.0'> <Nation> <one> <code>n001</code> <name>汉族</name> </one> <two> <code>n002</code> <name>苗族</name> </two> <

【Web探索之旅】第三部分第三课:协议

内容简介 1.第三部分第三课:协议 2.第四部分预告:Web程序员 第三部分第三课:协议 之前的课,我们学习了Client-Server模型的客户端语言和服务器语言. 客户端语言有HTML,CSS和JavaScript. 服务器语言有PHP,Java,Python,Ruby,C#,还有新兴的Go语言(Google推出的很强大的编程语言). 不过,要使得Web中这么多机器之间能够相互通信,例如 客户机A对服务器E说:"你好,请发送baidu.com这个网页给我",是不能借助客户端或服务器

shellKali Linux Web 渗透测试— 初级教程(第三课)

shellKali Linux Web 渗透测试— 初级教程(第三课) 文/玄魂 目录 shellKali Linux Web 渗透测试—初级教程(第三课)... 1 课程目录... 1 通过google hack寻找测试目标... 2 一个asp站点的sql注入... 3 一个php站点的sql注入... 4  课程地址:点击 课程目录 两个基本案例,以sql注入入手,目标为熟悉基本的思路,关注细节信息. 关于google hack,web 扫描,sql注入更详细和复杂的内容后续教程会专门讲解