访问 html 标签中的特定 table
Access to a specific table in html tag
我打算用beautifulsoup找一个table定义在以下链接的“内容逻辑定义”中:
1) https://www.hl7.org/fhir/valueset-account-status.html
2) https://www.hl7.org/fhir/valueset-activity-reason.html
3) https://www.hl7.org/fhir/valueset-age-units.html
页面中可能定义了几个table。我要的table在<h2> tag with text “content logical definition”
下面。有些页面可能在“内容逻辑定义”部分缺少任何table,所以我希望table为空。到目前为止,我尝试了几种解决方案,但对于某些页面,它们中的每一种都 return 错误 table。
alecxe 提供的最后一个解决方案是:
import requests
from bs4 import BeautifulSoup
urls = [
'https://www.hl7.org/fhir/valueset-activity-reason.html',
'https://www.hl7.org/fhir/valueset-age-units.html'
]
for url in urls:
r = requests.get(url)
soup = BeautifulSoup(r.content, 'lxml')
h2 = soup.find(lambda elm: elm.name == "h2" and "Content Logical Definition" in elm.text)
table = None
for sibling in h2.find_next_siblings():
if sibling.name == "table":
table = sibling
break
if sibling.name == "h2":
break
print(table)
此解决方案 return 如果没有 table 位于“内容逻辑定义”部分,但第二个 url 在“内容”中具有 table,则为空逻辑定义”它return错了table,页尾有一个table。
我如何编辑此代码以访问恰好在具有“内容逻辑定义”文本的标记之后定义的 table,如果本节中没有 table,则它 return 为空。
看起来 alecxe 代码的问题在于它 returns 一个 table 是 h2 的直接兄弟,但你想要的实际上在 div (这是 h2 的兄弟)。这对我有用:
import requests
from bs4 import BeautifulSoup
urls = [
'https://www.hl7.org/fhir/valueset-account-status.html',
'https://www.hl7.org/fhir/valueset-activity-reason.html',
'https://www.hl7.org/fhir/valueset-age-units.html'
]
def extract_table(url):
r = requests.get(url)
soup = BeautifulSoup(r.content, 'lxml')
h2 = soup.find(lambda elm: elm.name == 'h2' and 'Content Logical Definition' in elm.text)
div = h2.find_next_sibling('div')
return div.find('table')
for url in urls:
print extract_table(url)
我打算用beautifulsoup找一个table定义在以下链接的“内容逻辑定义”中:
1) https://www.hl7.org/fhir/valueset-account-status.html
2) https://www.hl7.org/fhir/valueset-activity-reason.html
3) https://www.hl7.org/fhir/valueset-age-units.html
页面中可能定义了几个table。我要的table在<h2> tag with text “content logical definition”
下面。有些页面可能在“内容逻辑定义”部分缺少任何table,所以我希望table为空。到目前为止,我尝试了几种解决方案,但对于某些页面,它们中的每一种都 return 错误 table。
alecxe 提供的最后一个解决方案是:
import requests
from bs4 import BeautifulSoup
urls = [
'https://www.hl7.org/fhir/valueset-activity-reason.html',
'https://www.hl7.org/fhir/valueset-age-units.html'
]
for url in urls:
r = requests.get(url)
soup = BeautifulSoup(r.content, 'lxml')
h2 = soup.find(lambda elm: elm.name == "h2" and "Content Logical Definition" in elm.text)
table = None
for sibling in h2.find_next_siblings():
if sibling.name == "table":
table = sibling
break
if sibling.name == "h2":
break
print(table)
此解决方案 return 如果没有 table 位于“内容逻辑定义”部分,但第二个 url 在“内容”中具有 table,则为空逻辑定义”它return错了table,页尾有一个table。
我如何编辑此代码以访问恰好在具有“内容逻辑定义”文本的标记之后定义的 table,如果本节中没有 table,则它 return 为空。
看起来 alecxe 代码的问题在于它 returns 一个 table 是 h2 的直接兄弟,但你想要的实际上在 div (这是 h2 的兄弟)。这对我有用:
import requests
from bs4 import BeautifulSoup
urls = [
'https://www.hl7.org/fhir/valueset-account-status.html',
'https://www.hl7.org/fhir/valueset-activity-reason.html',
'https://www.hl7.org/fhir/valueset-age-units.html'
]
def extract_table(url):
r = requests.get(url)
soup = BeautifulSoup(r.content, 'lxml')
h2 = soup.find(lambda elm: elm.name == 'h2' and 'Content Logical Definition' in elm.text)
div = h2.find_next_sibling('div')
return div.find('table')
for url in urls:
print extract_table(url)