【初学疑惑】开发者工具可信度高吗?Python爬虫实战场景

举报
梦想橡皮擦 发表于 2023/02/21 17:38:07 2023/02/21
【摘要】 本篇博客是一个小小的 Python 爬虫实践,重点为解释在 Python 爬虫实战过程中,浏览器的开发者工具和代码抓取的网页源码,存在数据差异。翻译一下就是开发者工具和爬虫采集到的源码,不一样。⚡⚡ 学习注意事项 ⚡⚡文章会自动省略 http 和 https 协议,学习时请自行在地址中进行补充。目标站点域名为 uisdc.com,在下文统一用 橡皮擦 代替,学习时请自行拼接。 ⛳️ 实战场景...

本篇博客是一个小小的 Python 爬虫实践,重点为解释在 Python 爬虫实战过程中,浏览器的开发者工具和代码抓取的网页源码,存在数据差异。

翻译一下就是开发者工具和爬虫采集到的源码,不一样。

⚡⚡ 学习注意事项 ⚡⚡
文章会自动省略 httphttps 协议,学习时请自行在地址中进行补充。
目标站点域名为 uisdc.com,在下文统一用 橡皮擦 代替,学习时请自行拼接。

⛳️ 实战场景

如果你的目标是采集前文提及的站点,那你会碰到下述场景。使用开发者工具的【选择元素】操作时,选中目标元素,得到的 element 节点如下所示。

image.png

选定目标后,将得到一个名为 i+ 的标签。许多刚刚学习 Python 爬虫的爱好者可能不太了解这个标签的含义,这可能导致无法进行采集。

该标签其实是由前端 JS 脚本渲染而成,HTML 中并没有该标签,但我们要采集的目标文字是 “优秀网页设计”

使用下述代码进行尝试,为了使初学者也可以看懂,这里罗列详细步骤。

首先,我们需要在代码中导入 requests 库。在 Python 中,可以使用 import 关键字来实现这一点。

import requests

接下来,我们可以使用 requests 库中的 get() 方法来发起 HTTP 请求,并获取 橡皮擦.com/archives 网页的内容。

response = requests.get("https://www.uisdc.com/archives")

获取到网页内容后,我们可以使用 response.text 属性来获取网页的内容。

content = response.text

最后,我们可以打印出采集到的内容,以便查看采集到的数据。

print(content)

整个代码如下:

import requests

response = requests.get("https://www.uisdc.com/archives")
content = response.text
print(content)

如果您想要保存上文中采集到的网页源码,可以使用 Python 中的文件操作来实现。

首先,我们需要打开一个文件,并使用 write 方法将内容写入文件中。

with open("ca_demo.html", "w") as file:
    file.write(content)

在这里,我们使用了 Python 中的 with 关键字,以便在打开文件后自动关闭文件。我们指定了文件名为 "ca_demo.html",并使用了 "w" 模式来打开文件,这意味着我们将向文件中写入内容。

接下来,我们调用 file.write 方法将网页源码写入文件中。

最后,在 with 块结束后,文件会自动关闭。

整个代码如下:

import requests

response = requests.get("https://www.uisdc.com/archives")
content = response.text

with open("ca_demo.html", "w") as file:
    file.write(content)

这样,就可以在当前目录下找到名为 "ca_demo.html" 的文件,里面包含了采集到的网页源码。

这时就会碰到刚刚的问题,在 "ca_demo.html" 中检索 优秀网页设计 这几个字,根本找不到,而且 i+ 元素节点也找不到。

再回到开发者工具,在 i+ 节点前面的位置找到 data-val 内容,如下所示。
image.png

上图划线位置的开头可以看到这样的文字 %3Ci+class,了解过文字编码的同学,可以知道 %3C = <,这里的 % 关键字标识此处应用的是 URL 编码。
所以将 data-val 内容进行解码之后,得到下述信息。

<i+class="uname"+title="优秀网页设计">优秀网页设计</i>

image.png

到这里本 Python 爬虫案例已经可以继续实施了,在网站返回的源码中,搜索前文被 URL 编码过的数据,就可以进行数据的抓取了,当然,需要对得到的内容进行 URL 解码,示例代码如下。

import urllib.parse
decoded = urllib.parse.unquote("%3Ci+class%3D%22uname%22+title%3D%22%E4%BC%98%E7%A7%80%E7%BD%91%E9%A1%B5%E8%AE%BE%E8%AE%A1%22%3E%E4%BC%98%E7%A7%80%E7%BD%91%E9%A1%B5%E8%AE%BE%E8%AE%A1%3C%2Fi%3E")
print(decoded)

这里用到的是 urllib.parse 模块,提前导入模块,然后使用 urllib.parse.unquote() 方法来解码 URL 中的特殊字符。

📢📢📢📢📢📢
💗 你正在阅读 【梦想橡皮擦】 的博客
👍 阅读完毕,可以点点小手赞一下
🌻 发现错误,直接评论区中指正吧
📆 橡皮擦的第 791 篇原创博客

【版权声明】本文为华为云社区用户原创内容,转载时必须标注文章的来源(华为云社区)、文章链接、文章作者等基本信息, 否则作者和本社区有权追究责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。