使用`requests`和`BeautifulSoup`库爬取知乎上的指定问题下的所有回答,并统计每个回答的点赞数,最后将结果保存为JSON文件
时间: 2024-11-05 22:32:53 浏览: 24
在Python中,你可以使用`requests`库来发送HTTP请求获取网页内容,然后利用`BeautifulSoup`库解析HTML文档提取所需信息。首先,你需要安装这两个库,如果你还没有安装,可以使用下面的命令:
```bash
pip install requests beautifulsoup4
```
以下是一个基本步骤,演示如何爬取知乎上指定问题的回答并统计点赞数:
1. 导入必要的库:
```python
import requests
from bs4 import BeautifulSoup
import json
```
2. 定义一个函数来获取问题详情页的HTML内容:
```python
def get_html(url):
try:
response = requests.get(url)
response.raise_for_status() # 检查请求状态码
return response.text
except (requests.exceptions.RequestException, ValueError) as e:
print(f"Error occurred: {e}")
return None
```
3. 解析HTML,找到所有的回答及其点赞数:
```python
def parse_answers(html):
soup = BeautifulSoup(html, 'html.parser')
answer_divs = soup.find_all('div', class_='QuestionAnswerItem__answer') # 可能需要根据实际HTML结构调整这个选择器
answers_data = []
for div in answer_divs:
upvote_count = div.find('span', class_='Iconfont icon-zan').text # 点赞数通常隐藏在一个icon元素内
answer_content = div.find('p', class_='Markdown').get_text().strip() # 获取回答文本
answers_data.append({
"content": answer_content,
"upvotes": upvote_count
})
return answers_data
```
4. 调用上述函数,获取并处理数据:
```python
def main(question_url):
html = get_html(question_url)
if html is not None:
answers = parse_answers(html)
# 统计点赞数并保存到json文件
result = {
"question": question_url.split('/')[-1], # 从URL中提取问题ID
"answers": answers
}
with open("answers.json", "w") as f:
json.dump(result, f, ensure_ascii=False)
# 使用时,传入问题页面的URL
main("https://www.zhihu.com/question/<your_question_id>")
```
记得替换 `<your_question_id>` 为你想要抓取的具体问题ID。
阅读全文