16.一只爬虫是如何炼成的-爬虫基础流程介绍

1. 一只爬虫是怎样炼成的

对于没接触过爬虫的伙伴们,肯定很好奇什么是 络爬虫虫有什么用的整个流程是什么教程将会介绍并展示一些典型爬虫手段,相信可以为你的爬虫学习道路点亮一座灯塔。

代码和图片调整至鼠标移上去放大,有BUG就是俺的,,,非BML的…

爬虫是一种在 页上获取数据的工具;

当你想要训练一个模型,但是缺少数据的时候,你是否渴望过把 页上你所见到的数据都下载下来是手动一个个下载、一个个CV会很慢很麻烦;

当你想要购买一个商品的时候,你是否想过把它从各个商城平台上拿下来,快捷的进行比价、分析性价比br>

当你需要训练一个计算机视觉模型,除了常用的数据集以外,你也可以通过爬取各大图库 站来组建自己的数据集;

当你学会它的时候,你可以在各大 站上为所欲为(bushi,相信大家都是合法公民,有良好的道德底线,还有很棒的自觉性,这里仅仅是玩笑)。


它一般有以下几个步骤

  • 寻找数据
  • 爬取数据
  • 数据处理与清洗
  • 数据存储

这些会在之后一一介绍,当然在此之前将先介绍可能会使用的爬虫工具,可以直接跳过代码部分直达!


每个模块的介绍方式为:

  • 知识点/工具介绍
  • 简单实战/练习
  • 总结与推荐学习资料

相比于各大教程,本教程更像是带大家走个流程,看个过程,目的是让大家了解爬虫的工作方式,一般没有其他教程详细,所以大家要结合其他教程食用!

接下来将以来介绍爬虫的基本流程,包含和

1.1 什么是爬虫/h2>

爬虫,即 络爬虫,大家可以理解为在 络上爬行的一只蜘蛛,互联 就比作一张大 ,而爬虫便是在这张 上爬来爬去的蜘蛛

定义再多也不好理解,我们直接先上手来体验一下

1.1.1 络请求的过程

在此之前先来认识一下 络请求

你访问一个页面的过程本质是你浏览器问相应的服务器要相应数据的过程,整个流程就像送信一样:

你的浏览器:

我是U浏览器,我的地址是xxx。我的使用者要看你的主页! —送至服务器A

服务器A:

好的,我给你邮过去,包裹里面有架子;说明书和装饰品、架子的控制器等等你看着要,你自己按照说明书摆好!别把东西丢了!说明书没有的再问我要! —回送给浏览器U,地址是xxx

你的浏览器:

架子这里差一个图片!

服务器A:

好的亲,已发送!

你的浏览器:

控制器少了燃料!没有燃料动不起来!

服务器A:

亲亲,已发送!

你的浏览器:

还少了个东西!

服务器A:

问服务器B要去!

你的浏览器:

拆行李 + 摆好:芜湖!一番折腾终于摆好这些东西了!小东西甄别致

如果稍微转换一下用词:

你的浏览器:

user-agent: U;:method: GET;:authority: 基本地址;:path:基本地址基础下的主页地址; —TCP连接时作为请求送至服务器A

服务器A:

好的,我给你邮过去,包裹里面有HTML(架子);CSS(说明书和装饰品)、Js(架子的控制器)等等你看着要,你自己按照说明书摆好!别把东西丢了!说明书没有的再问我要! —作为相应将数据送回

你的浏览器:

get 图片

get 数据

get js

post 数据

服务器A:

你的浏览器:

拼架子、渲染!页面出来了!

1.1.2 爬虫的奇妙比喻

当你打开浏览器访问一个时,你的浏览器会先根据你输入的去寻找到服务器的地址,然后疯狂的问服务器要零件,最后拼凑出整个页面!

为了得到数据,我们常常要伪装成浏览器问相应服务器要东西,如果两者之间没有什么约定好的验证手段(如果有也可以找规律破解),那么就像你QQ被盗了一样:


平时

:A,借我你的 玩玩!我想体验一下你刚买的新皮肤!

A:可以呀,给你

你的 被盗后

盗你 的人模仿你:A,借我你 玩一下,我想体验新皮肤!

A:可以呀,给你

现在一定看累了吧,那么我们小实战一下吧!

