type
status
date
slug
tags
summary
category
password
icon
在浏览知乎的文章时,有些文章写得非常好。我们想保存下来。如果使用传统的复制粘贴,恐怕需要太多时间,那我们可以利用Python的爬虫技术,快速爬取大量知乎文章,将它保存成pdf文件。
解析页面
例如我想爬取以下网站,这是一个关于Python教程的一个文章。
首先,我们应该解析页面。解析页面只需复制文章里的一些内容,然后打开搜索。如果打开后没有内容显示,可以尝试刷新。
我们发现,他只返回过来一个数据包就是
26304359
。我们只需要请求这个就可以了。代码实现步骤
导入第三方模块
如果没有安装可以打开cmd使用pip命令安装:
pip install 模块名
发送请求
需要headers请求头参数以及目标数据包url,下图展示如何获取headers请求头。
以下是Python代码格式(字典),可以直接复制.
我们需要发送请求,就需要使用
request.get()
方法,因为这里知乎的请求方法也是GET。我们保持一致就好。这里有两种写法都行,我个人习惯第一种。
但是千万不能这样写,这样会出现传参问题
写完之后我们可以print一下
print(response)
,来检查有没有错误。如果状态码为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语法。
最后的代码应该这么写
一定要在CSS语法的结尾写上
::text
使他只匹配文字。具体他俩有什么区别,可以看上图,最上面是我没加
::text
输出的,下面是我加上::text
输出的解析内容
如图,我们复制CSS语法。
会得到以上响应,其中包含文章内容。
保存数据
我们需要用到以下HTML前端模板,将它复制到你的Python里面。
然后我们将字符串格式化一下,把获取到的文章内容
html
传入到前端模板html_str
。保存文件
这样,我们就得到了一个HTML文件
但是会发现这和知乎原文章会有一些格式错误,还有一些图片未显示出来。
我们需要获取知乎图片链接并进行一个替换。可以用正则表达式进行提取。
提取过后就用
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安装或者使用上的问题,欢迎您在底部评论区留言,一起交流~
- 作者:NGX
- 链接:https://080912.xyz/article/6bd524cd-791f-4e2d-98fe-23bd8699ad48
- 声明:本文采用 CC BY-NC-SA 4.0 许可协议,转载请注明出处。