python - 如何从抓取的页面中删除字符串的大部分?

标签 python string beautifulsoup

我制作了一个网络抓取工具来获取维基百科页面的信息文本。我得到了我想要的文本,但我想剪掉底部文本的很大一部分。我已经尝试了一些其他解决方案,但通过这些解决方案,我没有得到我需要的标题和空格。

import requests
from bs4 import BeautifulSoup
import re


website = "https://nl.wikipedia.org/wiki/Kat_(dier)"
request = requests.get(website)
soup = BeautifulSoup(request.text, "html.parser")

text = list()

text.extend(soup.findAll('mw-content-text'))

text_content = soup.text
text_content = re.sub(r'==.*?==+', '', text_content)
# text_content = text.replace('\n', '')

print(text_content)

这里,soup.text是维基百科页面的所有文本,其中class='mw-content-text'打印为字符串。这会打印我需要的整体文本,但我需要截断开始显示源文本的字符串。我已经尝试过 replace 方法,但它没有执行任何操作。

鉴于此页面,我想剪切我已抓取的大字符串文本中红线下方的内容

screenshot of Wikipedia page with red line

我尝试过类似的方法,但没有成功:

  for content in soup('span', {'class': 'mw-content-text'}):
      print(content.text)
      text = content.findAll('p', 'a')
      for t in text:
          print(text.text)```

我也尝试过这个:

from urllib.request import urlopen
from bs4 import BeautifulSoup
import re
import requests

website = urlopen("https://nl.wikipedia.org/wiki/Kat_(dier)").read()
soup = BeautifulSoup(website,'lxml')

text = ''

for content in soup.find_all('p'):
    text += content.text

text = re.sub(r'\[.*?\]+', '', text)
text = text.replace('\n', '')

# print(text) 

但这些方法只会给我带来难以阅读的困惑文本。我仍然想要我的基本代码给我的空格和标题。

最佳答案

认为它仍然有点抽象,但您可以在迭代所有子级时实现您的目标,并且如果出现带有 class appendix 的标记,则 break :

for c in soup.select_one('#mw-content-text > div').find_all(recursive=False):
    if c.get('class') and 'appendix' in c.get('class'):
        break
    print(c.get_text(strip=True))

示例

import requests
from bs4 import BeautifulSoup    

website = "https://nl.wikipedia.org/wiki/Kat_(dier)"
request = requests.get(website)
soup = BeautifulSoup(request.text)

for c in soup.select_one('#mw-content-text > div').find_all(recursive=False):
    if c.get('class') and 'appendix' in c.get('class'):
        break
    print(c.get_text(strip=True))

关于python - 如何从抓取的页面中删除字符串的大部分?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/72760675/

相关文章:

c++ - 打印较大的字符串 C++ 时出现问题

Python BeautifulSoup 错误测试

python - Python 中 GIL 的新实现是否处理了竞争条件问题?

python - matplotlib - 保存没有背景和边框的绘图线和透明度 8 位 alpha channel 问题

python - 在 Selenium 中可视化焦点和交互

python - 如何在 Python 中使用 BeautifulSoup 保存对 HTML 文件所做的更改?

python - 使用 urllib3 和 python 2.7 从 url 下载 .txt 文件?

python - Ruby:each_slice、映射、注入(inject)

java - 根据字符串大小(长度)对字符串数组进行排序

python - 将 raw_input 提示符编码为多行...?