01.爬虫基础

1、Python爬虫介绍

爬虫的实战性要求很强。爬虫经常需要爬取商业网站或政府网站的内容,而这些网站随时可能进行更新,另外网络原因和网站反爬虫机制也会对爬虫代码演示造成干扰。

1、1 爬虫的用处

网络爬虫:按照一定的规则,自动地抓取互联网信息的程序。

首先请问:都说现在是"大数据时代",那数据从何而来?

  • 企业产生的用户数据:百度指数、阿里指数、新浪微博指数
  • 数据平台购买数据:数据堂、国云数据市场
  • 政府/机构公开的数据:中华人民共和国国家统计局数据、世界银行公开数据、联合国数据。
  • 数据管理咨询公司:麦肯锡、埃森哲、艾瑞咨询
  • 爬取网络数据:如果需要的数据市场上没有,或者不愿意购买,那么可以选择招/做一名爬虫工程师,自己动手丰衣足食。拉勾网Python爬虫职位

1、2 应用方向

1、2、1 订制一个搜索引擎

学习爬虫,可以私人订制一个搜索引擎,并且可以对搜索引擎的数据采集工作原理进行更深层次地理解。

​ 有的朋友希望能够深层次地了解搜索引擎的爬虫工作原理,或者希望自己能够开发出款私人搜索引擎,那么此时,学习爬虫是非常有必要的。简单来说,我们学会了爬虫编写之后,就可以利用爬虫自动地采集互联网中的信息,采集回来后进行相应的存储或处理,在需要检索某些信息的时候,只需在采集回来的信息中进行检索,即实现了私人的搜索引擎。当然,信息怎么爬取、怎么存储、怎么进行分词、怎么进行相关性计算等,都是需要我们进行设计的,爬虫技术主要解决信息爬取的问题。

1、2、2 seo优化

​ 对于很多SEO从业者来说,学习爬虫,可以更深层次地理解搜索引擎爬虫的工作原理,从而可以更好地进行搜索引擎优化既然是搜索引擎优化, 那么就必须要对搜索引擎的工作原理非常清楚,同时也需要掌握搜索引擎爬虫的工作原理,这样在进行搜索引擎优化时,才能知己知彼,百战不殆。

1、2、3 数据分析

大数据时代,要进行数据分析,首先要有数据源,而学习爬虫,可以让我们获取更多的数据源,并且这些数据源可以按我们的目的进行采集,去掉很多无关数据。

	在进行大数据分析或者进行数据挖掘的时候,数据源可以从某些提供数据统计的网站获得,也可以从某些文献或内部资料中获得,但是这些获得数据的方式,有时很难满足我们对数据的需求,而手动从互联网中去寻找这些数据,则耗费的精力过大。此时就可以利用爬虫技术,自动地从互联网中获取我们感兴趣的数据内容,并将这些数据内容爬取回来,作为我们的数据源,从而进行更深层次的数据分析,并获得更多有价值的信息。
1、2、4 找工作

从就业的角度来说,爬虫工程师目前来说属于紧缺人才,并且薪资待遇普遍较高所以,深层次地掌握这门技术,对于就业来说,是非常有利的。

	有些朋友学习爬虫可能为了就业或者跳槽。从这个角度来说,爬虫工程师方向是不错的选择之一,因为目前爬虫工程师的需求越来越大,而能够胜任这方面岗位的人员较少,所以属于一个比较紧缺的职业方向,并且随着大数据时代的来临,爬虫技术的应用将越来越广泛,在未来会拥有很好的发展空间。

1、3 为什么用Python爬虫

  1. PHP:PHP是世界是最好的语言!!但他天生不是做这个的,而且对多线程、异步支持不是很好,并发处理能力弱。爬虫是工具性程序,对速度和效率要求比较高。据说目前PHP改善了效率,但是社区环境这一块还是赶不上Python。
  2. Java:生态圈很完善,是Python爬虫最大的竞争对手。但是Java语言本身很笨重,代码量很大。重构成本比较高,任何修改会导致代码大量改动。爬虫经常要修改采集代码。毕竟人生苦短。。。。
  3. C/C++:运行效率是无敌的。但是学习和开发成本高。写个小爬虫程序可能要大半天时间。一句话总结,为什么不用C++来开发爬虫程序,因为那是要头发掉光的,那是要死人的。
  4. Python:语法优美、代码简洁、开发效率高、支持的模块多。相关的HTTP请求模块和HTML解析模块非常丰富。还有Scrapy和Scrapy-redis框架让我们开发爬虫变得异常简单。而且有非常丰富的资源,另外Python也支持异步,对异步的网络编程也非常友好。以后的方向是异步网络编程,非常适合爬虫程序!!
