簡體   English   中英

使用 BeautifulSoup 和 Python 從任何網頁中提取正文

[英]Extract main text from any webpage using BeautifulSoup and Python

我正在編寫一些代碼(Python)來從網頁中抓取文本。 我的目標是找到一種方法來過濾/刪除網頁上不在主要文章中的段落(例如廣告、指向其他文章的鏈接等)。

到目前為止,我一直在使用.find_all("p")命令從文本中僅提取段落,盡管成功也刮掉了許多不在每篇文章的正文/正文中的基本段落。 這是我現在的代碼:

from urllib.request import Request, urlopen
from bs4 import BeautifulSoup

URLs = [
"https://www.elsoldetoluca.com.mx/local/proponen-sistemas-para-captar-agua-pluvial-en-el-edomex-6585661.html",
"https://www.elsoldetoluca.com.mx/local/agua-de-acuifero-del-valle-de-toluca-solo-debe-ser-para-uso-de-consumo-humano-especialista-4146232.html"
        ]

for url in URLs:
    req = Request(url, headers={"User-Agent": 'Mozilla/5.0'})
    page = urlopen(req)
    paragraphs = []
    htmlParse = BeautifulSoup(page.read(), 'lxml')    
    for para in htmlParse.find_all("p"):
        paragraph = para.get_text().replace("\n", " ")
        paragraphs = paragraphs + [paragraph]
         
    text  = str("\n\n".join(paragraphs)) 

所以我正在尋找一種巧妙的方法來過濾掉主文章中沒有的段落。 必須將此方法應用於任何網頁,因為我在約 100 個隨機網站上使用此代碼。 我一直在研究的事情是過濾包含某些單詞的段落,但是,我寧願不這樣做,因為這樣會遺漏很多信息/段落。 此外,我一直在考慮省略具有某些名稱的 HTML 部分(例如https://matix.io/extract-text-from-webpage-using-beautifulsoup-and-python/ ),但我發現這不是非常有效...

關於如何優雅地做到這一點的任何提示? 謝謝!

沒有聰明的方法來解決這個問題。 每個網站都有自己的結構和約定。 您可以嘗試使用一些正則表達式的黑名單方法,但它們都不會讓您滿意。 我知道您的問題是詢問如何使用 bs4 執行此操作,但我會建議另一種方法,即 trafilatura,如下所示:

pip install trafilatura
import trafilatura
downloaded = trafilatura.fetch_url('your url here')
trafilatura.extract(downloaded)

它將頁面的干凈內容作為字符串返回,而且速度很快!

參考這里: https ://trafilatura.readthedocs.io/en/latest/

暫無
暫無

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

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