1 : Introduction aux robots d'exploration


Contenu de cet article :

1. Introduction aux robots d'exploration

2. Types de reptiles

par exemple.HTTP/HTTPS

4. Outil de capture de paquets HTTP/HTTPS Fiddler


1 : Introduction aux robots d'exploration


Un robot d'exploration Web est un programme ou un script qui analyse automatiquement les informations du World Wide Web selon certaines règles.

Nous sommes désormais à l'ère du Big Data. Seules les grandes entreprises ou certaines sociétés spécialisées dans la collecte ou le commerce de données disposent de grandes quantités de données. Il n'existe que deux manières pour les gens ordinaires de posséder de grandes quantités de données non publiques. La première consiste à les acheter. , et l'autre est d'utiliser la technologie et de l'obtenir par vous-même, comme un robot d'exploration.

Il existe de nombreux langages​​qui peuvent être utilisés pour l'exploration, tels que Python, Java, PHP, etc. Fondamentalement, de nombreux langages​​peuvent être utilisés pour l'exploration.

Cependant, les ingénieurs robots actuellement recrutés sur le marché recrutent essentiellement des projets de robots Python, l'auteur a donc choisi de choisir Python comme robot.


Introduction à l'Encyclopédie Baidu : cliquez pour ouvrir le lien

Cliquez sur Wikipédia : ouvrir le lien


2. Types de reptiles


Selon les scénarios d'utilisation, les robots d'exploration Web peuvent être divisés en deux types : les robots d'exploration généraux et les robots d'exploration ciblés .


Les robots d'exploration Web généraux constituent une partie importante des systèmes d'exploration des moteurs de recherche (Baidu, Google, Yahoo, etc.). L'objectif principal est de télécharger des pages Web sur Internet sur l'ordinateur local pour former une sauvegarde miroir du contenu Internet.


Le principe de fonctionnement d'un moteur de recherche universel est
qu'un robot d'exploration Web universel collecte des pages Web et des informations sur Internet. Ces informations de page Web sont utilisées pour indexer le moteur de recherche afin de fournir une assistance. Il détermine si le contenu de l'ensemble du système du moteur est riche. et si l'information est en temps réel. Par conséquent, ses performances affectent directement l'efficacité des moteurs de recherche.

Étape 1 :
Le flux de travail de base de l'exploration des robots d'exploration des moteurs de recherche Web est le suivant :
sélectionnez d'abord une partie de l'URL de départ, placez ces URL dans la file d'attente des URL à explorer ;
supprimez l'URL à explorer, analysez le DNS pour obtenir l'adresse IP de l'hôte et les pages Web correspondant aux URL sont téléchargées, stockées dans la bibliothèque de pages Web téléchargées et ces URL sont placées dans la file d'attente des URL analysées.
Analysez l'URL dans la file d'attente des URL analysées, analysez les autres URL qu'elle contient et placez l'URL dans la file d'attente des URL à explorer, entrant ainsi dans le cycle suivant....

Comment les moteurs de recherche obtiennent l'URL d'un nouveau site Web :
1. Le nouveau site Web soumet activement l'URL au moteur de recherche : (tel que Baidu http://zhanzhang.baidu.com/linksubmit/url)
2. Configure des liens externes vers le nouveau site Web sur d'autres sites Web (essayez d'être dans la plage d'exploration des robots des moteurs de recherche)
3. Lorsque les moteurs de recherche coopèrent avec les fournisseurs de services de résolution DNS (tels que DNSPod, etc.), le nouveau nom de domaine du site Web sera rapidement exploré.

Cependant, certaines règles sont entrées dans le crawl du moteur de recherche, qui doit respecter le contenu de certaines commandes ou fichiers, comme les liens marqués de nofollow ou le protocole Robots.
Protocole Robots (également appelé protocole robot, protocole robot, etc.), le nom complet est "Robots Exclusion Protocol", le site Web utilise le protocole Robots pour indiquer aux moteurs de recherche quelles pages peuvent être explorées et quelles pages ne peuvent pas être explorées.

例如:
淘宝网:https://www.taobao.com/robots.txt
腾讯网: http://www.qq.com/robots.txt

