我对编程有点陌生,但是我一直试图通过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文件?
在此先感谢您,并感谢最终出现的语法错误。
答案 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)
}
}