问题描述
我正在研究一个AI项目,其中一个步骤是从在线商店获取约5,000篇文章。
我是一个初学者,所以请保持友好。我已经找到了一个非常容易从URL结构上进行刮取的网站-我只需要一个刮板就可以从该站点中提取整篇文章(我们将使用AI大量分析这些文章)。>
包含每篇文章文本的div在整个网站上都是相同的-“ col-md-12 description-content-wrap”。
有人知道一个简单的Python脚本,该脚本将简单地通过URL的.CSV,从每篇文章的上面列出的^ div中提取文本,并将其输出为纯文本吗?我找到了一些解决方案,但没有100%是我所需要的。
理想情况下,所有5,000篇文章都将被输出到一个文件中,但是如果需要将它们分开,也可以。预先感谢!
解决方法
一周前,我做了一些类似的事情。这是我想出的代码。
from bs4 import BeautifulSoup
import urllib.request
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']
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
df_final.to_csv('C:\\Users\\ryans\\OneDrive\\Desktop\\out.csv')
结果: