我们已经准备好了,你呢?

2026我们与您携手共赢,为您的企业形象保驾护航!

了解网页构造网页通常包含三个核心要素,分别是超文本标记语言,层叠样式表,以及活动脚本语言

网页的整体布局,就是整个网站的骨干体系。含有“<”、“>”标记的都是属于 HTML 的标记,而且这些标记都是成双成对存在的。

常见的标签如下:

.. 表示标记中间的元素是网页

.. 表示用户可见的内容

表示框架

..

表示段落

..表示列表

..表示图片

..表示标题

..表示超链接

样式功能,图 1 的第 13 行<style type="text/css">,表明其后将引用一个 CSS,在这个 CSS 中,定义了相关的外表特征。

这个符号具有指示作用,它包含了所有的交互信息和各种视觉表现,同时详细说明了网络平台上的各项用途。

以人体作比,HTML 是人的身架,并且规定了人的口鼻耳等要安放何处,CSS 是人的容貌特征,譬如口鼻的模样,眼皮是内双还是外双,眼型是大是小,肤色是深是浅等,这些都在描述人的能力,比如跳舞、演唱或乐器演奏等技艺。

动手创建一个基础的网页,能够帮助你更深入地掌握 HTML 的知识。先启动一个文本编辑器,接着键入以下信息:

3爬虫与数据清洗入门与实战

键入程序,存下文本文件,接着更改文件名,并将拓展名定为"HTML.html"。

运行该文件后的效果,如图 2 所示。

图 2

这段代码仅运用了 HTML,读者能够自行更改代码里的中文,并且可以观察其效果。

几乎所有网站都设有名为 .txt 的文档来阐述爬虫的合规性,不过也有部分网站并未配置此类文件。针对未设定 .txt 的站点,网络爬虫能够采集未设密码保护的资料,即该站点的所有页面信息均可被获取。倘若网站存在 .txt 文件,则需审察其中是否包含禁止访客访问的内容。

以淘宝网为例,在浏览器中访问 ,如图  3 所示。

图 3 淘宝网的.txt文件内容

淘宝平台准许某些爬虫获取其部分网址信息,但倘若非授权者尝试,则完全限制其数据抓取行为,实现方式如下:

User-Agent:*

:/

这段指令的作用是,只让特定的网络采集程序获取信息,其余的采集程序都不被允许访问任何数据。

通过 库发起 请求要 安装 库,需先在 环境中进行 安装操作,具体步骤为打开 程序,点击“文件”选项,再从下拉列表中拾取“新建...”指令,参照图 4 中的指引执行。

图 4

打开“ ”(项目编译器)指令,核实正在使用的编译器,接着点击界面右上角的加号标志,如图 5 所示。

图 5

在搜索栏中键入,务必确保信息完整,否则可能会产生失误,接着点击位于下方左侧的“ ”(添加仓库)选项,如图 6 所示。

图 6

设置完毕后,界面会呈现“‘’ ”(表明库的请求已经安装到位),参见图 7;倘若安装未达预期,系统会给出警示内容。

图 7 安装成功

网页请求的运作方式包含两个主要阶段,首先是发起访问,其次才是获取内容,对于所有用户可见的页面,都必须先完成向服务端发起请求这一步骤。服务器收到客户提交的信息后,会检查信息的合规性,接着向客户发送反馈的信息,客户获取服务器反馈的信息,把信息呈现出来,就是大家常说的网页访问,如图 8 所示。

图 8 相应

网络请求数据的途径有两种: 获取型:最为普遍的途径,通常用来探取或者检索数据内容,多数站点都采用这种途径,反馈效率很高。 提交型:相较于获取型,增加了通过表单递交数据的能力,所以除了探取数据外,也能够调整数据。

所以,在写爬虫前要先确定向谁发送请求,用什么方式发送。

通过 GET 方法获取信息,复制首页第一条新闻的名称,在网页源代码中按下【Ctrl+F】打开查找功能,把名称输入到搜索栏,再按【Enter】

参照图 8,标题可以在源代码里找到,请求目标就是,调用方法为 GET(所有在源代码里的数据调用方法都是 GET),再结合图 9。

