Python网络爬虫与浏览器请求响应机制详解:从基础到实战
用户通过浏览器(socket client)把自己的信息发送给服务器(socket server)。

服务器会接收请求,接着对用户发来的请求信息进行分析,之后返回数据,这些返回的数据里有可能包含其他链接,像图片、js、css 等。
浏览器接收 Response 后会解析其内容以展示给用户。爬虫程序模拟浏览器发送请求并接收 Response 后,需要提取其中的有用数据。
感兴趣 Python 或者正在学习的小伙伴,可以加入我们的 Python 学习群:784758214。这里有从 0 基础的 Python 脚本到 web 开发、爬虫、django、数据挖掘数据分析等方面的资料,从 0 基础到项目实战的内容都已整理好。送给每一位 Python 的小伙伴!每晚分享学习的方法,分享需要注意的小细节,分享学习路线规划,还分享利用编程赚外快的途径。快点击加入我们的 python 学习圈。
1.3.1 request
请求方式
常见的请求方式:GET / POST
请求的URL
url 是全球统一资源定位符,它可用于定义互联网上的一个唯一资源。比如:一张图片可以通过 url 被唯一确定;一个文件也能够用 url 来唯一确定;一段视频同样可以借助 url 实现唯一确定。
请求头
如果请求头中没有 user-agent 客户端配置,那么服务端有可能会将你当作一个非法用户 host 。
cookies:cookie用来保存登录信息
注意:一般做爬虫都会加上请求头。
请求头需要注意的参数:
请求体
如果请求体是 get 方式,那么请求体没有内容,因为 get 请求的请求体是放在 url 后面的参数中,是可以直接看到的。如果请求体是 post 方式,那么请求体就是 format data。
ps:
1、登录窗口,文件上传等,信息都会被附加到请求体内
登录时输入错误的用户名密码并提交,之后可以看到 post。而正确登录后,页面通常会发生跳转,此时无法捕捉到 post。
1.3.2 response
(1)响应状态码
200:代表成功
301:代表跳转
404:文件不存在
403:无权限访问
502:服务器错误
(2)response header
响应头需要注意的参数包括 Set-Cookie:BDSVRTM=0; path=/ ,它可能有多个,其作用是告诉浏览器将 cookie 保存下来。
(3)preview就是网页源代码
json数据
如网页html,图片
二进制数据等
二、基础模块 2.1 requests
requests 是一个 HTTP 库,它是用 Python 实现的,使用起来简单易用。它是由 urllib 升级而来的。
开源地址:…
中文API:…
2.2 re 正则表达式
在 Python 里利用内置的 re 模块去运用正则表达式。
缺点:处理数据不稳定、工作量大
2.3 XPath
Xpath 即 XML Path Language,它是一门能够在 XML 文档中查找信息的语言,并且可以用来对 XML 文档中的元素和属性进行遍历。
在 python 里主要借助 lxml 库去进行 xpath 获取。在框架中则不使用 lxml,而是在框架内直接运用 xpath 就行。
lxml 是一个用于处理 HTML 和 XML 的解析器。它的主要功能是对 HTML 和 XML 数据进行解析以及提取相关数据。
lxml 如同正则,是以 C 来实现的。它是一款性能颇高的 Python HTML/XML 解析器。我们能够运用之前所学的 XPath 语法,从而迅速地定位特定的元素以及获取节点信息。
2.4 BeautifulSoup
Beautiful Soup 如同 lxml ,它也是一个 HTML/XML 的解析器。其主要功能在于如何对 HTML/XML 数据进行解析与提取。
使用BeautifulSoup需要导入bs4库
缺点:相对正则和xpath处理速度慢
优点:使用简单
2.5 Json
适用于数据交互的场景,例如网站前台与后台之间的数据交互。
在 Python 中主要借助 json 模块去处理 json 数据。有一些专门的 Json 解析网站,比如:(此处可列举具体的解析网站,因未给出具体网站信息,暂无法准确列出)
…
2.6 threading
使用 threading 模块来创建线程。可以直接从 threading.Thread 进行继承。接着需要重写 __init__ 方法和 run 方法。
三、方法实例 3.1 get方法实例
demo_get.py
3.2 post方法实例
demo_post.py
3.3 添加代理
demo_proxies.py
3.4 获取ajax类数据实例
demo_ajax.py
3.5 使用多线程实例
demo_thread.py
四、爬虫框架 4.1 Srcapy框架
Scrapy 是用纯 Python 实现的。它是为了爬取网站数据而编写的。也是为了提取结构性数据而编写的。它是一个应用框架,用途非常广泛。
Scrapy 利用 Twisted’twɪstɪd异步网络框架来处理网络通讯,这样能加快我们的下载速度。它无需我们自己去实现异步框架,并且包含了多种中间件接口,能够灵活地满足各种需求。
4.2 Scrapy架构图 4.3 Scrapy主要组件
Scrapy Engine(引擎):它负责 Spider、ItemPipeline、Downloader、Scheduler 之间的通讯工作,同时也负责信号以及数据的传递等事宜。
Scheduler 负责接收引擎发来的 Request 请求,然后以一定方式进行整理排列以及入队操作,待引擎需要时,再将其交还给引擎。
下载器的职责是下载 Scrapy Engine 发送的所有 Requests 请求,并且把它获取到的 Responses 交还给 Scrapy Engine,接着由引擎把这些 Responses 交给 Spider 去处理。
Spider(爬虫)负责处理所有的 Responses,在其中分析并提取数据,获取 Item 字段所需要的数据,同时把需要跟进的 URL 提交给引擎,之后再次进入 Scheduler(调度器)。
Item Pipeline 负责处理 Spider 中获取到的 Item,并且在这里进行后期处理,包括详细分析、过滤以及存储等。
下载中间件:你可以将其视作一个能够进行自定义并扩展下载功能的组件。
Spider Middlewares(蜘蛛中间件):可以将其理解为一个能够进行自定义扩展以及操作引擎与 Spider 中间进行通信的功能组件。例如,它可以处理进入 Spider 的 Responses(响应),也可以处理从 Spider 出去的 Requests(请求)。
4.4 Scrapy的运作流程
引擎:Hi!Spider, 你要处理哪一个网站?
Spider:老大要我处理xxxx.com。
引擎:你把第一个需要处理的URL给我吧。
Spider:给你,第一个URL是xxxxxxx.com。
引擎告知调度器,它这里有一个 request 请求,希望调度器帮忙将其排序入队。
调度器:好的,正在处理你等一下。
引擎:Hi!调度器,把你处理好的request请求给我。
调度器:给你,这是我处理好的request
引擎让下载器按照老大的下载中间件的设置来下载这个 request 请求。
若下载失败:抱歉,此 request 下载失败了。接着引擎告知调度器,该 request 下载失败了,你需记录下来,稍后再进行下载。
引擎告知 Spider,这是已经下载好的东西,并且已经经过老大的下载中间件处理。你自己对其进行处理。需要注意的是,这儿的 responses 默认是交给 def parse()这个函数来处理的。
处理完毕数据之后,对于需要跟进的 URL,我有两个结果。一个是我需要跟进的 URL,另一个是我获取到的 Item 数据。
引擎说:“嗨!管道,我这里有个 item ,你帮我处理一下!调度器!这是需要跟进的 URL ,你帮我处理一下。然后从第四步开始循环,一直到获取完老大需要的全部信息。”
管道``调度器:好的,现在就做!
4.5 制作Scrapy爬虫4步曲 新建爬虫项目
scrapy 启动项目 mySpider 并明确目标,要编写 items.py 。
打开位于 mySpider 目录下的 items.py 来制作爬虫,这个爬虫的文件名为 spiders/xxspider.py。
scrapy 生成了一个名为 gushi365 的爬虫,它的目标是“gushi365.com”存储的内容,这些内容在 pipelines.py 中进行处理。
设计管道来存储爬取的内容。其中,在常用工具方面,有 5.1 fidder。
fidder是一款抓包工具,主要用于手机抓包。
5.2 XPath Helper
能帮助用户解决在获取 xpath 路径时无法正常定位等问题。
谷歌浏览器插件xpath helper 的安装和使用:
…
六、分布式爬虫 6.1 scrapy-redis
Scrapy-redis 提供了一些以 redis 为基础的组件,目的是为了更方便地实现 Scrapy 分布式爬取。安装 Scrapy-redis 可以使用 pip install scrapy-redis 命令。
6.2 分布式策略
Master 端(核心服务器)搭建了一个 Redis 数据库,它的职责是负责 url 指纹判重、Request 的分配以及数据的存储,而不负责爬取工作。
题外话
在这个科技飞速发展的元年,编程犹如许多人迈向无限可能世界的入场券。在众多的编程语言中,Python宛如那位极为出众的超级巨星,凭借其语法简洁且易于理解以及功能强大的特点,在众多语言中脱颖而出,成为全球最为热门的编程语言之一。
如果你对 Python 有兴趣,那么可以尝试我整理的这份 Python 全套学习资料。你可以通过微信扫描下方二维码来免费领取。
包含 Python 永久使用的安装包,还有 Python web 开发方面的内容,以及单纯的 Python 知识,以及 Python 数据分析相关的内容,同时涵盖人工智能、机器学习等学习教程。能引领你从毫无基础开始,进行系统性地学习 Python!
Python 所有方向的学习路线是零基础 Python 学习资源介绍的一部分。
Python 的所有方向路线是对 Python 常用技术点进行整理,从而形成各个领域的知识点汇总。它的用处在于,你能够依据上面的知识点去寻找对应的学习资源,以此保证自己学习得较为全面。
二、Python学习软件
工欲把事情做好,就必须先使工具锋利。以下这些就是学习 Python 常用的开发软件啦!
三、Python入门学习视频
有很多学习视频是适合 0 基础入门的。有了这些视频,就能够轻轻松松地开始学习 Python 了。
四、Python练习题
每节视频课后,都有对应的练习题哦,可以检验学习成果哈哈!
五、Python实战案例
光学理论是没有实际用处的。我们需要学会动手去敲代码,进行实际操作,这样才能把所学的知识运用到实际中。在这个过程中,可以找一些实战案例来学习。这份资料也包含在可以用于学习的内容之中。
六、Python面试资料
我们学会了 Python 之后,因为有了技能,所以就可以出去找工作啦!下面这些面试题,它们都来自阿里、腾讯、字节等一线互联网大厂,并且有阿里的大佬给出了权威的解答。刷完这一套面试资料,相信大家都能找到满意的工作。
七、资料领取
上述完整版 Python 全套学习资料已被上传至 CSDN 官方。若有需要的小伙伴,可自行通过微信扫描下方 CSDN 官方认证二维码,然后在其中输入“领取资料”,即可免费领取。