📜  用Python和 BeautifulSoup 抓取 Reddit(1)

📅  最后修改于: 2023-12-03 15:11:14.971000             🧑  作者: Mango

用 Python 和 BeautifulSoup 抓取 Reddit

简介

Reddit是一个流行的社交网站,用户可以在其上分享和讨论各种话题,涉及各个领域,如科技、音乐、电影、体育和政治等等。本文将介绍如何使用Python和BeautifulSoup抓取Reddit上的数据,例如最热门的帖子、最热评论和最活跃的用户。

准备

在开始之前,我们需要先安装以下工具:

  • Python(我们建议使用Python 3,因为它在处理字符串和编码方面更加强大)
  • BeautifulSoup(一种Python库,用于从HTML和XML文件中提取数据)

安装方式:

pip install beautifulsoup4
分析网页结构

我们先打开Reddit主页(https://www.reddit.com),查看HTML源代码,并分析其结构。

我们可以看到Reddit主页的HTML结构和CSS规则非常复杂,不过我们只需要关注其中的一些元素,例如帖子标题和评论等等。在分析过程中,我们可以使用开发者工具(也称为浏览器内置的“检查元素”功能)来帮助我们查看HTML结构和CSS规则。

抓取Reddit数据

我们先来实现一个简单的功能:打印Reddit主页上帖子标题以及其链接。

from bs4 import BeautifulSoup
import requests

url = 'https://www.reddit.com'
response = requests.get(url)
soup = BeautifulSoup(response.text, 'html.parser')
titles = soup.find_all('h3', {'class': '_eYtD2XCVieq6emjKBH3m'})

for title in titles:
    print(title.text)
    print('https://www.reddit.com' + title.parent.parent['href'])

这段代码首先发送了一个GET请求到Reddit主页,然后使用BeautifulSoup来解析响应内容,并通过查找'class'属性为'_eYtD2XCVieq6emjKBH3m'的所有

标签,来获取帖子标题。接下来,我们遍历所有标题,并打印其文本和链接(链接可以从标题的父元素中获取),就可以得到以下内容:

My water filter grew something as a testament to its work. Not algae. More like pepper. Anyone know what it could be? 
https://www.reddit.com/r/NoStupidQuestions/comments/i16uw3/my_water_filter_grew_something_as_a_testament_to/

Prototype of the EUSSR police, circo 2017.
https://www.reddit.com/r/europe/comments/i16u10/prototype_of_the_eussr_police_circo_2017/

...

这样,我们就成功地使用Python和BeautifulSoup抓取了Reddit主页上的帖子标题和链接。

接下来,我们可以根据需要来修改代码,来获取Reddit上的其他数据,例如帖子作者、帖子创建时间、评论等等。

参考资料
  1. BeautifulSoup文档
  2. 使用Python和BeautifulSoup进行Web爬虫
  3. Reddit API文档
  4. 使用Python抓取Reddit数据和分析Reddit用户行为