首页 > 解决方案 > 批量复制文章的刮刀

问题描述

我正在从事一个 AI 项目,其中一个步骤是从在线渠道获取约 5,000 篇文章。

我是一个初学者程序员,所以请善待。我发现了一个非常容易从 URL 结构中抓取的网站——我只需要一个可以从网站中获取整篇文章的抓取工具(我们将使用 AI 批量分析文章)。

包含每篇文章的文章文本的 div 在整个站点中都是相同的 - “col-md-12 description-content-wrap”。

有谁知道一个简单的 Python 脚本,它可以简单地通过一个 .CSV 的 URL,从每篇文章的上面列出的 ^ div 中提取文本,并将其输出为纯文本?我找到了一些解决方案,但没有一个是我需要的 100%。

理想情况下,所有 5,000 篇文章都将输出到一个文件中,但如果它们都需要分开,那也没关系。提前致谢!

标签: pythonweb-scrapingartificial-intelligencelarge-databulk

解决方案


大约一周前,我做了一些与此类似的事情。这是我想出的代码。

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')

结果:

在此处输入图像描述


推荐阅读