图 9(点此查看高清大图)

确定好请求对象和方式后,在 中输入以下代码:

引入requests这个模块,用于发送网络请求。
网址是http://www.cntour.cn/,这个链接是正确的,可以放心使用。
获取网页内容,使用Get请求,赋值给strhtml变量
print(strhtml.text)

运行结果如图 10 所示:

图 10 运行结果效果图(点此查看高清大图)

导入库的指令为 +库名称。在先前提到的环节里,导入库的指令是: 。

以获取数据为目的,应当运用库里的 get 方法,操作方法是在指定对象后,接续英文句号,例如:

.get

将获取到的数据存到 变量中,代码如下:

= .get(url)

此刻 它是一个网址实体,涵盖整个网页内容,不过当前目标仅是网页的文本部分,接下来的指令用于获取网页的文本内容:

.text

采用 POST 方法获取信息,先键入有道翻译的网址,然后打开有道翻译的网页。

按下 F12 快捷键,可以切换到开发者模式,接着点击 ,这时候界面是空白的,参照图 11 就能看到这个样子。

图 11

在“有道翻译”软件里键入“我热爱祖国”,点击“转换”按键,参照图 12 的样子

图 12

在调试模式下,先点一下那个按钮,再点一下标着XHR的按钮,就能查到翻译信息,参照图13的样子。

图 13

单击 ,发现请求数据的方式为 POST。如图 14 所示:

图 14

找到数据所在之处并且明确请求方式之后,接下来开始撰写爬虫。

先取出那个网址,然后把它存到名为url的变量里,具体操作是这样的:

url = ';

发送 POST 请求以获取信息的方法有别于发送 GET 请求的方式,发送 POST 请求时,必须事先创建请求头。

Form Data 中的请求参数如图 15 所示:

图 15

将其复制并构建一个新字典:

我深爱着中国,语言来源是简体中文,目标语言是英文,类型是字典,没有其他特殊标记,使用的盐值是二十五,没有签名,时间戳是二十五,没有视频编号,格式是JSON,版本是二点一,服务地址是fanyi.web,没有其他备注,是否测试模式为否

接下来使用 .post 方法请求表单数据,代码如下:

        #导入包

= .post(url,data=)

把文本形式的数据改写成 JSON 形式的数据,依照数据的构造,找出其中的内容,然后把翻译后的信息显示出来,程序如下:

import json
将响应文本解析为JSON格式,然后提取其中的内容数据
输出内容中翻译结果的第一个元素的第一个目标文本

使用 .post 方法抓取有道翻译结果的完整代码如下:

import requests        #导入requests包
import json
定义一个函数获取翻译日期,参数可选,名为word
网址是http://fanyi.youdao.com/translate_o, 带有参数smartresult=dict, 另外还有参数smartresult=rule
数据源包含以下内容:其中一项是索引,值为词;另一项是来源,标识为中文简体;还有一项是目标,标识为英文;智能结果格式为字典;客户端类型为翻译桌面版;盐值为15477056211258;签名码为b3589f32c38bc9e3876a570b8a992604;时间戳为1547705621125;版本号为b33a2f3f9d09bde064c9275bcb33d94e;文档类型为json;版本信息为2.1;关键词来源为翻译网页版;操作类型为实时翻译;不显示错别字结果。
    #请求表单数据
响应是执行请求时获取的,通过将地址传入并附带信息进行发送
    #将Json格式字符串转字典
内容通过json解析模块处理,转换成对应数据结构,结果赋值给变量content
    print(content)
    #打印翻译后的数据
输出翻译结果中的第一组数据,再选取该组中的第一个元素,最后提取该元素的目标文本部分
当特定条件成立时,程序将开始执行后续指令。
调用转换日期功能处理文本内容中国非常热爱

解析网页可以利用 Soup 库获取网页源代码,然后需要从代码中识别并取出信息。Soup 是一个专门用于处理网页内容的库,它的核心作用是获取网页数据。现在 Soup 已经被移植到 bs4 库里,所以在使用 Soup 之前,必须先安装好 bs4 库。

安装 bs4 库的方式如图 16 所示:

图 16

安装完 bs4 库之后,还需要安装 lxml 库,这是为了确保能够使用更高效的解析功能。如果没有安装 lxml 库,那么会自动采用标准库中的解析器。Soup 支持标准库中的 HTML 解析器,也支持一些第三方解析器,但 lxml 库的功能更为强大,运行速度也更快,所以建议优先安装 lxml 库。

配置其他组件后,输入这些指令,就能开始探索 Soup 的过程:

import requests        #导入requests包
从bs4包中导入BeautifulSoup类
网址是http://www.cntour.cn/,这个链接可以访问相关旅游信息。
strhtml=requests.get(url)
这个字符串经过解析后,转换成了一个对象,其格式为lxml,名称为soup
数据通过筛选获取,选取了特定标识符的内容,具体路径为从主元素开始,经过多层嵌套的子元素,最终定位到目标链接,结构层次清晰,包含了多个层级关系,每个层级都有明确的指定,最终结果以列表形式呈现,每个列表项都是一个可点击的链接
print(data)

代码运行结果如图 17 所示。

图 17(点此查看高清大图)

这个 Soup 库可以方便地获取网页内容,它作为 bs4 库的一部分存在,在必要时能够从 bs4 库中取用出来,它的使用方式是这样的:

from bs4

首先,HTML 文档会转换成某种编码格式,接着 Soup 会挑选出最恰当的解析器来处理这段文档,在此处明确使用 lxml 解析器进行解析工作。解析工作完成后,原本复杂的 HTML 文档会被整理成树状结构,并且构成该结构的每一个部分都是某种对象实例。接下来,把已经解析好的文档保存在一个新创建的变量 soup 里面,实现代码如下:

soup=(.text,'lxml')

下面用 (选择器)选取信息,选取信息须借助浏览器的开发者模式,将鼠标指针放在目标信息处并右键,接着在弹出菜单中点击“检查”指令,如图 18 所示:

图 18

接着在浏览器右边会出现开发者面板,右边被点亮的代码(参考图  19(b))和左边被点亮的文本数据(参考图  19(a))是相互对应的。右键点击右边被点亮的文本,在出现的菜单中挑选“复制”“复制”指令,就能实现路径的自动复制。

图 19 复制路径

将路径粘贴在文档中,代码如下:

主界面最上方的第一个选项是一个链接,它位于最外层容器的第一个子元素内,这个子元素包含一个列表,而该链接是这个列表的第一个列表项内部的内容

这条路线是首个被选中的路线,我们要收集全部头条新闻,所以把 li:nth-child(1)里冒号及后面的内容全部去掉,具体代码如下:

主界面左侧的导航栏里,包含多个功能分区,每个分区以文字形式呈现,并配有相应图标,点击文字可以进入具体页面

使用 soup. 引用这个路径,代码如下:

数据等于筛选结果,其中目标元素为id为main的div内部,接着是class为mtop的div,再往下找到div,然后是ul,最后是li中的a标签

整理并清洗完数据之后,得到了一段目标 HTML 代码,不过数据尚未提取,现在在相应位置输入如下代码:

for item in data:
    result={
标题:物品获取的文本内容
链接:物品的引用地址
    }
print(result)

代码运行结果如图 20 所示:

图 20(点此查看高清大图)

需要清楚要获取的信息包括标题和链接,标题位于 <a> 标签内部,通过括号方式获取标签中的文本内容,链接则存在于 <a> 标签的 href 属性里,使用 get() 方法提取属性值,在括号中明确指定属性名称为 'href'。

通过观察图 20 可以看出,文章的链接里包含一个数字编号,接下来将运用正则表达式来获取这个编号,所需要使用的正则符号包括:

\d匹配数字

+匹配前一个字符1次或多次

在 环境中使用正则表达式时,应当导入 re 模块,该模块无需单独安装,系统自带即可直接运用。在编辑器中键入以下指令:

import re
for item in data:
    result={
        "title":item.get_text(),
"链接":物品获取('目标地址'),
‘ID’:通过正则表达式检索,提取出连续数字字符组成的字符串,作为链接属性值,并返回所有匹配结果,用逗号分隔开
    }