1、3、1 一个 python 爬虫

使用 python 编写一个爬虫爬取百度网址

2、爬虫

2、1 爬虫的分类

2、1、1 通用爬虫

​ 通用网络爬虫是捜索引擎抓取系统(Baidu、Google、Sogou等)的一个重要组成部分。主要目的是将互联网上的网页下载到本地,形成一个互联网内容的镜像备份。为搜索引擎提供搜索支持。

搜索引擎工作原理:

请添加图片描述

  • 第一步:抓取网页

搜索引擎去成千上万个网站抓取数据。

  • 第二步:数据存储

搜索引擎通过爬虫爬取到的网页,将数据存入原始页面数据库(也就是文档库)。其中的页面数据与用户浏览器得到的HTML是完全一样的。

  • 第三步:提供检索服务,网站排名

搜索引擎将爬虫抓取回来的页面,进行各种步骤的预处理:中文分词,消除噪音,索引处理。

搜索引擎在对信息进行组织和处理后,为用户提供关键字检索服务,将用户检索相关的信息展示给用户。展示的时候会进行排名。

搜索引擎的局限性:

  • 搜索引擎抓取的是整个网页,不是具体详细的信息。

  • 搜索引擎无法提供针对具体某个客户需求的搜索结果。

2、1、2 聚焦爬虫

​ 针对通用爬虫的这些情况,聚焦爬虫技术得以广泛使用。聚焦爬虫,是"面向特定主题需求"的一种网络爬虫程序,它与通用搜索引擎爬虫的区别在于: 聚焦爬虫在实施网页抓取时会对内容进行处理筛选,尽量保证只抓取与需求相关的网页数据。

我们课程后续学习的,是 聚焦爬虫

2、2 Robots协议

​ robots是网站跟爬虫间的协议,用简单直接的txt格式文本方式告诉对应的爬虫被允许的权限,也就是说robots.txt是搜索引擎中访问网站的时候要查看的第一个文件。当一个搜索蜘蛛访问一个站点时,它会首先检查该站点根目录下是否存在robots.txt,如果存在,搜索机器人就会按照该文件中的内容来确定访问的范围;如果该文件不存在,所有的搜索蜘蛛将能够访问网站上所有没有被口令保护的页面。——百度百科

​ Robots协议也叫爬虫协议、机器人协议等,全称是“网络爬虫排除标准”(Robots Exclusion Protocol),网站通过Robots协议告诉搜索引擎哪些页面可以抓取,哪些页面不能抓取,例如:

淘宝:https://www.taobao.com/robots.txt

百度:https://www.baidu.com/robots.txt

3、请求与响应

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

浏览器发送HTTP请求的过程:

在这里插入图片描述

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

实际上我们通过学习爬虫技术爬取数据, 也是向服务器请求数据, 获取服务器响应数据的过程。

4、chrome 开发者工具

​ 当我们爬取不同的网站是,每个网站页面的实现方式各不相同,我们需要对每个网站都进行分析。那是否有一些通用的分析方法?我分享下自己爬取分析的“套路”。在某个网站上,分析页面以及抓取数据,我用得最多的工具是 Chrome 开发者工具

	Chrome 开发者工具是一套内置于 Google Chrome 中的 Web 开发和调试工具,可用来对网站进行迭代、调试和分析。因为国内很多浏览器内核都是基于 Chrome 内核,所以国产浏览器也带有这个功能。例如:UC 浏览器、QQ 浏览器、360 浏览器等。

接下来,我们来看看 Chrome 开发者工具一些比较牛逼的功能。

4、1 元素面板(Elements)

​ 通过元素(Element)面板,我们能查看到想抓取页面渲染内容所在的标签、使用什么 CSS 属性(例如:class=“middle”)等内容。例如我想要抓取我知乎主页中的动态标题,在网页页面所在处上右击鼠标,选择“检查”,可进入 Chrome 开发者工具的元素面板。

​ 通过这种方法,我们能快速定位出页面某个 DOM 节点,然后可以提取出相关的解析语句。鼠标移动到节点,然后右击鼠标,选择 “Copy”,能快速复制出 Xpath 、CSS selector 等内容解析库的解析语句。

4、2 控制台面板(Console)

控制台面板(Console)是用于显示JS和DOM对象信息的单独窗口。

在爬虫课程的js解密专题会用控制台功能调试运行js代码。

4、3 资源面板(Source)

在资源面板(Source)页面可以查看到当前网页的所有源文件。

在左侧栏中可以看到源文件以树结构进行展示。
在中间栏这个地方使用来调试js代码的地方。
右侧是断点调试功能区。
在后续js解密会用到资源面板的功能

4、4 网络面板(Network)

网络(Network)面板记录页面上每个网络操作的相关信息,包括详细的耗时数据、HTTP 请求与响应标头和 Cookie,等等。这就是我们通常说的抓包。

4、4、1 工具栏

Stop recording network log

默认情况下,只要开发者工具在开启状态,会记录所有的网络请求,当然,记录都是在Network 面板展示的。红色表示开启,灰色表示关闭。

Clear

清空所有数据,每一次重新分析是都需要清空之前的数据。

Filter

数据包过滤器。红色表示打开,蓝色表示关闭。

经常来使用它来过滤出一些 HTTP 请求,例如过滤出使用 Ajax 发起的异步请求、图片、视频等。

最大的窗格叫 Requests Table,此表格会列出了检索的每一个 HTTP 请求。默认情况下,此表格按时间顺序排序,最早的资源在顶部。点击资源的名称可以显示更多信息。

