我正在尝试抓取网站(https://flightmath.com/from-CDG-to-BLR)的特定部分,但无法定位所需的元素。
<h2 style="background-color:#7DC2F8;padding:10px"><i class="fa fa-plane"></i>
flight distance = <strong>4,866</strong> miles</h2>
dist = soup.find('h2', attrs={'class': 'fa fa-plane'})
我只想定位“ 4,866”部分。
如果有人可以指导我,我将不胜感激。 预先感谢。
答案 0 :(得分:1)
attrs={'class': '...'}
需要精确的class
属性值(而不是组合)。
相反,请使用soup.select_one
方法通过扩展的css
规则进行选择:
from bs4 import BeautifulSoup
import requests
url = 'https://flightmath.com/from-CDG-to-BLR'
html_data = requests.get(url).content
soup = BeautifulSoup(html_data, 'html.parser')
dist = soup.select_one('h2 i.fa-plane + strong')
print(dist.text) # 4,866
答案 1 :(得分:0)
如果感兴趣的话:该值被硬编码到html中(用于计算飞行速度),因此您也可以使用以下代码将其更正则表达式。您可以使用round()
来获取页面上显示的值。
import requests, re
urls = ['https://flightmath.com/from-CDG-to-BOM', 'https://flightmath.com/from-CDG-to-BLR', 'https://flightmath.com/from-CDG-to-IXC']
p = re.compile(r'flightspeed\.min\.value\/60 \+ ([0-9.]+)')
with requests.Session() as s:
for url in urls:
print(p.findall(s.get(url).text)[0])
答案 2 :(得分:0)
使用类名查找标签,然后使用find_next()查找强标签。
from bs4 import BeautifulSoup
import requests
url = 'https://flightmath.com/from-CDG-to-BLR'
html_data = requests.get(url).text
soup = BeautifulSoup(html_data, 'html.parser')
dist = soup.find('i',class_='fa-plane').find_next('strong')
print(dist.text)