print(result)

运行结果如图 21 所示:

图 21

运用正则表达式模块,首个参数输入匹配规则,次个参数指定目标字符串。

网络爬虫的行为类似人类浏览网页,目的是大量获取信息资料。随着数据采集规模的扩大,被访问的服务器会承受巨大负担,严重时可能导致系统瘫痪。服务器通常不希望自己的数据被他人随意获取。因此,网站会针对爬虫程序制定相应的防护措施。

服务器首要的辨别爬虫手段是检测连接的来源,用以区分是浏览器访问还是程序访问的。当判定为程序访问后,若访问频率显著增高,服务器将直接屏蔽该来源 IP。

那么应对这种初级的反爬机制,我们应该采取何种举措?

以先前构建的爬虫为例,在执行访问操作时,我们在开发者模式中能够查看到网址、表单数据,同时也能在相应区域设定浏览器的请求头信息,进行个性化封装。服务器端识别浏览器访问方式的关键依据,是检验请求头中的 User-Agent 字段是否属于预设范围,具体情况如图 22 所示。

图 22

所以,我们只需设计这个请求数据的构成。生成请求头信息就行,具体实现如下:

浏览器标识为该设备型号版本号,系统平台为,处理器架构为64位,内核版本为NT10.0,渲染引擎为,版本号为537.36,伪装为类似Gecko内核,实际内核版本为70.0.3538.110,渲染引擎标识仍为537.36

= .get(url,=)

写到这里,不少读者可能会觉得调整 User-Agent 非常容易。调整起来确实不复杂,不过普通人每秒只能浏览一张图片,而网络爬虫每秒却能处理大量图片,比如每秒能处理数百张图片,这样一来,服务器的负担就会明显增加。也就是说,如果在同一个 IP 地址下大量下载图片,这种行为肯定不符合普通人的操作习惯,因此很容易被系统封禁。

运作方式十分明了,需要计算各个地址的请求次数,当这个次数达到某个标准时,系统就会显示一个确认信息,假如是真人操作,就需要输入这个信息才能继续,而如果是机器行为,那么这个地址就会被禁止使用。

此事项的应对办法存在两种,首要措施为普遍采用的延长间隔,每三秒进行一次采集,相关实现代码如下:

time

time.sleep(3)

然而,我们开发网络爬虫的初衷是为了快速大量地获取信息,每三秒执行一次采集显然速度太慢。实际上,存在一个更根本的应对策略,即从根本上优化处理流程。

不论怎样连接,服务器的任务就是识别哪些行为是代码操作,接着就拦截来源地址。为了防止地址被封,数据获取时常常借助中转站点。相应地,也有特定的设置。

首先,要建立自己的代理 IP 集合,把这个集合用键值对的形式存入某个变量,接着把该变量传递给另一个变量,实现方式如下:

proxies={
协议类型为HTTP, 具体地址为10.10.1.10, 端口号为3128, 使用冒号进行分隔
使用https协议访问,地址为http://10.10.1.10:1080,
}
请求通过代理发送获取指定网址的内容,结果赋值给变量response

这个文章只是对 爬虫及其运作方式进行了简要说明,只能帮助初学者对 爬虫有个初步了解,并不能使人彻底熟悉 爬虫。假如您希望系统学习 爬虫的各项知识,应当转向《爬虫教程入门到精通》进行钻研。

二维码
扫一扫在手机端查看

本文链接:https://www.by928.com/chongqing/11335.html     转载请注明出处和本文链接!请遵守 《网站协议》
我们凭借多年的网站建设经验,坚持以“帮助中小企业实现网络营销化”为宗旨,累计为4000多家客户提供品质建站服务,得到了客户的一致好评。如果您有网站建设、网站改版、域名注册、主机空间、手机网站建设、网站备案等方面的需求,请立即点击咨询我们或拨打咨询热线: 13761152229,我们会详细为你一一解答你心中的疑难。

项目经理在线

我们已经准备好了,你呢?

2020我们与您携手共赢,为您的企业形象保驾护航!

在线客服
联系方式

热线电话

13761152229

上班时间

周一到周五

公司电话

二维码
微信
线