【发布时间】:2020-02-09 05:58:24
【问题描述】:
我对编程有点陌生,但我一直在尝试抓取一些网站来练习,但是,我总是遇到这个问题。代码很简单,如下所示。
from bs4 import BeautifulSoup
from selenium import webdriver
import csv
url = 'https://www.reddit.com/r/soccer/'
driver = webdriver.Chrome()
driver.get(url)
soup = BeautifulSoup(driver.page_source, 'html.parser')
post_box = soup.find_all('div', attrs={'class': '_1poyrkZ7g36PawDueRza-J'})
for info in post_box:
title = info.h3.get_text()
print(title)
filename = 'reddit_soccer.csv'
f = open(filename, 'w')
headers = 'Title\n'
f.write(headers + '\n')
f.write(title + '\n')
f.close()
现在,问题来了,这段代码给了我一个输出,其中包含 url 第一页中每个帖子的标题。但是当我在 IDE 中写 print (title) 时,它只返回一篇文章,恰好是页面上的最后一篇文章。几个小时以来,我一直试图弄清楚为什么会发生这种情况,但我找不到原因。
不是应该打印所有标题吗?如果不是...我应该如何将所有标题的输出写入 csv 文件?
在此先感谢,对于最终的语法错误,我们深表歉意。
【问题讨论】:
-
len(post_box)返回什么? -
嗨,谢谢您的回复。它返回“13”
-
你能把你的程序的实际输出发布在命令行中吗?
-
您的代码对我来说很好用。它成功打印了第一个标题。
-
您没有显示完整的代码。您的问题完全不同:在 CSV 编写器中。您必须将标题写在 in 循环中,而不是 循环之后。循环的每次迭代都会覆盖变量的值。
标签: python selenium beautifulsoup