🗒️利用Python快速爬取知乎文章
00 分钟
2024-1-23
2024-4-5
type
status
date
slug
tags
summary
category
password
icon
😀
在浏览知乎的文章时,有些文章写得非常好。我们想保存下来。如果使用传统的复制粘贴,恐怕需要太多时间,那我们可以利用Python的爬虫技术,快速爬取大量知乎文章,将它保存成pdf文件。

解析页面

例如我想爬取以下网站,这是一个关于Python教程的一个文章。
首先,我们应该解析页面。解析页面只需复制文章里的一些内容,然后打开搜索。如果打开后没有内容显示,可以尝试刷新。
notion image
我们发现,他只返回过来一个数据包就是26304359。我们只需要请求这个就可以了。

代码实现步骤

导入第三方模块

如果没有安装可以打开cmd使用pip命令安装:pip install 模块名

发送请求

需要headers请求头参数以及目标数据包url,下图展示如何获取headers请求头。
notion image
以下是Python代码格式(字典),可以直接复制.
我们需要发送请求,就需要使用request.get()方法,因为这里知乎的请求方法也是GET。我们保持一致就好。
notion image
这里有两种写法都行,我个人习惯第一种。
但是千万不能这样写,这样会出现传参问题
写完之后我们可以print一下print(response),来检查有没有错误。
notion image
如果状态码为200,那就证明没有错误,一切正常。
如果是其他状态,可以看下表详细了解。
状态代码
描述
100
接受的请求正在处理,信息类状态码
2xx
成功,表示成功处理了请求的状态码
200
成功,服务器已成功处理了请求
3xx
重定向,表示要完成请求,需要进一步操作。通常这些状态代码用来重定向
301
永久性重定向,表示资源已被分配了新的 URL
302
临时性重定向,表示资源临时被分配了新的 URL
303
表示资源存在另一个 URL,用 GET 方法获取资源
304
未修改,自从上次请求后,请求网页未修改过。服务器返回此响应时,不会返回网页内容
4xx
请求错误,这些状态码表示请求可能出错,妨碍了服务器的处理
400
错误请求,服务器不理解请求的语法
401
表示发送的请求需要有通过 HTTP 认证的认证信息
403
禁止,服务器拒绝请求
404
未找到,服务器找不到请求网页
5xx
服务器错误,这些状态码表示服务器在尝试处理请求时发生内部错误。这些错误可能是服务器本身的错误,而不是请求的错误
500
服务器内部错误,服务器遇到错误,无法完成请求
503
表示服务器处于停机维护或超负载,无法处理请求

获取数据

请求数据过后,我们只需要print一下数据即可,具体方法如下
我们可以将收集到的数据用html_data接收。

解析数据

解析标题

常用的解析数据方法有:CSS、正则表达式、bs4、Xpath这里以CSS为例
首先需要将html_data转换成可解析对象。
先将标题提出来,我们可以通过开发者工具的元素标签快速定位标题标签。右侧就是CSS语法。
notion image
最后的代码应该这么写
一定要在CSS语法的结尾写上::text使他只匹配文字。
notion image
具体他俩有什么区别,可以看上图,最上面是我没加::text输出的,下面是我加上::text输出的

解析内容

notion image
如图,我们复制CSS语法。
notion image
会得到以上响应,其中包含文章内容。

保存数据

我们需要用到以下HTML前端模板,将它复制到你的Python里面。
然后我们将字符串格式化一下,把获取到的文章内容html传入到前端模板html_str
保存文件
这样,我们就得到了一个HTML文件
notion image
但是会发现这和知乎原文章会有一些格式错误,还有一些图片未显示出来。
我们需要获取知乎图片链接并进行一个替换。可以用正则表达式进行提取。
提取过后就用for循环遍历。
这样在运行就是保存图片了的文件了,如果需要PDF文件,可以上一些网站去批量转换。

🤗 总结归纳

  • 首先介绍了如何解析页面,通过复制文章里的一些内容,然后打开搜索,找到目标数据包的 URL。
  • 然后教程分为四个步骤,分别是:
    • 导入第三方模块,如 requests, parsel, re 等。
    • 发送请求,需要使用 headers 请求头参数和目标数据包 URL,使用 requests.get() 方法获取响应。
    • 获取数据,使用 response.text 方法获取网页的内容,保存到 html_data 变量中。
    • 解析数据,使用 parsel.Selector 方法将 html_data 转换成可解析对象,使用 selector.css 方法提取标题和内容,使用 re.findall 方法提取图片链接。
  • 最后介绍了如何保存数据,使用一个 HTML 前端模板,将文章内容格式化并传入,使用 open 方法创建一个 HTML 文件并写入内容,使用 for 循环遍历图片链接并替换掉原来的内容。

📎 参考文章

 
💡
有关Python安装或者使用上的问题,欢迎您在底部评论区留言,一起交流~
上一篇
免费高速顶配网页云手机
下一篇
国内聚合AI网站分享

评论
Loading...