什么是Python爬虫?爬虫入门基础,什么是Request,Response_上海python培训

时间:2018-05-16 17:57:55   来源:上海尚学堂   阅读:

一、什么是爬虫,爬虫能做什么

爬虫,即网络爬虫,大家可以理解为在网络上爬行的一直蜘蛛,互联网就比作一张大网,而爬虫便是在这张网上爬来爬去的蜘蛛咯,如果它遇到资源,那么它就会抓取下来。比如它在抓取一个网页,在这个网中他发现了一条道路,其实就是指向网页的超链接,那么它就可以爬到另一张网上来获取数据。

爬虫可以抓取的某个网站或者某个应用的内容,提取有用的价值。也可以模拟用户在浏览器或者App应用上的操作,实现自动化的程序。以下行为都可以用爬虫实现:

  • 咨询报告(咨询服务行业)
  • 抢票神器
  • 投票神器
  • 预测(股市预测、票房预测)
  • 国民情感分析
  • 社交关系网络
  • 政府部门舆情监控

二、浏览网页的过程与URL


1、用户浏览网页过程

在用户浏览网页的过程中,我们可能会看到许多好看的图片,比如 http://image.baidu.com/ ,我们会看到几张的图片以及百度搜索框,这个过程其实就是用户输入网址之后,经过DNS服务器,找到服务器主机,向服务器发出一个请求,服务器经过解析之后,发送给用户的浏览器 HTML、JS、CSS 等文件,浏览器解析出来,用户便可以看到形形色色的图片了。

因此,用户看到的网页实质是由 HTML 代码构成的,爬虫爬来的便是这些内容,通过分析和过滤这些 HTML 代码,实现对图片、文字等资源的获取。

3.URL的含义

URL,即统一资源定位符,也就是我们说的网址,统一资源定位符是对可以从互联网上得到的资源的位置和访问方法的一种简洁的表示,是互联网上标准资源的地址。互联网上的每个文件都有一个唯一的URL,它包含的信息指出文件的位置以及浏览器应该怎么处理它。

URL的格式由三部分组成:
①第一部分是协议(或称为服务方式)。
②第二部分是存有该资源的主机IP地址(有时也包括端口号)。
③第三部分是主机资源的具体地址,如目录和文件名等。

爬虫爬取数据时必须要有一个目标的URL才可以获取数据,因此,它是爬虫获取数据的基本依据,准确理解它的含义对爬虫学习有很大帮助。
 

三、爬虫的基本原理与过程


1、基本原理

爬虫是 模拟用户在浏览器或者App应用上的操作,把操作的过程、实现自动化的程序。由以下4个基本流程。

(1)、发起请求
通过HTTP库向目标站点发起请求,也就是发送一个Request,请求可以包含额外的header等信息,等待服务器响应

(2)、获取响应内容
如果服务器能正常响应,会得到一个Response,Response的内容便是所要获取的页面内容,类型可能是HTML,Json字符串,二进制数据(图片或者视频)等类型

(3)、解析内容
得到的内容可能是HTML,可以用正则表达式,页面解析库进行解析,可能是Json,可以直接转换为Json对象解析,可能是二进制数据,可以做保存或者进一步的处理

(4)、保存数据
保存形式多样,可以存为文本,也可以保存到数据库,或者保存特定格式的文件

 

2、过程

而当我们在浏览器中输入一个url后回车,后台会发生什么?比如说你输入https://www.shsxt.com
 
简单来说这段过程发生了以下四个步骤:
 
(1)、查找域名对应的IP地址。 
      浏览器首先访问的是DNS(Domain Name System,域名系统),dns的主要工作就是把域名转换成相应的IP地址
 
(2)、向IP对应的服务器发送请求。
(3)、服务器响应请求,发回网页内容。
(4)、浏览器显示网页内容。
 
网络爬虫要做的,简单来说,就是实现浏览器的功能。通过指定url,直接返回给用户所需要的数据, 而不需要一步步人工去操纵浏览器获取。



四、什么是Request,Response

浏览器发送消息给网址所在的服务器,这个过程就叫做HTPP Request
 
服务器收到浏览器发送的消息后,能够根据浏览器发送消息的内容,做相应的处理,然后把消息回传给浏览器,这个过程就是HTTP Response
 
浏览器收到服务器的Response信息后,会对信息进行相应的处理,然后展示
 

Request中包含什么?

 
请求方式
 
主要有:GET/POST两种类型常用,另外还有HEAD/PUT/DELETE/OPTIONS
GET和POST的区别就是:请求的数据GET是在url中,POST则是存放在头部
 
GET:向指定的资源发出“显示”请求。使用GET方法应该只用在读取数据,而不应当被用于产生“副作用”的操作中,例如在Web Application中。其中一个原因是GET可能会被网络蜘蛛等随意访问
 
