http协议¶

http超文本传输协议 html超文本标记语言

请求 请求行:请求方式,url地址,协议
请求头:服务器使用的附加信息
请求体:一些请求参数

响应
状态行:协议,状态码(200,404等)
响应头:客户端要使用的附加信息(数据加密,密钥,cookie等)
响应体:服务器返回的真正客户端要用到的内容(html,json)等

要格外注意请求头和响应头,一般隐含重要内容

请求头重要内容:
User-Agent:请求载体的身份标识(用啥发送的请求) Referer:防盗链(这次请求是从哪个页面来的,反爬用到) cookie:本地字符串数据信息(用户登录信息,反爬的token)

响应头重要内容: cookie: 各种奇怪的字符串:(需要经验,一般是token字样,防止攻击和反爬)

请求方式: 1.GET 2.POST

web请求过程¶

渲染
1.服务器渲染
2.客户端渲染:第一次请求只有html骨架,第二次请求拿到数据。在页面源代码中看不到数据

使用浏览器抓包工具
F12 检查

Elements(元素):显示网页的HTML结构,允许用户查看和编辑DOM元素及其属性。通过此面板,用户可以轻松地找到网页中的特定元素,并查看或修改其HTML代码和CSS样式。
Console(控制台):用于显示JavaScript错误、警告和日志信息。开发者可以在此面板中输入JavaScript代码进行测试或调试。
Network(网络):显示网页加载过程中请求的资源及其加载时间、大小等信息。这对于分析网页性能问题非常有用。
Sources(源代码):显示网页的源代码文件,包括HTML、CSS、JavaScript等。开发者可以在此面板中查看、编辑和调试源代码。
其他选项卡:根据浏览器的不同,还可能包括其他选项卡,如“Application(应用)”、“Performance(性能)”、“Memory(内存)”等,用于展示和分析网页的不同方面。

打开开发者工具:在网页上点击鼠标右键,然后选择“检查”或“查看元素”选项(具体表述取决于浏览器)。另外,也可以通过快捷键(如F12或Command+I)打开开发者工具。 选择Elements面板:在开发者工具窗口中,选择“Elements”面板以查看和编辑网页的HTML结构和CSS样式。 查找元素:在“Elements”面板中,可以使用鼠标在网页上悬停以突出显示对应的DOM元素,或者使用搜索框输入元素的标签名、类名或ID来快速定位元素。 编辑元素:找到目标元素后,可以双击其HTML代码或CSS样式进行修改。修改后,网页的显示效果会实时更新。 查看控制台信息:在“Console”面板中,可以查看网页加载过程中产生的JavaScript错误、警告和日志信息。这些信息有助于开发者定位和解决网页中的问题。 分析网络请求:在“Network”面板中,可以查看网页加载过程中请求的资源及其加载时间、大小等信息。通过分析这些信息,可以找出影响网页性能的关键因素。

网络爬虫库¶

一、HTTP请求库 urllib:这是Python标准库中的一个模块,提供了一系列用于处理URL的函数,可以方便地进行网页的下载和请求。它支持多种协议,包括HTTP、HTTPS、FTP等。 requests:这是一个基于urllib编写的HTTP库,提供了更简洁、易用的API。requests库支持GET、POST等多种HTTP请求方法,并且可以方便地设置请求头、cookies等信息。 httplib2:这是另一个Python HTTP库,提供了类似于urllib的功能,但具有更好的性能和更多的特性。 unirest:Unirest是一套可用于多种语言的轻量级的HTTP库,也支持Python。 aiohttp:这是基于asyncio实现的HTTP框架,支持异步操作。使用异步库进行数据抓取可以大大提高效率。

二、网页解析库 BeautifulSoup(bs4):这是一个HTML和XML的解析库,可以从网页中提取信息。BeautifulSoup提供了强大的API和多种解析方式,可以方便地遍历和搜索文档树。 lxml:这是一个高效的HTML和XML解析库,支持XPath解析方式。由于它是用C语言编写的,因此解析速度非常快。 pyquery:这是jQuery的Python实现,可以以jQuery的语法来操作解析HTML文档。它提供了类似于jQuery的选择器和操作方法,使得解析HTML变得更加简单。 cssselect:这个库用于解析DOM树和CSS选择器,可以与lxml等库结合使用来提取网页中的特定元素。

三、爬虫框架 Scrapy:这是一个功能强大的爬虫框架,可以满足简单的页面爬取需求。Scrapy提供了完整的爬虫流程和各种强大的功能,包括异步处理、自动化流程控制、网页解析、数据存储等。使用Scrapy可以轻松地构建和部署爬虫程序。 pyspider:这是一个强大的爬虫系统,支持分布式爬取和多种数据库存储。pyspider提供了丰富的配置选项和可扩展的插件机制,使得定制爬虫变得更加容易。 Cola:这是一个分布式爬虫框架,但项目整体设计可能存在一些问题,模块间耦合度较高。 Portia:这是基于Scrapy的可视化爬虫工具,可以通过图形界面来配置和生成爬虫程序。

四、其他相关库 Selenium:这是一个自动化测试工具,也可以用来进行网页抓取。Selenium可以模拟浏览器的行为进行网页抓取,特别适用于处理使用JavaScript加载内容的网站。但需要注意的是,由于使用了浏览器驱动,Selenium的效率相对较低。 Tesserocr:这是一个OCR库,在遇到验证码(图形验证码为主)的时候,可以直接用OCR进行识别。 Newspaper:这个库用于新闻、文章的提取和内容分析,可以方便地提取网页中的新闻或文章内容。

此外,还有一些用于处理特定任务的库,如处理Unicode文本的ftfy、进行字符串匹配的fuzzywuzzy、进行正则表达式加速的esmre等。这些库可以根据具体需求进行选择和使用。

NetWork¶

跟第二次请求有关:

fetch 定义: fetch是一个现代JavaScript API,用于发起网络请求并获取资源。它提供了一个基于Promise的接口,用于访问和操纵HTTP管道的一部分,如请求和响应。 用途: fetch主要用于在客户端(如浏览器)与服务器之间异步地请求和接收数据。它支持各种HTTP方法(如GET、POST等),并且可以发送和接收多种类型的数据(如JSON、文本、二进制数据等)。 优势: 简洁的API设计,使得发起请求和处理响应变得更加容易。 基于Promise的实现,支持异步操作,不会阻塞页面的其他功能。 提供了对请求和响应的细粒度控制,如设置请求头、处理响应状态等。

XHR(XMLHttpRequest) 定义: XHR是XMLHttpRequest的缩写,它是一种在客户端和服务器之间传输数据的技术。XHR对象允许Web应用程序与服务器交换数据,而无需重新加载整个页面,从而实现了页面的局部更新或异步数据交互。 用途: XHR主要用于在Web应用程序中实现Ajax(Asynchronous JavaScript and XML)功能。它允许Web页面在用户与页面交互时异步地请求和接收数据,从而提高了用户体验和页面性能。 工作原理: XHR对象通过创建和发送HTTP请求来与服务器进行通信。请求可以是GET、POST、PUT、DELETE等HTTP方法。服务器接收到请求后,会处理请求并返回响应。XHR对象可以接收并处理这些响应,然后根据需要对页面进行更新。 优势: 实现了页面的异步更新,无需重新加载整个页面即可获取新的数据。 支持多种数据格式和HTTP方法,提供了灵活的数据交互方式。 被所有主流浏览器支持,具有良好的跨平台兼容性。

fetch与XHR的比较 语法和API设计:fetch提供了更简洁和现代的API设计,而XHR则相对繁琐一些。fetch基于Promise实现,使得异步操作更加直观和易于管理。 功能和灵活性:XHR提供了更多的功能和灵活性,如支持超时设置、进度事件等。而fetch则需要通过其他方式(如使用AbortController处理超时)来实现这些功能。 浏览器兼容性:虽然现代浏览器都支持fetch和XHR,但在一些老旧浏览器中可能只支持XHR。因此,在需要考虑浏览器兼容性的情况下,XHR可能是一个更稳妥的选择。

Doc(Documents文档): 通常指的是HTML文档,它是网页的基本结构。HTML文档包含了网页的内容,如文本、图像、链接等,并通过HTML标签来定义这些内容。 在网络请求中,HTML文档通常是最先加载的,因为它定义了网页的其他资源(如JS和CSS文件)的位置和如何加载它们。

JS(JavaScript): JavaScript是一种用于创建动态和交互式网页的编程语言。它允许开发者在用户的浏览器上运行脚本,以改变网页内容、响应用户输入、动画效果等。 JS文件通常以.js扩展名保存,并通过