zoukankan      html  css  js  c++  java
  • puppeteer爬虫之(一)——认识爬虫

    什么是网络爬虫?

     除了百度百科所讲,通俗来讲,我平时浏览的页面大都是HTML页面,包括我们平时浏览的新闻,门户网站等都是将文字内容镶嵌在HTML代码中的,比如腾讯新闻的这篇文章:

    爬虫要做的可以简单理解为利 用程序来获取我们需要的网络上的内容,包括文字,视频,图片等信息 称之为   数据。

    首先你要知道 当你点击一下百度,发生了什么,能把你想要的数据返回到你的电脑屏幕上

    简单来说这段过程发生了以下四个步骤:

    1. 浏览器通过 DNS服务器 查找域名对应的 IP地址;

    2. 向 IP地址 对应的 Web服务器 发送请求;

    3. Web服务器 响应请求,发回 HTML页面;

    4. 浏览器解析 HTML内容,并显示出来。

    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请求的过程:

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

    2. 当我们在浏览器输入URL http://www.baidu.com 的时候,浏览器发送一个Request请求去获取 http://www.baidu.com 的html文件,服务器把Response文件对象发送回给浏览器。

    3. 浏览器分析Response中的 HTML,发现其中引用了很多其他文件,比如Images文件,CSS文件,JS文件。 浏览器会自动再次发送Request去获取图片,CSS文件,或者JS文件等。

    4. 当所有的文件都下载成功后,网页会根据HTML语法结构,完整的显示出来了。

            URL(Uniform / Universal Resource Locator的缩写):统一资源定位符,是用于完整地描述Internet上

    HTTP请求主要分为GetPost两类:

    • GET是从服务器上获取指定页面信息,POST是向服务器提交数据并获取页面信息。

    • GET请求参数都显示在URL上,服务器根据该请求所包含URL中的参数来产生响应内容。 "Get" 请求的参数 是URL的一部分。

    • POST请求参数在请求体当中,消息长度没有限制而且以隐式的方式进行发送,通常用来向HTTP服务器提交量比较大的数据(比如请求中包含许多参数或者文件上传操作等)。 "POST"请求的参数 不在URL中,而在请求体中。

    get请求的参数都在网址里面包含,所以我们有时候看到一个网址特别长,后边带了一坨东西。post请求一般是用于表单提交,将账号密码以post的方式发送。

    当你任意点开客户端与服务期的一次信息交互,你会看到它访问客户端携带的参数也就是头部信息:request headers (常用) 以及客户端的回应response headers

    前边说过了,我们鼠标每点击一次,就是对服务器发送了一次请求,等待服务器给你响应

    当我们打开一个网页,右键点击选择查看源代码是可以查看源代码的,点击审查元素 和检查元素,就可以对客户端与服务器之间的信息交流进行查看如图:

    第一个箭头指向的位置  —点击一下,然后点击文章相应位置,它会指向代码中内容的位置,可以帮助我们查看数据在网页中的结构和位置

    第二给箭头是网络  — 点击network ,重新刷新页面,你会看到客户端和服务器之间的数据来往,也是我们今后用的最多的

    第三个箭头 是   —all是所有的数据来往,xhr一般ajax加载的数据会在这里面找到,js是js的一些请求,里面也有我们要的数据,少数

    下边方框里面  分别是 name  status(状态码)  type  size  等     了解一下即可,状态  200是正常,其他异常状态码可以百度,size点击可以按大小排列 这个后边还是挺方便的

    Request和Response

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

    Request详解

    1. 请求方式:主要有GET、POST两种类型,另外还有HEAD、PUT、DELETE、OPTIONS等。
    2. 请求URL:URL全称统一资源定位符,如一个网页文档、一张图片、一个视频等都可以用URL唯一来确定。
    3. 请求头:包含请求时的头部信息,如User-Agent、Host、Cookies等信息。
    4. 请求体:请求时额外携带的数据如表单提交时的表单数据

    Response详解

    1. 响应状态:有多种响应状态,如200代表成功、301跳转、404找不到页面、502服务器错误
    2. 响应头:如内容类型、内容长度、服务器信息、设置Cookie等等。
    3. 响应体:最主要的部分,包含了请求资源的内容,如网页HTML、图片二进制数据等。

    爬虫基本流程

    1. 发起请求:通过HTTP库向目标站点发起请求,即发送一个Request,请求可以包含额外的headers等信息,等待服务器响应。
    2. 获取响应内容:如果服务器能正常响应,会得到一个Response,Response的内容便是所要获取的页面内容,类型可能有HTML,Json字符串,二进制数据(如图片视频)等类型。
    3. 解析内容:得到的内容可能是HTML,可以用正则表达式、网页解析库进行解析。可能是Json,可以直接转为Json对象解析,可能是二进制数据,可以做保存或者进一步的处理。
    4. 保存数据:保存形式多样,可以存为文本,也可以保存至数据库,或者保存特定格式的文件。

    能抓取哪些数据

    1. 网页文本:如HTML文档、Json格式文本等。
    2. 图片:获取到的是二进制文件,保存为图片格式。
    3. 视频:同为二进制文件,保存为视频格式即可。
    4. And so on:只要是能请求到的,都能获取。

    解析方式

    1. 直接处理
    2. Json解析
    3. 正则表达式
    4. BeautifulSoup
    5. PyQuery
    6. XPath

    抓取中出现的问题

    问:为什么我抓到的和浏览器看到的不一样?

    答:网页通过浏览器的解析,加载CSS与JS等文件对网页进行解析渲染,达到我们看到绚丽的网页,而我们抓到的文件只是一些代码,css文件无法调用,使得样式不能表现出来,那么网页就会出现错位等等问题。

    问:怎样解决JavaScript渲染的问题?

    答:分析Ajax请求、Selenium/WebDriver、Splash、PyV8、Ghost.py等库

    保存数据

    1. 文本:纯文本、Json、Xml等。
    2. 关系型数据库:如MySQL、Oracle、SQL Server等具有结构化表结构形式存储。
    3. 非关系型数据库:如MongoDB、Redis等Key-Value形式存储。
    4. 二进制文件:

      如图片、视频、音频等等直接保存成特定格式即可。

  • 相关阅读:
    软件工程师的悲哀
    关于ControlTemplate 2
    DataTemplate总结2(学习)
    ObjectiveC——类
    6 Popular Ideas That Fail
    Develop Cross Platform Mobile App
    DP 与 DO(学习)
    Titanium颜色总结
    Illustrator Tips
    Titanium API
  • 原文地址:https://www.cnblogs.com/paris-test/p/9719140.html
Copyright © 2011-2022 走看看