POST:向指定资源提交数据,请求服务器进行处理(例如提交表单或者上传文件)。数据被包含在请求本文中。这个请求可能会创建新的资源或修改现有资源,或二者皆有。
 
HEAD:与GET方法一样,都是向服务器发出指定资源的请求。只不过服务器将不传回资源的本文部分。它的好处在于,使用这个方法可以在不必传输全部内容的情况下,就可以获取其中“关于该资源的信息”(元信息或称元数据)。
 
PUT:向指定资源位置上传其最新内容。
 
OPTIONS:这个方法可使服务器传回该资源所支持的所有HTTP请求方法。用'*'来代替资源名称,向Web服务器发送OPTIONS请求,可以测试服务器功能是否正常运作。
 
DELETE:请求服务器删除Request-URI所标识的资源。
 
请求URL
 
URL,即统一资源定位符,也就是我们说的网址,统一资源定位符是对可以从互联网上得到的资源的位置和访问方法的一种简洁的表示,是互联网上标准资源的地址。互联网上的每个文件都有一个唯一的URL,它包含的信息指出文件的位置以及浏览器应该怎么处理它。
 
URL的格式由三个部分组成:
第一部分是协议(或称为服务方式)。
第二部分是存有该资源的主机IP地址(有时也包括端口号)。
第三部分是主机资源的具体地址,如目录和文件名等。
 
爬虫爬取数据时必须要有一个目标的URL才可以获取数据,因此,它是爬虫获取数据的基本依据。
 
请求头
 
包含请求时的头部信息,如User-Agent,Host,Cookies等信息,下图是请求请求百度时,所有的请求头部信息参数
 
 
请求体
请求是携带的数据,如提交表单数据时候的表单数据(POST)
 

Response中包含了什么

 
所有HTTP响应的第一行都是状态行,依次是当前HTTP版本号,3位数字组成的状态代码,以及描述状态的短语,彼此由空格分隔。
 
响应状态
 
有多种响应状态,如:200代表成功,301跳转,404找不到页面,502服务器错误
 
1xx消息——请求已被服务器接收,继续处理
2xx成功——请求已成功被服务器接收、理解、并接受
3xx重定向——需要后续操作才能完成这一请求
4xx请求错误——请求含有词法错误或者无法被执行
5xx服务器错误——服务器在处理某个正确请求时发生错误 常见代码: 200 OK 请求成功 400 Bad Request 客户端请求有语法错误,不能被服务器所理解 401 Unauthorized 请求未经授权,这个状态代码必须和WWW-Authenticate报头域一起使用 403 Forbidden 服务器收到请求,但是拒绝提供服务 404 Not Found 请求资源不存在,eg:输入了错误的URL 500 Internal Server Error 服务器发生不可预期的错误 503 Server Unavailable 服务器当前不能处理客户端的请求,一段时间后可能恢复正常 301 目标永久性转移 302 目标暂时性转移
响应头
 
如内容类型,类型的长度,服务器信息,设置Cookie,如下图
 
 
响应体
 
最主要的部分,包含请求资源的内容,如网页HTMl,图片,二进制数据等
 


五、能爬取什么样的数据

网页文本:如HTML文档,Json格式化文本等
图片:获取到的是二进制文件,保存为图片格式
视频:同样是二进制文件
其他:只要请求到的,都可以获取
 

六、如何解析数据

直接处理
Json解析
正则表达式处理
BeautifulSoup解析处理
PyQuery解析处理
XPath解析处理
关于抓取的页面数据和浏览器里看到的不一样的问题
出现这种情况是因为,很多网站中的数据都是通过js,ajax动态加载的,所以直接通过get请求获取的页面和浏览器显示的不同。
 

七、如何解决js渲染的问题?

 
分析ajax
Selenium/webdriver
Splash
PyV8,Ghost.py
 
怎样保存数据
文本:纯文本,Json,Xml等
 
关系型数据库:如mysql,oracle,sql server等结构化数据库
 
非关系型数据库:MongoDB,Redis等key-value形式存储


参考:https://www.cnblogs.com/zhaof/p/6898138.html

上海尚学堂Python培训整理编辑,更多Python文章推荐:
【上海python培训】Python入门学习的必备11个知识点和Python学习线路图 》;
【上海python培训】python学习规划、python学习路线、python学习遇到问题》;
【上海python培训】Python网络编程:socketserver使用和新功能 》;
用Python完美解决网站的反爬虫策略》;
利用python爬虫抓取斗鱼app中照片的方法实例

分享:0

电话咨询

客服热线服务时间

周一至周五 9:00-21:00

周六至周日 9:00-18:00

咨询电话

021-67690939
15201841284

微信扫一扫