提高美丽汤效率?

时间:2018-06-29 11:52:47

标签: python beautifulsoup

我创建了一个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)

0 个答案:

没有答案