我制作了一个网络抓取工具来获取维基百科页面的信息文本。我得到了我想要的文本,但我想剪掉底部文本的很大一部分。我已经尝试了一些其他解决方案,但通过这些解决方案,我没有得到我需要的标题和空格。
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
方法,但它没有执行任何操作。
鉴于此页面,我想剪切我已抓取的大字符串文本中红线下方的内容
我尝试过类似的方法,但没有成功:
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/