【发布时间】:2020-03-01 23:02:33
【问题描述】:
我正在尝试编写一个python 脚本,它将抓取http://www.fakenewsai.com/ 并告诉我一篇新闻文章是否是假新闻。我希望脚本将给定的新闻文章输入网站的url 输入字段并点击submit 按钮。然后,我想对网站进行抓取,以确定该文章是“假”新闻还是“真实”新闻,与网站上显示的一样。
我使用selenium 和ChromeDriver 成功地完成了这项工作,但是脚本非常慢(> 2 分钟)并且没有在Heroku 上运行(使用flask)。作为参考,这是我使用的代码:
from selenium import webdriver
import time
def fakeNews(url):
if url.__contains__("https://"):
url = url[8:-1]
if url.__contains__("http://"):
url = url[7:-1]
browser = webdriver.Chrome("static/chromedriver.exe")
browser.get("http://www.fakenewsai.com")
element = browser.find_element_by_id("url")
element.send_keys(url)
button = browser.find_element_by_id("submit")
button.click()
time.sleep(1)
site = "" + browser.page_source
result = ""
if(site[site.index("opacity: 1")-10] == "e"):
result = "Fake News"
else:
result = "Real News"
browser.quit()
return result
print(fakeNews('https://www.nytimes.com/2019/11/02/opinion/sunday/instagram-social-media.html'))
我尝试使用其他python 库来复制此代码,例如mechanicalsoup、pyppeteer 和scrapy。但是,作为python 的初学者,我并没有取得多大的成功。我希望有人可以通过解决方案为我指明正确的方向。
【问题讨论】:
-
您能澄清一下您在这里遇到的问题吗?据我了解-您的脚本运行正常,但是在部署到 Heroku 期间遇到了问题?我在我的计算机上运行了您的代码示例,它在 7 秒内运行,所以我不确定这需要 2 多分钟。代码在哪里似乎“暂停”时间最长?
-
在本地,脚本大约需要 30 秒才能运行我网站上的一个标题(使用
flask创建)。但是,当脚本针对一页上的 20 个标题集合运行时,需要 2-5 分钟。 -
在 Heroku 上,我收到以下错误:
The server encountered an internal error and was unable to complete your request. Either the server is overloaded or there is an error in the application. -
那么你的脚本长度在这里是有意义的。每个标题 30 秒乘以 20 个标题总共是 10 分钟,所以 2-5 分钟是抢断。如果你想提高性能,你可以重写你的脚本,不要每次都启动一个新的 Chromedriver 实例。相反,您可以只初始化一个 Chromedriver,然后针对单个实例运行您的标题脚本。似乎下面的其他一些用户对您有一些想法。
标签: python python-3.x selenium web-scraping automation