我创建了一个Python脚本,该脚本返回本地下载的新闻文章(在本例中为BBC News)的标题和正文,但运行速度比我想要的慢。它使用for循环和Beautiful Soup中的decompose()函数来隔离和删除不需要的标签/元素。
该脚本需要易于修改,以使其能够针对其他新闻来源进行调整,这就是为什么我使用循环而不是硬编码的搜索词的原因。是否有比我目前使用的方法更好的方法来达到我想要的结果?
# Set things up... #
from bs4 import BeautifulSoup
import sys
import re
## Lists for the content decomposers ##
classList=['tags-title', 'share__title', 'group__title', 'top-stories-promo__title', 'features-and-analysis__title', 'group-title', 'navigation--footer__heading', 'blue-tit__title', 'orb-footer-lead', 'navigation__heading', 'vxp-recommended__title', 'vxp-related-content__title', 'vxp-mostpop__title']
styleList=['position: absolute; top: -999em']
stringList=['BBC navigation', 'Accessibility links']
##############################################################
# Load input file... #
textFile=sys.argv[1]
story = open(textFile)
fileBody=story.read()
soup = BeautifulSoup(fileBody, 'html.parser')
###############################################################
## Class Decomposer ##################################
for i in classList:
for item in soup.find_all(attrs={"class": str(i)}):
item.decompose()
########################################################
## Style Decomposer ###################################
for i in styleList:
for item in soup.find_all(style=str(item)):
item.decompose()
########################################################
## String Decomposer ##################################
for i in stringList:
for item in soup.find_all("h2", string=re.compile(str(i))):
item.decompose()
########################################################
for figure3 in soup.find_all("p", class_= True ):
figure3.decompose()
for figure3 in soup.find_all(style= True ):
figure3.decompose()
for figure2 in soup("img"):
figure2.decompose()
soupArticle=soup.find_all(['h1','h2','p'])
# Raw HTML output here #
#print(soupArticle)
#########################
links = [item.get_text() for item in soupArticle]
article = '\n\n'.join(links)
cleanOutputEnc=article.encode('utf-8')
print(cleanOutputEnc)