我想爬取豆瓣小组热门帖子,包括帖子标题及内容,发帖时间,帖子下方评论,发帖人用户名及id,评论者用户名及id,请帮我写代码
时间: 2024-02-29 19:56:47 浏览: 298
基于HTML爬虫的豆瓣小组API(Python版本)+源代码+文档说明
好的,根据您的需求,我可以为您提供以下代码实现豆瓣小组热门帖子的爬取。需要注意的是,豆瓣网站的反爬虫机制比较严格,请勿过于频繁地发送请求,否则可能会被封IP。
```python
import requests
from bs4 import BeautifulSoup
import re
import json
import time
# 构造请求头
headers = {
'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/58.0.3029.110 Safari/537.3',
'Referer': 'https://www.douban.com/group/explore'
}
# 获取小组热门帖子的URL
url = 'https://www.douban.com/group/explore'
response = requests.get(url, headers=headers)
html = response.text
soup = BeautifulSoup(html, 'html.parser')
href = soup.find('a', class_='lnk-random')['href']
url = 'https://www.douban.com' + href
# 获取小组热门帖子的JSON数据
response = requests.get(url, headers=headers)
data = json.loads(response.text)
# 遍历每个帖子
for item in data['res']['posts']:
post_url = item['url'] # 帖子详情页URL
post_title = item['title'] # 帖子标题
post_author_uid = item['author']['uid'] # 发帖人UID
post_author_name = item['author']['name'] # 发帖人昵称
post_create_time = item['create_time'] # 发帖时间
# 获取帖子详情页的HTML代码
response = requests.get(post_url, headers=headers)
html = response.text
soup = BeautifulSoup(html, 'html.parser')
# 获取帖子内容和评论
post_content = soup.find('div', class_='topic-content').get_text().strip() # 帖子内容
comments = []
for comment in soup.find_all('div', class_='reply-doc content'):
comment_content = comment.find('p').get_text().strip() # 评论内容
comment_author_uid = re.search(r'/people/(.*?)/', str(comment.find('a', class_='').get('href'))).group(1) # 评论人UID
comment_author_name = comment.find('a', class_='').get_text().strip() # 评论人昵称
comments.append({
'content': comment_content,
'author_uid': comment_author_uid,
'author_name': comment_author_name
})
# 打印帖子信息和评论信息
print('帖子标题:', post_title)
print('发帖人UID:', post_author_uid)
print('发帖人昵称:', post_author_name)
print('发帖时间:', time.strftime('%Y-%m-%d %H:%M:%S', time.localtime(post_create_time)))
print('帖子内容:', post_content)
print('评论信息:')
for comment in comments:
print('评论人UID:', comment['author_uid'])
print('评论人昵称:', comment['author_name'])
print('评论内容:', comment['content'])
print('====================================================================================')
```
其中,首先通过请求小组热门帖子的URL,获取小组热门帖子的JSON数据。然后遍历每个帖子,分别获取帖子详情页的HTML代码,提取帖子内容和评论信息,并打印输出。需要注意的是,由于豆瓣网站的反爬虫机制比较严格,因此在发送HTTP请求时需要添加合适的请求头,同时不能过于频繁地发送请求,否则可能会被封IP。
阅读全文