如前所述,我们需要获取帖子的标题、作者以及赞数。首先导入 BeautifulSoup 和 Pandas 包,并为每种所需信息类型创建三个空数组。
from bs4 import BeautifulSoup
import pandas as pd
titles = []
upvotes=[]
authors = []
我们将使用 BeautifulSoup 解析 HTML 文档,编写以下代码:
content = driver.page_source
soup = BeautifulSoup(content, features="html.parser")
成功解析 HTML 文档并选择正确的选择器后,我们将提取标题、赞数和作者信息,并将其赋值给相应的数组:
for element in soup.findAll('div', attrs={'class': '_1oQyIsiPHYt6nx7VOmd1sz'}):
title = element.find('h3', attrs={'class': '_eYtD2XCVieq6emjKBH3m'})
upvote = element.find('div', attrs={'class': '_3a2ZHWaih05DgAOtvu6cIo'})
author = element.find('a', attrs={'class': '_23wugcdiaj44hdfugIAlnX'})
titles.append(title.text)
upvotes.append(upvote.text)
authors.append(author.text)
最后,我们将使用之前导入的 Pandas 包,将这些信息存储到 CSV 文件中。
df = pd.DataFrame({'Post title': titles, 'Author': authors, 'Number of upvotes': upvotes})
df.to_csv('posts.csv', index=False, encoding='utf-8')
就这样!让我们来看看导出的文件:
看起来包含我们所需的所有信息。
额外提示:有时,网站在首次加载时提供的数据并不完整。大多数情况下,数据加载操作会在用户向下滚动时触发。如果您需要向下滚动以获取更多数据,可以使用 .execute_script() 方法,如下所示:
scrollDown = "window.scrollBy(0,2000);"
driver.execute_script(scrollDown)
结语
希望你和我一样享受制作这个网页抓取工具的过程。编程并非总是充满乐趣,但编写这样的小脚本让我回想起初学编程时的时光,也让整个过程变得更有趣。
不过,本教程中构建的脚本尚无法胜任繁重的工作。它缺少几项关键功能,而这些功能正是让网页抓取体验流畅无瑕的关键。例如通过移动或住宅代理连接,以及破解验证码等。
如果您正在寻找更专业的数据提取方案,不妨了解一下 WebScrapingAPI 的功能,亲自验证它是否符合您的需求。该服务提供免费套餐,您只需投入 30 分钟的时间即可体验。
感谢您抽出时间阅读本文。祝您爬取顺利!