技术标签: 爬虫 python Python学习记录 开发语言
如今我们所处的时代就是一个大数据时代,很多公式都在开展相关数据业务,但是人工智能,大数据中有一个至关重要的东西,那就是数据,但是我们的数据从哪里来呢?
在上面的来源中:人工的方式费时费力,免费的数据网站上的数据质量不佳,很多第三方的数据公司他们的数据来源往往也是爬虫获取的,所以获取数据最有效的途径就是通过爬虫爬取
今日热榜,一家并不是做新闻的公司,这个网站上的新闻数据从哪里来的呢?
通过点击,我们可以发现,他的新闻数据都是其他网站上的,在今日热榜上仅仅做了展示
如果后续我们要做一个网站,IT新闻热榜,是不是也可以这样做呢
网络爬虫(又被称为网页蜘蛛,网络机器人)就是模拟浏览器发送网络请求,接收请求响应,一种按照一定的规则,自动地抓取互联网信息的程序。
原则上,只要是浏览器(客户端)能做的事情,爬虫都能够做
根据被爬网站的数量的不同,我们把爬虫分为:
爬虫首先要做的工作就是获取数据的资源地址,有了准确的地址之后我们才能数据去进行发送请求
第二步要做的工作就是获取网页,这里就是获取网页的源代码。源代码里包含了网页的部分有用信息,所以 只要把源代码获取下来,就可以从中提取想要的信息了。
获取网页源代码后,接下来就是分析网页源代码,从中提取我们想要的数据。首先,最通用的方法便是采用正则表达式提取,这是一个万能的方法,但是在构造正则表达式时比较复杂且容易出错。 另外,由于网页的结构有一定的规则,所以还有一些根据网页节点属性、CSS选择器或 XPath来提取网页信息的库,如Beautiful Soup、pyquery、lxml 等。使用这些库,我们可以高效快速地从中提取网页信 息,如节点的属性、文本值等。 提取信息是爬虫非常重要的部分,它可以使杂乱的数据变得条理清晰,以便我们后续处理和分析数据。
提取信息后,我们一般会将提取到的数据保存到某处以便后续使用。这里保存形式有多种多样,如可以简单保 存为 TXT 文本或 JSON 文本,也可以保存到数据库,如 MySQL 和 MongoDB 等,也可保存至远程服务 器,如借助 SFTP 进行操作等。
URL 的全称为 Universal Resource Locator,即统一资源定位符。
列子:
https://www.baidu.com/item/10056474?fr=aladdin http://IP:port/资源路径/?wd=python#flg
协议 :这代表网页使用的请求协议
域名部分:该URL的域名部分为“www.baidu.com”。一个URL中,也可以使用IP地址作为域名使用:202.108.22.5
端口部分:跟在域名后面的是端口,域名和端口之间使用“:”作为分隔符。端口不是一个URL必须的部分,如果省略端口部分。
资源部分:从域名后的最后一个“/”开始到“?”为止,是资源部分
查询参数:从“?”开始到“#”为止之间的部分为参数部分,又称搜索部分、查询部分
其英文名称叫作 hypertext,我们在浏览器里看到的网页就是超文本解析而成的,其网页源代码是一系列 HTML 代码,里面包含了一系列标签,比如 img 显示图片,p 指定显示段落等。浏览器解析这些标签后,便形成了我们平常看到的网页,而网页的源代码 HTML 就可以称作超文本
在百度的首页 https://www.baidu.com/,中,URL 的开头会有 http 或 https,这个就是访问资源需 要的协议类型,有时我们还会看到 ftp、sftp、smb 开头的 URL,那么这里的 ftp、sftp、smb 都是指 的协议类型。在爬虫中,我们抓取的页面通常就是 http 或 https 协议的,我们在这里首先来了解一下这 两个协议的含义。
注意:
但是在爬虫中,爬虫只会请求url地址,对应的拿到url地址对应的响应(该响应的内容可以是html,css,js,图片等)
浏览器渲染出来的页面和爬虫请求的页面很多时候并不一样
所以在爬虫中,需要以url地址对应的响应为准来进行数据的提取
请求,由客户端向服务端发出,可以分为 4 部分内容:请求方法(Request Method)、请求的网址 (Request URL)、请求头(Request Headers)、请求体(Request Body)。
作用:让协议清楚的知道,客户端发送了一个什么类型的‘动作指令’
方 法 | 描 述 |
---|---|
GET | 请求页面,并返回页面内容 |
HEAD | 类似于 GET 请求,只不过返回的响应中没有具体的内容,用于获取报头 |
POST | 大多用于提交表单或上传文件,数据包含在请求体中 |
PUT | 从客户端向服务器传送的数据取代指定文档中的内容 |
DELETE | 请求服务器删除指定的页面 |
CONNECT | 把服务器当作跳板,让服务器代替客户端访问其他网页 |
OPTIONS | 允许客户端查看服务器的性能 |
TRACE | 回显服务器收到的请求,主要用于测试或诊断 |
请求的网址,即统一资源定位符 URL,它可以唯一确定我们想请求的资源。
Host | (主机和端口号) |
---|---|
Connection | (链接类型) |
Upgrade-Insecure-Requests | (升级为HTTPS请求) |
User-Agent | (浏览器名称) |
Accept | (传输文件类型) |
Referer | (页面跳转处) |
Accept-Encoding | (文件编解码格式) |
Cookie | (Cookie) |
x-requested-with | XMLHttpRequest (表示该请求是Ajax异步请求) |
请求体一般承载的内容是 POST 请求中的表单数据,而对于 GET 请求,请求体则为空。
响应,由服务端返回给客户端,可以分为三部分:响应状态码(Response Status Code)、响应头 (Response Headers)和响应体(Response Body)。
响应状态码
响应状态码表示服务器的响应状态,如 200 代表服务器正常响应,404 代表页面未找到,500 代表服务器内部发生错误。在爬虫中,我们可以根据状态码来判断服务器响应状态,如状态码为 200,则证明成功返回数据,再进行进一步的处理,否则直接忽略。
常见的状态码及其原因
状态码 | 说 明 | 详 情 |
---|---|---|
100 | 继续 | 请求者应当继续提出请求。服务器已收到请求的一部分,正在等待其余部分 |
101 | 切换协议 | 请求者已要求服务器切换协议,服务器已确认并准备切换 |
200 | 成功 | 服务器已成功处理了请求 |
201 | 已创建 | 请求成功并且服务器创建了新的资源 |
202 | 已接受 | 服务器已接受请求,但尚未处理 |
203 | 非授权信息 | 服务器已成功处理了请求,但返回的信息可能来自另一个源 |
204 | 无内容 | 服务器成功处理了请求,但没有返回任何内容 |
205 | 重置内容 | 服务器成功处理了请求,内容被重置 |
206 | 部分内容 | 服务器成功处理了部分请求 |
300 | 多种选择 | 针对请求,服务器可执行多种操作 |
301 | 永久移动 | 请求的网页已永久移动到新位置,即永久重定向 |
302 | 临时移动 | 请求的网页暂时跳转到其他页面,即暂时重定向 |
303 | 查看其他位置 | 如果原来的请求是 POST,重定向目标文档应该通过 GET 提取 |
304 | 未修改 | 此次请求返回的网页未修改,继续使用上次的资源 |
305 | 使用代理 | 请求者应该使用代理访问该网页 |
307 | 临时重定向 | 请求的资源临时从其他位置响应 |
400 | 错误请求 | 服务器无法解析该请求 |
401 | 未授权 | 请求没有进行身份验证或验证未通过 |
403 | 禁止访问 | 服务器拒绝此请求 |
404 | 未找到 | 服务器找不到请求的网页 |
405 | 方法禁用 | 服务器禁用了请求中指定的方法 |
406 | 不接受 | 无法使用请求的内容响应请求的网页 |
407 | 需要代理授权 | 请求者需要使用代理授权 |
408 | 请求超时 | 服务器请求超时 |
409 | 冲突 | 服务器在完成请求时发生冲突 |
410 | 已删除 | 请求的资源已永久删除 |
411 | 需要有效长度 | 服务器不接受不含有效内容长度标头字段的请求 |
412 | 未满足前提条件 | 服务器未满足请求者在请求中设置的其中一个前提条件 |
413 | 请求实体过大 | 请求实体过大,超出服务器的处理能力 |
414 | 请求 URI 过长 | 请求网址过长,服务器无法处理 |
415 | 不支持类型 | 请求格式不被请求页面支持 |
416 | 请求范围不符 | 页面无法提供请求的范围 |
417 | 未满足期望值 | 服务器未满足期望请求标头字段的要求 |
500 | 服务器内部错误 | 服务器遇到错误,无法完成请求 |
501 | 未实现 | 服务器不具备完成请求的功能 |
502 | 错误网关 | 服务器作为网关或代理,从上游服务器收到无效响应 |
503 | 服务不可用 | 服务器目前无法使用 |
504 | 网关超时 | 服务器作为网关或代理,但是没有及时从上游服务器收到请求 |
505 | HTTP 版本不支持 | 服务器不支持请求中所用的 HTTP 协议版本 |
响应头
响应头包含了服务器对请求的应答信息,如 Content-Type、Server、Set-Cookie 等。下面简要说明一
些常用的头信息。
响应体
最重要的当属响应体的内容了。响应的正文数据都在响应体中,比如请求网页时,它的响应体就是网页的 HTML 代码;请求一张图片时,它的响应体就是图片的二进制数据。我们做爬虫请求网页后,要解析的内容就是响应体
在浏览器开发者工具中点击 预览,就可以看到网页的源代码,也就是响应体的内容,它是解析的目标。在做爬虫时,我们主要通过响应体得到网页的源代码、JSON 数据等,然后从中做相应内容的提取。
将开发者工具的语言设置成中文:打开开发者工具后点击设置图标 – 在外观一栏将语言设置成中文
第一框:定位元素代码位置,方便快速选中html标签信息(也可以直接在你想看的数据鼠标右击点击检查)
第二个框:是用于屏幕适配的,也就是传说中的chrom能够调试各种移动设备的屏幕分辨率。
元素面板:该标签使用来查看页面的HTML标签元素的,能够也就是查看源码,我们可以看到布局,可以看到用到的样式,还有用到的链接等等。
控制台面板:这个就是一个web控制台
源代码面板:这个是显示资源文件的
网络面板:这个就是抓包常用的工具,可以拦截客户端和服务端的交互数据信息
网络面板的请求资源面板
查看具体的资源请求
通过点击某个资源的Name可以查看该资源的详细信息,根据选择的资源类型显示的信息也不太一样,可能包括如下Tab信息:
表头 该资源的HTTP头信息。
在Headers标签里面可以看到URL、请求方法、状态码、远程地址 等基本信息和详细的http响应头、http请求头等信息。
载荷 请求地址的查询关键字和post请求携带的参数信息
预览 根据你所选择的资源类型(JSON、图片、文本)显示相应的预览。
响应 显示HTTP的Response信息。
启动器 标记请求是由哪个对象或进程发起的(请求源)
时间 显示资源在整个请求生命周期过程中各部分花费的时间。
Cookies 显示资源HTTP的Request和Response过程中的Cookies信息。
如果选择的资源在Request和Response过程中存在Cookies信息,则Cookies标签会自动显示出来,在里面可以查看所有的Cookies信息。
在浏览网站的过程中,我们经常会遇到需要登录的情况,有些页面只有登录之后才可以访问,而且登录之后可以连续访问很多次网站,但是有时候过一段时间就需要重新登录。还有一些网站,在打开浏览器时就自动登录了,而且很长时间都不会失效,这种情况又是为什么?其实这里面涉及会话(Session)和 Cookies 的相关知识,本节就来揭开它们的神秘面纱
在了解会话和 Cookies 之前,我们还需要了解 HTTP 的一个特点,叫作无状态。
会话
会话,其本来的含义是指有始有终的一系列动作 / 消息。比如,打电话时,从拿起电话拨号到挂断电话这中间的一系列过程可以称为一个会话。
Cookies
Cookies 指某些网站为了辨别用户身份、进行会话跟踪而存储在用户本地终端上的数据。
Cookies 列表
参考:http://c.biancheng.net/socket/
什么是 Socket?
Socket又称"套接字",应用程序通常通过"套接字"向网络发出请求或者应答网络请求,使主机间或者一台计算机上的进程间可以通讯。
三次握手 四次挥手
包与包之间的交换 TCP 协议
方法 | 描述 |
---|---|
connect( (host,port) ) | host代表服务器主机名或IP,port代表服务器进程所绑定的端口号。 |
send | 发送请求信息 |
recv | 接收数据 |
import socket
import re
# 获取到资源地址
url = 'http://image11.m1905.cn/uploadfile/2021/0922/thumb_0_647_500_20210922030733993182.jpg'
# 创建套接字对象
client = socket.socket()
# 创建连接
client.connect(('image11.m1905.cn', 80))
# 构造http请求
http_res = 'GET ' + url + ' HTTP/1.0\r\nHost: image11.m1905.cn\r\nUser-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/104.0.0.0 Safari/537.36\r\n\r\n'
# 发送请求
client.send(http_res.encode())
# 建立一个二进制对象用来存储我们得到的数据
result = b''
data = client.recv(1024)
# 循环接收响应数据 添加到bytes类型
while data:
result += data
data = client.recv(1024)
print(result)
# 提取数据
# re.S使 . 匹配包括换行在内的所有字符 去掉响应头
images = re.findall(b'\r\n\r\n(.*)', result, re.S)
# print(images[0])
# 打开一个文件,将我们读取到的数据存入进去,即下载到本地我们获取到的图片
with open('小姐姐.png', 'wb')as f:
f.write(images[0])
注意
在HTTP1.0和HTTP1.1协议中都有对KeepAlive的支持。其中HTTP1.0需要在请求头中增加”Connection: keep-alive“ header才能够支持。所以默认情况下,Http1.1为Keep-alive,接收完一个报文后,TCP连接不关闭,Receive()还在等待接收数据而不返回;如果HTTP1.1版本的HTTP请求报文不希望使用长连接,则要在HTTP请求报文首部加上Connection: close
文章浏览阅读78次。原创作品,允许转载,转载时请务必以超链接形式标明文章 原始出处 、作者信息和本声明。否则将追究法律责任。http://gzsamlee.blog.51cto.com/9976612/1865381 Zabbix基本概述:Zabbix是一个基于WEB界面的提供分布式系统监视以及网络监视功能的企业级的开源解决方..._zabbix 各个服务的具体作用,数据怎么接收发送
文章浏览阅读214次。Docker入门与进阶实战(基于Java,通俗易懂,附源码) 拥有8年JAV..._java基础进阶 docker入门 实战
文章浏览阅读7.2k次,点赞7次,收藏9次。构思一个主题讨论数据仓库的构建方法论,包括数据仓库的价值、选型、构建思路,随着数据规模膨胀和业务复杂度的提升,大型企业需要构建企业级的数据仓库(数据湖)来快速支撑业务的数据化需求,与传统的数据库构建不通,数据仓库即是OLAP场景,偏于历史数据的存储/分析,用冗余存储换取数据价值;一、数据仓库和数据库的区别所有的应用系统都会涉及到数据库,针对数据库归纳和存放,也就是数据库的常见操作:增、删、改、查,那么为什么想要对企业数据进行分析,不能直接查询数据库,非要大费力气的去创建所谓的数据仓库和数据湖呢?._基础数据仓库的 价值
文章浏览阅读894次。VUE+ElementUi+nodeJs+koa2_vue+elementui+nodejs+koa2+mongodb全栈开发后台管理系统
文章浏览阅读43次。关注GitHub的人都知道,这个平台上面有太多优秀的值得学习的开源项目了,这里总结了2018上半年GitHub上最热门的开源项目。1: tensorflowhttps://github.com/tensorflow/tensorflowTensorFlow是一个使用数据流图进行数值计算的开源软件库。图节点表示数学运算,而图边表示在它们之间流动的多维数据数组(张量)..._build-your-own-vue
文章浏览阅读1.7w次。https://blog.csdn.net/qq_41058526/article/details/105291284亲测解决。_resolver error: error: connecting was canceled
文章浏览阅读1k次。选择开发操作系统的编程工具编程语言编程平台16位编程工具16位C语言编译器 - Borland C/C++ 3.116位汇编语言编译器 - MASM32 v1132位编程工具代码编辑器 - Visual Studio Community 201932位C语言编译器 - Visual Studio Community 201932位汇编语言编译器 - Visual Studio Community ..._选择开发系统的工具
文章浏览阅读2.5k次。http://zh.wikipedia.org/wiki/%E5%AE%89%E5%85%A8%E5%A5%97%E6%8E%A5%E5%B1%82安全套接层(Secure SocketsLayer,SSL)是一种安全协议,在網景公司(Netscape)推出首版Web浏览器的同时提出,目的是为网络通信提供安全及数据完整性保障,SSL在传输层中对网络通信进行加密。SSL采用公开密钥技术,_netscape’ s secure sockets layers
文章浏览阅读356次。在Oracle 10g中,Oracle还提供了一种称为“Oracle Easy Connect Naming method"的连接方式。这种方法是对hostnaming method的一种改进,因为hostnaming meth..._oracle naming methods
文章浏览阅读208次。IT时报见习记者 陶泳“来来,机器往下一点,再加入一个编程命令就可以完成整套设计了。”6月4日下午,优傲机器人位于上海南京西路的办公室里,一群毫无AI基础的记者们在短短一个小时的培训后都“变身”编程高手,在一个类似平板电脑的操作台上进行简单操作之后,一个个像人类手臂一样的协作机器人便可以根据指令完成类似搬运物品等各种操作。如此简单的操作,正是北汽李尔选择优傲机器人(Universal Robots..._协作机器人编程方法
文章浏览阅读1.6k次,点赞2次,收藏9次。欢迎来到glibc教程!本教程将介绍glibc (GNU C Library) 的基础知识和使用方法。glibc是一个标准的C语言库,用于GNU操作系统和其他类Unix系统,它提供了大量的基础函数和例程,对于大多数C程序的正确运行是必不可少的。让我们开始吧!_pkuseg glibc
文章浏览阅读5.2k次。1.谷歌浏览器步骤: f12(或者右击检查) --> 点击Network --> 选中Fetch/XHR(就可以看发往后端的请求了。)2.Microsoft Edge步骤: f12(或者右击检查) --> 点击(网络)Network --> 选中Fetch/XHR(就可以看发往后端的请求了。)..._edge查看网站请求