python爬取知乎文章_【Python3】利用selenium抓取知乎用户的文章

本文介绍了如何使用Python3的selenium库抓取知乎用户的文章信息,包括标题、链接、作者、点赞数和评论数,并存储到MongoDB数据库中。通过CSS选择器和正则表达式解析页面,最后展示了抓取成果。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

【背景】

前段时间,阅读知乎上一些用户写的文章的时候觉得阅读起来比较麻烦,不符合我的阅读感受。比如下边这个,我想阅读牛客网的文章(如图1所示),我会通过标题先进行筛选,但是这样滚动下滑太麻烦了,所以想着不如将标题信息爬下来,另外,点赞数和评论数也顺便抓取下来,这样还能看该用户被点赞数最多的文章是哪一篇。说干就干!图1 知乎用户牛客网的文章

【思路】

利用selenium抓取知乎用户的文章页面源码,接着用pyquery库来解析文章相关信息,并将其保存到MongoDB数据库中,通过MongoDB Compass这个可视化工具可以可视化的操作数据库,还可以进行数据的导入导出。

【涉及知识点】基本库的使用

selenium库、pyquery库、pymongo库的使用

CSS selector的使用

正则表达式

【预装库及软件】首先确保自己的电脑安装了MongoDB数据库。

MongoDB Compass软件自己视情况而定,如果常用命令行操作数据库的话,这个可以不安装,对我们的数据抓取没有影响。

确保你的Python3环境中有下边几个库,pymongo、selenium和pyquery要自己安装,可以直接用pip进行安装。

import re

import time

import pymongo

from selenium import webdriver

from selenium.common.exceptions import TimeoutException

from selenium

### 如何用 Python 爬取文章或问题的评论数据 要实现通过 Python 抓取乎上的文章或问题及其对应的评论数据,可以采用以下方法: #### 使用 Selenium 和 Requests 库 Selenium 是一种强大的工具,能够模拟浏览器行为并处理动态加载的内容。对于乎这种依赖 JavaScript 动态渲染页面的服务来说,Selenium 非常适用。 以下是基于 Selenium 的基本流程说明以及代码示例: 1. **获取目标 URL 并解析 HTML 数据** 可以先定位到乎的目标文章或者问题页面,并提取其 DOM 结构中的 JSON 数据部分[^2]。 2. **分析 JSON 数据结构** 根据已有的经验,乎的评论通常会嵌套在一个复杂的对象数组中。这些对象包含了评论者的用户名、头像链接、点赞数以及其他元信息[^3]。 ```python from selenium import webdriver import json import time def fetch_zhihu_comments(url): options = webdriver.ChromeOptions() options.add_argument(&#39;--headless&#39;) driver = webdriver.Chrome(options=options) try: driver.get(url) time.sleep(5) # 等待页面完全加载 # 获取包含评论的JSON字符串 data_elements = driver.execute_script("return document.querySelectorAll(&#39;script[type=\"application/json\"]&#39;)") for element in data_elements: raw_data = element.text.strip() if not raw_data.startswith(&#39;{&#39;): continue parsed_json = json.loads(raw_data) # 假设我们已经道评论存储的位置 comments_section = parsed_json[&#39;commentSection&#39;] if &#39;comments&#39; in comments_section: for comment in comments_section[&#39;comments&#39;]: author_name = comment[&#39;author&#39;][&#39;name&#39;] content = comment[&#39;content&#39;] print(f"Author: {author_name}, Comment: {content}") finally: driver.quit() fetch_zhihu_comments("https://www.zhihu.com/question/your_question_id") # 替换为目标URL ``` 上述脚本展示了如何利用 `webdriver` 加载网页并通过执行 JavaScript 来访问隐藏于 `<script>` 标签内的 JSON 数据。注意这里的路径可能因具体需求而异,需自行调整至实际位置。 #### 设置合理的请求间隔 由于频繁访问可能会触发反爬机制,在设计程序时应考虑加入随机等待时间来降低被封禁的风险。例如,默认设置每篇文章之间至少休息 16 秒以上,而在实际情况测试下平均每篇耗时约 33 秒左右[^1]。 另外针对图片资源下载也建议单独设定较长延时(如每次 6 秒),从而减少服务器压力同时保护自身账号安全。 --- ### 注意事项 - **合法性声明**: 在实施任何网络爬虫项目之前,请务必确认该操作符合网站服务条款及相关法律法规规定; - **IP 封锁风险评估**: 如果计划大规模采集,则要考虑代理 IP 切换策略以免遭到永久封锁;
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值