簡體   English   中英

如何在沒有額外信息的情況下有效地從一堆網頁中提取文本

[英]How can I efficiently extract text from bunch for web pages without extra information

我有大約一百萬個網頁列表,我想高效地從這些頁面中提取文本。 目前,我在python中使用BeautifulSoup庫從HTML獲取文本,並使用request命令獲取網頁的html。 這種方法除了提取文本之外還提取了一些額外的信息,例如正文中是否列出了任何javascript。

您能否建議我任何合適且有效的方式來完成任務。 我看着草木,但看起來像是在爬特定的網站。 我們可以通過特定網頁列表獲取信息嗎?

先感謝您。

是的,您可以使用Scrapy以通用方式抓取一組URL。

您只需要在Spider的start_urls list屬性上設置它們,或重新實現start_requests spider方法以從任何數據源產生請求,然后實現您的parse回調以執行所需的通用內容提取。

您可以使用html-text從其中提取文本,並使用常規的Scrapy選擇器提取其他數據,例如您提到的數據。

匆忙中,您可以設置自己的解析器。 例如美麗的湯。 您可以從解析方法中調用此解析器。

要從通用頁面提取文本,我僅遍歷正文,不包括注釋等以及一些標記(如腳本,樣式等):

for snippet in soup.find('body').descendants:
    if isinstance(snippet, bs4.element.NavigableString) \
            and not isinstance(snippet, EXCLUDED_STRING_TYPES)\
            and snippet.parent.name not in EXCLUDED_TAGS:
        snippet = re.sub(UNICODE_WHITESPACES, ' ', snippet)
        snippet = snippet.strip()
        if snippet != '':
            snippets.append(snippet)

EXCLUDED_STRING_TYPES = (bs4.Comment, bs4.CData, bs4.ProcessingInstruction, bs4.Declaration)
EXCLUDED_TAGS = ['script', 'noscript', 'style', 'pre', 'code']
UNICODE_WHITESPACES = re.compile(u'[\t\n\x0b\x0c\r\x1c\x1d\x1e\x1f \x85\xa0\u1680\u2000\u2001\u2002\u2003\u2004'
                                 u'\u2005\u2006\u2007\u2008\u2009\u200a\u2028\u2029\u202f\u205f\u3000]+')

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM