python - 如何使用BS4从标签外部提取文本

标签 python beautifulsoup

我正在尝试扫描一堆维基百科页面以获取有关二战的统计信息。

我正在使用 BeautifulSoup 尝试从维基百科页面右侧的列中获取所有统计信息。 下面列出了代码。 “links.csv”是一个带有一堆链接结尾的文件,例如“Battle_of_Leyte_Gulf”。我用 <h2> 测试过标记,它可以正确访问所有站点。

import requests
from bs4 import BeautifulSoup
import pandas
df=pandas.read_csv("links.csv")
links=df['links']
for url in links:
  # print("\n"+url+"\n")
  txt="https://en.wikipedia.org/wiki/"+url
  page=requests.get(txt)
  soup=BeautifulSoup(page.content, 'html.parser')
  tags = soup.find_all("br")
  for tag in tags:
    print(tag)

但是,我注意到文本不在实际的
标记中,它实际上在列表之外。

"Sixth Army: "
<br>
"≈200,000"
<br>
<span class="flagicon">...</span>
"Air and naval forces: ≈120,000"

我想知道如何获得实际文本“第六军:”和“≈200,000”。

此处链接:https://en.wikipedia.org/wiki/Battle_of_Leyte

最佳答案

您可以隔离 td 单元然后使用 next_sibling

import requests
from bs4 import BeautifulSoup as bs

r = requests.get('https://en.wikipedia.org/wiki/Battle_of_Leyte')
soup = bs(r.content, 'lxml')
visible_row = soup.select_one('.vevent tr:nth-of-type(12) td span')
print(visible_row.next_sibling)
print(visible_row.next_sibling.next_sibling.next_sibling)

关于python - 如何使用BS4从标签外部提取文本,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55841351/

相关文章:

python - python 中的字数统计

python - re.DOTALL 和 re.MULTILINE 有什么区别?

python - 如何将json数据定义为X和Y sklearn决策树数组

python - pandas 中的笛卡尔积

python - 列和行操作 Python Pandas

python - 从非结构化 HTML 数据中解析链接和字符串

python - 网页抓取 Yelp,我如何检索每个单独评分的值?

python - 网站检测到 selenium webdriver

Python BeautifulSoup 返回元素的空文本,浏览器显示文本,源代码不显示任何内容

python - 在Python中从<html>正文中将数据提取到Excel文件