Python 3.x WebScraping:获取HTML表中的嵌套元素

Python 3.x WebScraping:获取HTML表中的嵌套元素,python-3.x,web-scraping,Python 3.x,Web Scraping,您好,我是webscraping新手,在获取表中的嵌套html元素标记时遇到了困难,下面是我从url获得的html代码: 1发现“col de la Leisse”的记录 名称 国 要素类 纬度 经度 1. 45.423726.906828 ,奥弗涅-罗讷阿尔卑斯山Savoy-Albertville-Tignes 通过 N 45°25'25“ E 6°54'24“ 这是只针对一行的代码,以使事情变得简单,但在我的例子中,我迭代每行并检查元素的文本是否等于目标值,如果为true,则使用类经度和

您好,我是webscraping新手,在获取表中的嵌套html元素标记时遇到了困难,下面是我从url获得的html代码:


1发现“col de la Leisse”的记录
名称
国
要素类
纬度
经度
1.

45.423726.906828 ,奥弗涅-罗讷阿尔卑斯山
Savoy-Albertville-Tignes 通过 N 45°25'25“ E 6°54'24“
这是只针对一行的代码,以使事情变得简单,但在我的例子中,我迭代每行并检查
元素的文本是否等于目标值,如果为true,则使用类
经度
纬度
废弃
元素的值。在我的例子中,我希望得到值为
Col de la Leisse
这是我的代码:(不好)

soup=BeautifulSoup(response.text,“html.parser”)
table=soup.findAll('table')[1]#第二张桌子
行=表。查找所有('tr')
target=“Col de la Leisse”
经度,纬度=0
对于行中的行:
cols=行。查找所有('td'))
#我被困在这里。。。
#如果cols.text==目标:
# ...
结果:

longitude = 6.906828
latitude = 45.42372

使用bs4 4.7.1,您可以使用
:has
:contains
来确保行中有一个
a
标记元素,其中包含目标字符串

target = 'Col de la Leisse'
rows = soup.select('.restable tr:has(a:contains("' + target + '"))')
for row in rows:
    print([item.text for item in row.select('.latitude, .longitude')])

当然,您可以将
.latitude
.longitude
分开,如果您认为它们不会同时出现,或者可能以不同的顺序出现,请提供您想要获得的结果。是的,但这些是以分/秒为单位的坐标,我想要的坐标在
45.42372
中,但是在此之前,我需要确保目标变量存在于我的行中谢谢,为了确保
td
元素的sur,我有我的目标,我添加
如果cols.text==target
?或者你希望.text等于一个特定值吗?类似于底部版本吗?谢谢@QHarr,在将我的bs4从4.6更新到4.7之后,它工作了!