第二步:数据存储
搜索引擎通过爬虫爬取到的网页,将数据存入原始页面数据库。其中的页面数据与用户浏览器得到的HTML是完全一样的。
搜索引擎蜘蛛在抓取页面时,也做一定的重复内容检测,一旦遇到访问权重很低的网站上有大量抄袭、采集或者复制的内容,很可能就不再爬行。


第三步:预处理
搜索引擎将爬虫抓取回来的页面,进行各种步骤的预处理。
提取文字
中文分词
消除噪音(比如版权声明文字、导航条、广告等……)
索引处理
链接关系计算
特殊文件处理
....
除了HTML文件外,搜索引擎通常还能抓取和索引以文字为基础的多种文件类型,如 PDF、Word、WPS、XLS、PPT、TXT 文件等。我们在搜索结果中也经常会看到这些文件类型。
但搜索引擎还不能处理图片、视频、Flash 这类非文字内容,也不能执行脚本和程序。

第四步:提供检索服务,网站排名
搜索引擎在对信息进行组织和处理后,为用户提供关键字检索服务,将用户检索相关的信息展示给用户。
同时会根据页面的PageRank值(链接的访问量排名)来进行网站排名,这样Rank值高的网站在搜索结果中会排名较前,当然也可以直接使用 Money 购买搜索引擎网站排名,简单粗暴。



但是,这些通用性搜索引擎也存在着一定的局限性:
通用搜索引擎所返回的结果都是网页,而大多情况下,网页里90%的内容对用户来说都是无用的。
不同领域、不同背景的用户往往具有不同的检索目的和需求,搜索引擎无法提供针对具体某个用户的搜索结果。
万维网数据形式的丰富和网络技术的不断发展,图片、数据库、音频、视频多媒体等不同数据大量出现,通用搜索引擎对这些文件无能为力,不能很好地发现和获取。
通用搜索引擎大多提供基于关键字的检索,难以支持根据语义信息提出的查询,无法准确理解用户的具体需求。


针对这些情况,聚焦爬虫技术得以广泛使用。

聚焦爬虫

聚焦爬虫,是"面向特定主题需求"的一种网络爬虫程序,它与通用搜索引擎爬虫的区别在于: 聚焦爬虫在实施网页抓取时会对内容进行处理筛选,尽量保证只抓取与需求相关的网页信息。
而我们要学习的,就是聚焦爬虫。


三.HTTP/HTTPS


爬虫爬取网页,而网页通过HTTP/HTTPS请求进行加载,所以了解HTTP/HTTPS是必要的。


HTTP协议(HyperText Transfer Protocol,超文本传输协议):是一种发布和接收 HTML页面的方法。
HTTPS(Hypertext Transfer Protocol over Secure Socket Layer)简单讲是HTTP的安全版,在HTTP下加入SSL层。
SSL(Secure Sockets Layer 安全套接层)主要用于Web的安全传输协议,在传输层对网络连接进行加密,保障在Internet上数据传输的安全。

HTTP的端口号为80,
HTTPS的端口号为443


HTTP工作原理

网络爬虫抓取过程可以理解为模拟浏览器操作的过程。
浏览器的主要功能是向服务器发出请求,在浏览器窗口中展示您选择的网络资源,HTTP是一套计算机通过网络进行通信的规则。

HTTP通信由两部分组成: 客户端请求消息 与 服务器响应消息


浏览器发送HTTP请求的过程:
当用户在浏览器的地址栏中输入一个URL并按回车键之后,浏览器会向HTTP服务器发送HTTP请求。HTTP请求主要分为“Get”和“Post”两种方法。

当我们在浏览器输入URL http://www.baidu.com 的时候,浏览器发送一个Request请求去获取 http://www.baidu.com 的html文件,服务器把Response文件对象发送回给浏览器。
浏览器分析Response中的 HTML,发现其中引用了很多其他文件,比如Images文件,CSS文件,JS文件。 浏览器会自动再次发送Request去获取图片,CSS文件,或者JS文件。
当所有的文件都下载成功后,网页会根据HTML语法结构,完整的显示出来了。


URL(Uniform / Universal Resource Locator的缩写):统一资源定位符,是用于完整地描述Internet上网页和其他资源的地址的一种标识方法。

