使用BeautifulSoup和Selenium进行网络抓取时出现打印问题

时间:2020-02-08 21:07:27

标签: python selenium beautifulsoup

我对编程有点陌生,但是我一直试图通过Web抓取一些网站来进行练习,但是,我总是遇到这个问题。代码很简单,如下所示。


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文件?

在此先感谢您,并感谢最终出现的语法错误。

1 个答案:

答案 0 :(得分:2)

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

class Elemento
{
  constructor (numerito)
  {
    this.numero = document.getElementById(numerito).innerText
    this.boton = document.getElementById(numerito)
    this.escribir = this.escribir.bind(this) // add this line
  }

  escribir()
  {
    console.log(this.numero)
  }
}