如何解决滚动雅虎财经新闻
因此,我正在一个小项目中,我在某个特定公司上刮刮Yahoo财经新闻,并对其进行一些数据分析,以了解新闻情绪如何影响股票表现。我正在尝试无限地刮擦和滚动直到它停止,但是,我在尝试刮擦超过第一张滚动条时遇到了麻烦。
我正在使用硒来帮助我。我一直在到处寻找帮助,但似乎是因为每次向下滚动时都会逐渐加载新闻结果,因此事情变得更加复杂。
import time
from selenium import webdriver
from webdriver_manager.chrome import ChromeDriverManager
from bs4 import BeautifulSoup
# Web scrapper for infinite scrolling page
url = "https://finance.yahoo.com/quote/company/press-releases?p=company"
driver = webdriver.Chrome(ChromeDriverManager().install())
driver.get(url)
time.sleep(2) # Allow 2 seconds for the web page to open
scroll_pause_time = 2
screen_height = driver.execute_script("return window.screen.height;") # get the screen height of the web
i = 1
SCROLL_PAUSE_TIME = 0.5
last_height = driver.execute_script("return document.body.scrollHeight")
while True:
driver.execute_script("window.scrollTo(0,document.body.scrollHeight);")
time.sleep(SCROLL_PAUSE_TIME)
new_height = driver.execute_script("return document.body.scrollHeight")
if new_height == last_height:
break
last_height = new_height
##### Extract Article Titles #####
titles = []
soup = BeautifulSoup(driver.page_source,"html.parser")
for t in soup.find_all(class_="Cf"):
a_tag = t.find("a",class_="Fw(b)")
if a_tag:
text = a_tag.text
titles.append(text)
解决方法
这不是硒中的最佳自动化实践
由于多种原因,不建议使用WebDriver登录Gmail和Facebook等网站。除了违反这些网站的使用条款(您可能会面临帐户被关闭的风险)之外,它的运行速度缓慢且不可靠。
理想的做法是使用电子邮件提供商提供的API,或者对于Facebook,使用开发人员工具服务,该服务公开用于创建测试帐户,朋友等的API。尽管使用API似乎有些额外的工作,但您会在速度,可靠性和稳定性上得到回报。该API也不太可能更改,而网页和HTML定位器经常更改,并且需要您更新测试框架。
在测试的任何时候使用WebDriver登录到第三方站点都会增加测试失败的风险,因为这会使您的测试时间更长。一般的经验法则是,更长的测试更加脆弱和不可靠。
符合W3C的WebDriver实施还使用WebDriver属性对导航器对象进行注释,以便可以缓解拒绝服务攻击。
,此示例代码来自我不久前参与的一个项目。希望它可以帮助您朝着正确的方向前进。
from bs4 import BeautifulSoup
import urllib.request
import pandas as pd
from pandas import DataFrame
resp = urllib.request.urlopen("https://www.cnbc.com/finance/")
soup = BeautifulSoup(resp,from_encoding=resp.info().get_param('charset'))
substring = 'https://www.cnbc.com/'
df = ['review']
for link in soup.find_all('a',href=True):
#print(link['href'])
if (link['href'].find(substring) == 0):
# append
df.append(link['href'])
#print(link['href'])
#list(df)
# convert list to data frame
df = DataFrame(df)
#type(df)
#list(df)
# add column name
df.columns = ['review']
df.columns
from nltk.sentiment.vader import SentimentIntensityAnalyzer
sid = SentimentIntensityAnalyzer()
df['sentiment'] = df['review'].apply(lambda x: sid.polarity_scores(x))
def convert(x):
if x < 0:
return "negative"
elif x > .2:
return "positive"
else:
return "neutral"
df['result'] = df['sentiment'].apply(lambda x:convert(x['compound']))
df['result']
df_final = pd.merge(df['review'],df['result'],left_index=True,right_index=True)
df_final
结果:
review result
0 review neutral
1 https://www.cnbc.com/business/ neutral
2 https://www.cnbc.com/2021/02/22/chinas-foreign... neutral
3 https://www.cnbc.com/2021/02/22/chinas-foreign... neutral
4 https://www.cnbc.com/evelyn-cheng/ neutral
.. ... ...
89 https://www.cnbc.com/banks/ neutral
90 https://www.cnbc.com/2021/02/17/wells-fargo-sh... neutral
91 https://www.cnbc.com/technology/ neutral
92 https://www.cnbc.com/2021/02/17/lakestar-found... neutral
93 https://www.cnbc.com/finance/?page=2 neutral
[94 rows x 2 columns]
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。