基本格式:scheme://host[:port#]/path/…/[?query-string][#anchor]
scheme:协议(例如:http, https, ftp)
host:服务器的IP地址或者域名
port#:服务器的端口(如果是走协议默认端口,缺省端口80)
path:访问资源的路径
query-string:参数,发送给http服务器的数据
anchor:锚(跳转到网页的指定锚点位置)


客户端HTTP请求:

一个典型的HTTP请求示例

GET https://www.baidu.com/ HTTP/1.1
Host: www.baidu.com
Connection: keep-alive
Upgrade-Insecure-Requests: 1
User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/54.0.2840.99 Safari/537.36
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,*/*;q=0.8
Referer: http://www.baidu.com/
Accept-Encoding: gzip, deflate, sdch, br
Accept-Language: zh-CN,zh;q=0.8,en;q=0.6
Cookie: BAIDUID=04E4001F34EA74AD4601512DD3C41A7B:FG=1; BIDUPSID=04E4001F34EA74AD4601512DD3C41A7B; PSTM=1470329258; MCITY=-343%3A340%3A; BDUSS=nF0MVFiMTVLcUh-Q2MxQ0M3STZGQUZ4N2hBa1FFRkIzUDI3QlBCZjg5cFdOd1pZQVFBQUFBJCQAAAAAAAAAAAEAAADpLvgG0KGyvLrcyfrG-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFaq3ldWqt5XN; H_PS_PSSID=1447_18240_21105_21386_21454_21409_21554; BD_UPN=12314753; sug=3; sugstore=0; ORIGIN=0; bdime=0; H_PS_645EC=7e2ad3QHl181NSPbFbd7PRUCE1LlufzxrcFmwYin0E6b%2BW8bbTMKHZbDP0g; BDSVRTM=0

URL只是标识资源的位置,而HTTP是用来提交和获取资源。客户端发送一个HTTP请求到服务器的请求消息,包括以下格式:
请求行、请求头部、空行、请求数据
四个部分组成,下图给出了请求报文的一般格式。



请求方法:


GET https://www.baidu.com/ HTTP/1.1
根据HTTP标准,HTTP请求可以使用多种请求方法。
HTTP 0.9:只有基本的文本 GET 功能。
HTTP 1.0:完善的请求/响应模型,并将协议补充完整,定义了三种请求方法: GET, POST 和 HEAD方法。
HTTP 1.1:在 1.0 基础上进行更新,新增了五种请求方法:OPTIONS, PUT, DELETE, TRACE 和 CONNECT 方法。
HTTP 2.0(未普及):请求/响应首部的定义基本没有改变,只是所有首部键必须全部小写,而且请求行要独立为 :method、:scheme、:host、:path这些键值对。

序号 方法 描述
1 GET 请求指定的页面信息,并返回实体主体。
2 HEAD 类似于get请求,只不过返回的响应中没有具体的内容,用于获取报头
3 POST 向指定资源提交数据进行处理请求(例如提交表单或者上传文件),数据被包含在请求体中。POST请求可能会导致新的资源的建立和/或已有资源的修改。
4 PUT 从客户端向服务器传送的数据取代指定的文档的内容。
5 DELETE 请求服务器删除指定的页面。
6 CONNECT HTTP/1.1协议中预留给能够将连接改为管道方式的代理服务器。
7 OPTIONS 允许客户端查看服务器的性能。
8 TRACE 回显服务器收到的请求,主要用于测试或诊断。



HTTP请求主要分为Get和Post两种方法
GET是从服务器上获取数据,POST是向服务器传送数据
GET请求参数显示,都显示在浏览器网址上,HTTP服务器根据该请求所包含URL中的参数来产生响应内容,即“Get”请求的参数是URL的一部分。 例如: http://www.baidu.com/s?wd=Chinese
POST请求参数在请求体当中,消息长度没有限制而且以隐式的方式进行发送,通常用来向HTTP服务器提交量比较大的数据(比如请求中包含许多参数或者文件上传操作等),请求的参数包含在“Content-Type”消息头里,指明该消息体的媒体类型和编码,

注意:避免使用Get方式提交表单,因为有可能会导致安全问题。 比如说在登陆表单中用Get方式,用户输入的用户名和密码将在地址栏中暴露无遗。


常用的请求报头


1. Host (主机和端口号)
Host:对应网址URL中的Web名称和端口号,用于指定被请求资源的Internet主机和端口号,通常属于URL的一部分。
2. Connection (链接类型)
Connection:表示客户端与服务连接类型
Client 发起一个包含 Connection:keep-alive 的请求,HTTP/1.1使用 keep-alive 为默认值。
Server收到请求后:
如果 Server 支持 keep-alive,回复一个包含 Connection:keep-alive 的响应,不关闭连接;
如果 Server 不支持 keep-alive,回复一个包含 Connection:close 的响应,关闭连接。
如果client收到包含 Connection:keep-alive 的响应,向同一个连接发送下一个请求,直到一方主动关闭连接。
keep-alive在很多情况下能够重用连接,减少资源消耗,缩短响应时间,比如当浏览器需要多个文件时(比如一个HTML文件和相关的图形文件),不需要每次都去请求建立连接。
3. Upgrade-Insecure-Requests (升级为HTTPS请求)
Upgrade-Insecure-Requests:升级不安全的请求,意思是会在加载 http 资源时自动替换成 https 请求,让浏览器不再显示https页面中的http请求警报。
HTTPS 是以安全为目标的 HTTP 通道,所以在 HTTPS 承载的页面上不允许出现 HTTP 请求,一旦出现就是提示或报错。
4. User-Agent (浏览器名称)
User-Agent:是客户浏览器的名称,以后会详细讲。
5. Accept (传输文件类型)
Accept:指浏览器或其他客户端可以接受的MIME(Multipurpose Internet Mail Extensions(多用途互联网邮件扩展))文件类型,服务器可以根据它判断并返回适当的文件格式。

举例:
Accept: */*:表示什么都可以接收。
Accept:image/gif:表明客户端希望接受GIF图像格式的资源;
Accept:text/html:表明客户端希望接受html文本。
Accept: text/html, application/xhtml+xml;q=0.9, image/*;q=0.8:表示浏览器支持的 MIME 类型分别是 html文本、xhtml和xml文档、所有的图像格式资源。

q是权重系数,范围 0 =< q <= 1,q 值越大,请求越倾向于获得其“;”之前的类型表示的内容。若没有指定q值,则默认为1,按从左到右排序顺序;若被赋值为0,则用于表示浏览器不接受此内容类型。

Text:用于标准化地表示的文本信息,文本消息可以是多种字符集和或者多种格式的;Application:用于传输应用程序数据或者二进制数据。详细请点击

6. Referer (页面跳转处)
Referer:表明产生请求的网页来自于哪个URL,用户是从该 Referer页面访问到当前请求的页面。这个属性可以用来跟踪Web请求来自哪个页面,是从什么网站来的等。
有时候遇到下载某网站图片,需要对应的referer,否则无法下载图片,那是因为人家做了防盗链,原理就是根据referer去判断是否是本网站的地址,如果不是,则拒绝,如果是,就可以下载;

7. Accept-Encoding(文件编解码格式)
Accept-Encoding:指出浏览器可以接受的编码方式。编码方式不同于文件格式,它是为了压缩文件并加速文件传递速度。浏览器在接收到Web响应之后先解码,然后再检查文件格式,许多情形下这可以减少大量的下载时间。

举例:Accept-Encoding:gzip;q=1.0, identity; q=0.5, *;q=0
如果有多个Encoding同时匹配, 按照q值顺序排列,本例中按顺序支持 gzip, identity压缩编码,支持gzip的浏览器会返回经过gzip编码的HTML页面。 如果请求消息中没有设置这个域服务器假定客户端对各种内容编码都可以接受。


8. Accept-Language(语言种类)
Accept-Langeuage:指出浏览器可以接受的语言种类,如en或en-us指英语,zh或者zh-cn指中文,当服务器能够提供一种以上的语言版本时要用到。

9. Accept-Charset(字符编码)
Accept-Charset:指出浏览器可以接受的字符编码。

举例:Accept-Charset:iso-8859-1,gb2312,utf-8
ISO8859-1:通常叫做Latin-1。Latin-1包括了书写所有西方欧洲语言不可缺少的附加字符,英文浏览器的默认值是ISO-8859-1.
gb2312:标准简体中文字符集;
utf-8:UNICODE 的一种变长字符编码,可以解决多种语言文本显示问题,从而实现应用国际化和本地化。
如果在请求消息中没有设置这个域,缺省是任何字符集都可以接受。

10. Cookie (Cookie)
Cookie:浏览器用这个属性向服务器发送Cookie。Cookie是在浏览器中寄存的小型数据体,它可以记载和服务器相关的用户信息,也可以用来实现会话功能,以后会详细讲。


11. Content-Type (POST数据类型)
Content-Type:POST请求里用来表示的内容类型。
举例:Content-Type = Text/XML; charset=gb2312:
指明该请求的消息体中包含的是纯文本的XML类型的数据,字符编码采用“gb2312”。



常用的响应报头(了解)

HTTP/1.1 200 OK
Server: Tengine
Connection: keep-alive
Date: Wed, 30 Nov 2016 07:58:21 GMT
Cache-Control: no-cache
Content-Type: text/html;charset=UTF-8
Keep-Alive: timeout=20
Vary: Accept-Encoding
Pragma: no-cache
X-NWS-LOG-UUID: bd27210a-24e5-4740-8f6c-25dbafa9c395
Content-Length: 180945

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" ....


En théorie, toutes les informations d’en-tête de réponse devraient être en réponse aux en-têtes de requête. Cependant, pour des raisons d'efficacité, de sécurité et d'autres considérations, le serveur ajoutera les informations d'en-tête de réponse correspondantes. Comme vous pouvez le voir ci-dessus :


1. Cache-Control : doit être revalidé, sans cache, privé.
Cette valeur indique au client que le serveur ne souhaite pas qu'il mette en cache les ressources. La prochaine fois qu'une ressource est demandée, le serveur devra être demandé à nouveau et la ressource ne pourra pas être obtenue à partir d'une copie mise en cache.
Cache-Control est une information très importante dans l'en-tête de réponse. Lorsque l'en-tête de requête client contient une requête Cache-Control:max-age=0, qui indique clairement que les ressources du serveur ne seront pas mises en cache, Cache-Control est généralement renvoyé comme informations de réponse. no-cache signifie « alors ne le mettez pas en cache ».
Lorsque le client n'inclut pas Cache-Control dans l'en-tête de la requête, le serveur détermine souvent différentes stratégies de mise en cache pour différentes ressources. Par exemple, la stratégie d'oschina pour la mise en cache des ressources d'image est Cache-Control : max-age=86400, ce qui signifie Oui, pour 86 400 secondes à partir de l'heure actuelle, le client peut lire la ressource directement à partir de la copie mise en cache sans la demander au serveur.

2. Connexion : keep-alive
Ce champ répond à la connexion du client : keep-alive, indiquant au client que la connexion TCP du serveur est également une longue connexion et que le client peut continuer à utiliser cette connexion TCP pour envoyer des requêtes http.

3. Content-Encoding : gzip
indique au client que les ressources envoyées par le serveur sont codées en gzip. Une fois que le client a vu ces informations, il doit utiliser gzip pour décoder les ressources.

4. Type de contenu:text/html;charset=UTF-8
Indiquez au client le type de fichier de ressources et l'encodage des caractères. Le client décode la ressource via UTF-8, puis effectue une analyse HTML de la ressource. Habituellement, nous constatons que certains sites Web sont tronqués, souvent parce que le serveur ne renvoie pas le bon encodage.

5. Date : dimanche 21 septembre 2016 06:18:21 GMT
Il s'agit de l'heure du serveur à laquelle le serveur envoie des ressources. GMT est l'heure standard à Greenwich. Les heures envoyées dans le protocole http sont toutes en GMT, principalement pour résoudre le problème de confusion horaire lorsque différents fuseaux horaires se demandent des ressources sur Internet.

6. Expire : Dim, 1 janvier 2000 01:00:00 GMT
Cet en-tête de réponse est également lié à la mise en cache. Il indique au client qu'il peut accéder directement à la copie en cache avant cette heure. Évidemment, il y aura des problèmes avec cette valeur car la L'heure du client et celle du serveur ne sont pas nécessairement les mêmes, et si l'heure est différente, cela posera des problèmes. Par conséquent, cet en-tête de réponse n'est pas aussi précis que l'en-tête de réponse Cache-Control: max-age=*, car la date dans max-age=date est une heure relative, qui est non seulement plus facile à comprendre, mais également plus précise.

7. Pragma:no-cache
a la même signification que Cache-Control.

8.Serveur : Tengine/1.4.6
Il s'agit du serveur et de la version correspondante. Il indique uniquement au client les informations du serveur.

9. Transfert-Encodage:en morceaux

这个响应头告诉客户端,服务器发送的资源的方式是分块发送的。一般分块发送的资源都是服务器动态生成的,在发送时还不知道发送资源的大小,所以采用分块发送,每一块都是独立的,独立的块都能标示自己的长度,最后一块是0长度的,当客户端读到这个0长度的块时,就可以确定资源已经传输完了。

10. Vary: Accept-Encoding
告诉缓存服务器,缓存压缩文件和非压缩文件两个版本,现在这个字段用处并不大,因为现在的浏览器都是支持压缩的。

响应状态码
响应状态代码有三位数字组成,第一个数字定义了响应的类别,且有五种可能取值。
常见状态码
100~199:表示服务器成功接收部分请求,要求客户端继续提交其余请求才能完成整个处理过程。
200~299:表示服务器成功接收请求并已完成整个处理过程。常用200(OK 请求成功)。
300~399:为完成请求,客户需进一步细化请求。例如:请求的资源已经移动一个新地址、常用302(所请求的页面已经临时转移至新的url)、307和304(使用缓存资源)。
400~499:客户端的请求有错误,常用404(服务器无法找到被请求的页面)、403(服务器拒绝访问,权限不够)。
500~599:服务器端出现错误,常用500(请求未完成。服务器遇到不可预知的情况)。

Cookie 和 Session
服务器和客户端的交互仅限于请求/响应过程,结束之后便断开,在下一次请求时,服务器会认为新的客户端。
为了维护他们之间的链接,让服务器知道这是前一个用户发送的请求,必须在一个地方保存客户端的信息。


Cookie:通过在 客户端 记录的信息确定用户的身份。

Session:通过在 服务器端 记录的信息确定用户的身份。


四.HTTP/HTTPS抓包工具Fiddler


下载地址:https://www.telerik.com/download/fiddler


请求 (Request) 部分详解
Headers —— 显示客户端发送到服务器的 HTTP 请求的 header,显示为一个分级视图,包含了 Web 客户端信息、Cookie、传输状态等。
Textview —— 显示 POST 请求的 body 部分为文本。
WebForms —— 显示请求的 GET 参数 和 POST body 内容。
HexView —— 用十六进制数据显示请求。
Auth —— 显示响应 header 中的 Proxy-Authorization(代理身份验证) 和 Authorization(授权) 信息.
Raw —— 将整个请求显示为纯文本。
JSON - 显示JSON格式文件。
XML —— 如果请求的 body 是 XML 格式,就是用分级的 XML 树来显示它。


响应 (Response) 部分详解
Transformer —— 显示响应的编码信息。
Headers —— 用分级视图显示响应的 header。
TextView —— 使用文本显示相应的 body。
ImageVies —— 如果请求是图片资源,显示响应的图片。
HexView —— 用十六进制数据显示响应。
WebView —— 响应在 Web 浏览器中的预览效果。
Auth —— 显示响应 header 中的 Proxy-Authorization(代理身份验证) 和 Authorization(授权) 信息。
Caching —— 显示此请求的缓存信息。
Privacy —— 显示此请求的私密 (P3P) 信息。
Raw —— 将整个响应显示为纯文本。
JSON - 显示JSON格式文件。
XML —— 如果响应的 body 是 XML 格式,就是用分级的 XML 树来显示它 。



官网视频教程(可能需翻墙):

http://www.telerik.com/videos/fiddler/getting-started-with-fiddler-web-debugging-proxy





Je suppose que tu aimes

Origine blog.csdn.net/qq_33613696/article/details/77510095
conseillé
Classement