【问题标题】:Printing problem when webscraping with BeautifulSoup and Selenium使用 BeautifulSoup 和 Selenium 进行网页抓取时的打印问题
【发布时间】: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


【解决方案1】:

您没有显示完整的代码。你的问题在一个完全不同的地方:在作家身上。您必须在循环中写入标题,而不是在循环之后。循环的每次迭代都会覆盖变量的值。

filename = 'reddit_soccer.csv'
with open(filename, 'w') as f:
    headers = 'Title'
    f.write(headers + '\n')
    for info in post_box:
        title = info.h3.get_text()
        f.write(title + '\n')

【讨论】:

    猜你喜欢
    • 2020-09-13
    • 1970-01-01
    • 1970-01-01
    • 2022-11-07
    • 1970-01-01
    • 1970-01-01
    • 2022-11-10
    • 2018-03-26
    • 2021-11-02
    相关资源
    最近更新 更多