如何删除“baca”或从html中读取?

2024-10-01 07:17:03 发布

您现在位置:Python中文网/ 问答频道 /正文

我设法创建了一个简单的程序来浏览网址,并将提取的html翻译成英语。但是,对于这个特定的网站(下面的链接),”html.find\全部('p')”还提取嵌入锚定标记的不需要的'p'标记。你知道吗

示例1:我不想要的HTML

<p>Baca: <a href="https://nasional.tempo.co/read/1216929/soenarko-sarankan-kivlan-zen-berhati-hati-omongan-diviralkan">Soenarko Sarankan Kivlan Zen Berhati-hati Omongan Diviralkan</a></p>

示例2:我想要的HTML

<p>"Ya, jadi penangguhan penahanan ini, pertama kami memang mengajukan penangguhan penahanan," kata Ferry membuka sesi wawancara. Hari itu, Mabes Polri telah mengabulkan penanggungan penahanan terhadap Soenarko yang menjadi tersangka kepemilikan senjata ilegal.</p>

有没有一种方法可以让代码过滤掉示例1而只保留示例2?你知道吗

link = "https://nasional.tempo.co/read/1216914/moeldoko-penangguhan-penahanan-soenarko-bisa-diterima"

webpage_response = requests.get(link)
webpage = webpage_response.content
page = BeautifulSoup(webpage, "html.parser")

html_title = page.find("title")
title2 = html_title.get_text()
title = title2.strip("- Bisnis Tempo.co")

html = page.find(attrs={"itemprop": "articleBody"})
text = html.find_all("p")

Tags: https标记示例readtitlehtmlpagefind
3条回答

这里

import requests
from bs4 import BeautifulSoup

r = requests.get("https://nasional.tempo.co/read/1216914/moeldoko-penangguhan-penahanan-soenarko-bisa-diterima")
if r.status_code == 200:
    page = BeautifulSoup(r.content, "html.parser")
    html = page.find(attrs={"itemprop": "articleBody"})
    # find 'p' elements but without nested elements
    for item in html.find_all(lambda tag: tag.name == 'p' and len(list(tag.children)) <= 1):
        print(item)

输出

<p>"Panglima TNI kan pembina bagi para purnawirawan, jadi dengan pertimbangan-pertimbangan tersendiri Panglima melakukan itu," kata Moeldoko, saat ditemui di Gedung Krida Bakti, Komplek Istana Negara, Jakarta Pusat, Jumat, 20 Juni 2019. Ia mengapresiasi langkah Panglima memberikan jaminan penangguhan penahanan itu.</p>
<p>Moeldoko mengatakan meski saat ini berstatus tersangka kasus kepemilikan senjata ilegal, namun Soenarko tetap seorang purnawirawan TNI. "Pertimbangan-pertimbangan Panglima, pasti sudah dipertimbangkan masak-masak," kata Moeldoko.</p>
<p>Selain Hadi, penjamin penangguhan penahanan Soenarko adalah Menteri Koordinator Bidang Kemaritiman, Luhut Binsar Panjaitan. Kepala Biro Penerangan Masyarakat Mabes Polri Brigadir Jenderal Dedi Prasetyo mengatakan alasan Luhut bersedia menjamin penangguhan penahanan adalah karena Soenarko tokoh senior di TNI.</p>
<p>Menteri Koordinator Bidang Politik, Hukum, dan Keamanan Wiranto mengatakan senjata itu berasal dari Aceh. Senjata itu diperkirakan ada kaitannya dengan kerusuhan 22 Mei 2019.</p>

对于bs4.7.1,可以使用:not和:contains伪类选择器来指定包含特定文本时要排除的段落。在本例中,我将通过扩展页面中的排除测试文本并添加id来限制文章内容,从而使其更加健壮。你知道吗

from bs4 import BeautifulSoup as bs #4.7.1
import requests

r = requests.get('https://nasional.tempo.co/read/1216914/moeldoko-penangguhan-penahanan-soenarko-bisa-diterima/full&view=ok')
soup = bs(r.content, 'lxml')
paras = [p.text for p in soup.select('#isi p:not(:contains("Baca juga:"))')]
print(paras)

提供if条件以检查是否有任何“Baca”文本并跳过该文本。你知道吗

from bs4 import BeautifulSoup
import requests
link = "https://nasional.tempo.co/read/1216914/moeldoko-penangguhan-penahanan-soenarko-bisa-diterima"

webpage_response = requests.get(link)
webpage = webpage_response.content
page = BeautifulSoup(webpage, "html.parser")

html_title = page.find("title")
title2 = html_title.get_text()
title = title2.strip("- Bisnis Tempo.co")

html = page.find(attrs={"itemprop": "articleBody"})
items = html.find_all("p")

for item in items:
    if not ('Baca' in item.text):
        print(item)

或者可以使用decompose()函数来删除。你知道吗

from bs4 import BeautifulSoup
import requests
link = "https://nasional.tempo.co/read/1216914/moeldoko-penangguhan-penahanan-soenarko-bisa-diterima"

webpage_response = requests.get(link)
webpage = webpage_response.content
page = BeautifulSoup(webpage, "html.parser")

html_title = page.find("title")
title2 = html_title.get_text()
title = title2.strip("- Bisnis Tempo.co")

html = page.find(attrs={"itemprop": "articleBody"})
items = html.find_all("p")

for item in items:
    if 'Baca' in item.text:
        item.decompose()

print(items)

相关问题 更多 >