Requests Table参数:

  • **all:*所有请求数据(图片、视频、音频、js代码、css代码
  • **XHR:**XMLHttpRequest 的缩写,是ajax技术的核心,动态加载完成经常分析的一个内容
  • **CSS: **css样式文件
  • **JS:**JavaScript文件,是js解密常分析的一个页面
  • Img: Images 图片文件
  • Font: 字体文件(字体反扒)
  • DOC : Document,文档内容
  • **WS: **WebSocket,web端的socket数据通信,一般用于一些实时更新的数据
  • **Manifest:**显示通过manifest缓存的资源。包括很多信息,如js库文件会显示文件地址、大小和
    类型;

Search

搜索框,只要在 ALL 里面出现的过的内容,就可以被直接搜索到。常用与数据检索与 JS 解密

Preserve log

保留日志。当分析在多个页面跳转的内容时,一定要勾上,不然当页面发生新的跳转是,历史数据全部都会被清空。保留日志,做爬虫是一定需要勾上

Disable cache

清空 JavaScript、css 文件的缓存,获取最新的。

Hide data URLs

用于是否隐藏dataurl,那么什么是dataurl呢?传统的通常img标记的src属性指定了一个远程服务器的资源,浏览器针对每个外部资源需要向服务器发送一次拉取资源请求。而Data URL技术是图片数据以base64字符串格式嵌入到了页面中,和HTML融为一体。

Has blocked cookies

仅显示具有阻止响应cookie的请求,此选项千万不要勾选。

Blocked Requests

仅显示被阻止的请求,此选项千万不要勾选。

3rd-party requests

仅显示来源与页面来源不同的请求,此选项千万不要勾选。

4、5 Requests详情:

请求头
Headers:是显示 HTTP 请求的 Headers,我们通过这个能看到请求的方式,以及携带的请求参数等。

  • General

    Request url :实际请求的网址
    Request Method: 请求方法
    Status Code :状态码,成功时为 200

  • Response Headers

    服务器返回时设置的一些数据,例如服务器更新的cookie数据最新是在这里出现修改

  • Requests Headers

    请求体,请求不到数据的原因一般出在这里。反扒也是反扒请求体里面的数据
    Accept:服务器接收的数据格式(一般忽略)
    Accept-Encoding: 服务器接收的编码(一般忽略)
    Accept-Language: 服务器接收的语言(一般忽略)
    Connection: 保持连接(一般忽略)
    Cookies: cookies信息,是身份信息,爬取VIP资源是需要携带身份信息
    Host: 请求的主机地址
    User-Agent: 用户身份代理,服务器根据这个判断用户的大概信息
    Sec-xxx-xxx: 其他信息,可能没用,可能是反扒。具体情况具体分析*

Preview

​ Preview 是请求结果的预览。一般用来查看请求到的图片,对于抓取图片网站比较给力。

Response

​ Response 是请求返回的结果。一般的内容是整个网站的源代码。如果该请求是异步请求,返回的结果内容一般是 Json 文本数据。

此数据与浏览器展示的网页可能不一致,因为浏览器是动态加载的

Initiator

​ 请求发起所调用的堆栈

Timing

​ 请求与响应时间表

课外拓展HTTP 传输

https://mp.weixin.qq.com/s/aSwXVrz47lAvQ4k0o4VcZg

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/124752.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

视频讲解|含可再生能源的热电联供型微网经济运行优化(含确定性和源荷随机两部分代码)

1 主要内容 该视频为《含可再生能源的热电联供型微网经济运行优化》代码讲解内容,对应的资源下载链接为考虑源荷不确定性的热电联供微网优化-王锐matlab(含视频讲解),对该程序进行了详尽的讲解,基本做到句句分析和讲解…

wzsc_文件上传(条件竞争)

打开题目链接,很常见的文件上传框 经过尝试,发现上传东西后会调用upload.php,猜测文件被传到upload目录下 随便传了几个类型的文件,访问upload目录 发现.php文件以及.htaccess、.user.ini这种配置文件都没有传上去 但是通过抓包…

QT实现TCP服务器客户端的实现

ser: widget.cpp: #include "widget.h" #include "ui_widget.h"Widget::Widget(QWidget *parent): QWidget(parent), ui(new Ui::Widget) {ui->setupUi(this);//实例化一个服务器server new QTcpServer(this);// 此时&#xf…

开发调试管理系统遇到的问题大全错误解决大全收集

问题大全错误解决大全 多模块项目依赖中,项目启动失败-org.yaml.snakeyaml.error.YAMLException: java.nio.charset.MalformedInputException报错:Error: The project seems to require yarn but it‘s not installednpm ERR! fatal: Could not read fro…

python获取时间戳

使用 datetime 库获取时间。 获取当前时间: import datetime print(datetime.datetime.now()) . 后面的是微秒,也是一个时间单位,1秒1000000微秒。 转为时间戳: import datetimedate datetime.datetime.now() timestamp date…

g(x)=abx形式的函数最小二乘法计算方法

设函数,利用最小二乘法求解系数a和b: 设,,有 用最小二乘法求解和后,可得和: ,

「专题速递」数字人直播带货、传统行业数字化升级、远程协作中的低延时视频、地产物业中的通讯终端...

音视频技术作为企业数字化转型的核心要素之一,已在各行各业展现出广泛的应用和卓越的价值。实时通信、社交互动、高清视频等技术不仅令传统行业焕发新生,还为其在生产、管理、服务提供与维护等各个领域带来了巨大的助力,实现了生产效率和服务…

接口自动化中如何完成接口加密与解密?

加密是一种限制对网络上传输数据的访问权的技术。将密文还原为原始明文的过程称为解密,它是加密的反向处理。在接口开发中使用加密、解密技术,可以防止机密数据被泄露或篡改。在接口自动化测试过程中,如果要验证加密接口响应值正确性的话&…

【Java 进阶篇】JDBC 数据库连接池详解

数据库连接池是数据库连接的管理和复用工具,它可以有效地降低数据库连接和断开连接的开销,提高了数据库访问的性能和效率。在 Java 中,JDBC 数据库连接池是一个常见的实现方式,本文将详细介绍 JDBC 数据库连接池的使用和原理。 1…

10月4日作业

server #include "widget.h" #include "ui_widget.h"Widget::Widget(QWidget *parent): QWidget(parent), ui(new Ui::Widget) {ui->setupUi(this);//实例化一个服务器server new QTcpServer(this);connect(server, &QTcpServer::newConnection, …

阿里云新账户什么意思?老用户、产品首购详细说明

阿里云新账户、老账号、产品首购和同人账号什么意思?阿里云账号分为云新账户、老账户、产品首购、同人账号和同一用户,阿里云官方推出的活动很多是限制账号类型的,常见的如阿里云新用户,什么是阿里云新用户?是指从未在…

mysql面试题13:MySQL中什么是异步复制?底层实现?

该文章专注于面试,面试只要回答关键点即可,不需要对框架有非常深入的回答,如果你想应付面试,是足够了,抓住关键点 面试官:讲一讲mysql中什么是异步复制?底层实现? MySQL中的异步复制(Asynchronous Replication)是一种复制模式,主服务器将数据写入二进制日志后,无…