我一直在尝试编写一个脚本,可能会从指定的YouTube视频评论部分中爬取用户名列表,并将这些用户名粘贴到.csv文件中。
以下是脚本:
from selenium import webdriver
import time
import csv
from selenium.webdriver.common.keys import Keys
from bs4 import BeautifulSoup as soup
driver=webdriver.Chrome()
driver.get('https://www.youtube.com/watch?v=VIDEOURL')
time.sleep(5)
driver.execute_script("window.scrollTo(0, 500)")
time.sleep(3)
html = driver.find_element_by_tag_name('html')
html.send_keys(Keys.END)
time.sleep(5)
scroll_time = 40
for num in range(0, scroll_time):
html.send_keys(Keys.PAGE_DOWN)
for elem in driver.find_elements_by_xpath('//span[@class="style-scope ytd-comment-renderer"]'):
print(elem.text)
with open('usernames.csv', 'w') as f:
p = csv.writer(f)
p.writerows(str(elem.text));
它一直在抛出第19行的错误:
return codecs.charmap_encode(input,self.errors,encoding_table)[0]
UnicodeEncodeError: 'charmap' codec can't encode character '\u30b9' in position 0: character maps to <undefined>
我在这里看到,这可能与Windows控制台处理Unicode有关,并且看到一个潜在的解决方案是下载和安装Unicode库包,但那也没有帮助。
有人能帮助我弄清楚我做错了什么吗?
PS。我正在使用最新版本的Python(3.7)。
非常感谢, Sergej。
'w'
打开一个文件(这将删除旧文件),并在其中写入一些内容,然后下一次循环时就会被删除。使用'a'
或者更好的方法是:打开文件一次,然后写入所有内容,最后关闭它 - 这样速度更快,不需要打开无数次来写一些名称。 - Patrick Artner