pypi是众多Python爱好者上传第三方库的平台,你可以看到目前最新的类库以及开发者数

点击进入pypi.org

可以看到这个 页灰色条中有四个数据,虽然你可能对他四个不太感兴趣,但我们仍然先尝试把他们想办法扒拉下来

因为这种玩意儿大体都相同,会扒拉一个就会扒拉一堆!

1.1.3.1 requests库介绍

python的requests库是基于标准库urllib封装的一个操作简单、功能强大的第三方库,模拟浏览器发送请求后返回 对象

requests 常用方法

方法 用途 参数
get 模拟发送get请求 url, params=None, **kwargs
post 模拟发送post请求 url, data=None, json=None, **kwargs
session 创建一个会话对象,会保存cookies

kwargs: 公共参数如:headers(头部信息): dict、proxies: {‘http’: ‘ip, 如:xxx.xxx.xx.xxx:xx’}、timeout(超时时间): int

responce 对象常用方法/属性

属性 介绍 例子
text 自动解析后的文本数据 str: ‘’
encoding 自动解析出的编码方式 str: ‘UTF-8’
url 所请求的url str: ‘https://pypi.org/’
content 响应得到的内容(二进制) bytes: b’
status_code 响应的状态码 int:200
headers 响应的头部信息 dict:{‘Connection’: ‘keep-alive’, …}
json() 将返回的数据按 格式解析 dict: {‘msg’: ‘ok’, …}
cookies 返回的cookies 一个类列表对象:

接下来将着重讲述、方法和对象

其他请求方式如:、、、、将不再赘述

更多的方法与参数请使用 函数与 函数查看

1.1.3.2 requests小任务

在上面我们演示请求了 ,那么现在请你利用 库直接请求和利用 对象请求

并将请求结果保存至 中,且查看

相信你已经完成了上述任务,而且还是用代码完成的。那么,你有没有设想过一条道路…

-> -> -> -> -> 完成任务!

拿到源代码/数据的手段千千万,不要拘泥于任何一种方法。八仙过海各显神通即可 ??

1.1.3.4 模拟发送请求小结

根据上述的学习我们知道一个web页面显示的一切都是浏览器发送请求到服务器后经过渲染显示出来的,那么爬虫的难点之一就在如何去模仿浏览器发送请求

  • 或许是请求头携带浏览器的版本标识,即User-Agent
  • 或许是每一次请求都携带cookies保持自己的登录状态
  • 或许是携带自己上一次访问的地址(防盗链),表示自己是“本站”访问的

爬虫的另一个难点就是寻找请求数据的地址。

这时我们往往需要追踪浏览器访问 页的请求过程,看某部分数据是浏览器请求的哪个接口得到的。直接爬取接口要比爬取整个页面更高效。

面向结果:

那么用 可不可做到相同的事情呢/p>

这就要提到几个常用的解析库了:

  • lxml
  • jsonpath
  • bs4

我们以 lxml 和 bs4 为例

1.1.4.2.1 lxml解析库介绍

XML和HTML的解析器,可以通过简单的 描述来获取节点对象,从而提取数据

1.1.4.2.2 XPath语法介绍
意义 举例
// 表示所有后代节点的缩写 /html//p 代表的意义有且不限于:/html/body/p、/html/body/div/p、/html/body/article/p、…
/ 取子元素 123 取span://div/span
取父元素,和目录一个道理 class为code的父节点://div[@class=“code”]/…/
./ 从当前节点查找
* 任意节点,但是只表示一个节点 //body/*/p 代表的意义有且不限于://body/div/p、//body/article/p、…
num 表示第几个节点(从 1 开始) //div//li[1]
@ 取属性值 如取div下a的链接://div/a/@href
[@] 按属性值查找 如所有有name属性的div://div[@name]、name为abc的div://div[@name=“abc”]
text() 取标签中间的文本 //div/text()
| 结果合并其他节点的集合
() 分组

xpath的其余轴参考:CSDN

好了,先了解这些,过来实战一下吧!

['#QAQ#']

                                                        

声明:本站部分文章及图片源自用户投稿,如本站任何资料有侵权请您尽早请联系jinwei@zod.com.cn进行处理,非常感谢!

上一篇 2022年11月20日
下一篇 2022年11月20日

相关推荐