使用 python 中的 BeautifulSoup 从 url 的源代码中提取特定部分下的文本

Extracting text under a certain section from a source code of a url using BeautifulSoup in python

我是 python 的初学者,对 HTML 没有任何经验。我刚看了一个关于网络抓取的 youtube 视频 (https://www.youtube.com/watch?v=kEItYHtqQUg&ab_channel=edureka%21),并对从 python 中的 URL 中提取文本感兴趣。

我尝试从随机数据库中练习 links。这是我使用的 URL 和代码 https://rtk.rjifuture.org/rmp/facility/100000028301

from bs4 import BeautifulSoup
from urllib.request import urlopen

url = "https://rtk.rjifuture.org/rmp/facility/100000028301"
html = urlopen(url)

soup = BeautifulSoup(html, "html.parser")
type(soup)

all_links = soup.findAll('div', {'class': 'col'})
str_cells = str(all_links)
cleartext = BeautifulSoup(str_cells, "html.parser").get_text().split(',')

假设我想提取位置下的地址。通过使用上面的代码,我可以通过 print(cleartext[7])

来获取地址

但是当我在同一个数据库中尝试用另一个 link 做同样的事情时,比如 https://rtk.rjifuture.org/rmp/facility/100000083214, 它的效果不如网页的第一部分(设施名称正下方的部分)的结构略有不同。当地址前的一个数据中有 , 时,这也不能很好地工作。

有没有办法定位位置部分下的地址并从中提取文本?

对于 URL 1,您可以首先根据给定的 class 找到所有 div 并根据该查找位置 div 找到索引并使用 [=14 提取数据=] 方法

import requests
from bs4 import BeautifulSoup
res=requests.get("https://rtk.rjifuture.org/rmp/facility/100000028301")
soup=BeautifulSoup(res.text,"html.parser")
 

soup.find_all("div",class_="container-fluid rmp-section")[1].find("div",class_="col").get_text(strip=True)

输出:

'308 Timmons StreetSnow Hill, MD 21863'

URL 2:

import requests
from bs4 import BeautifulSoup
res=requests.get("https://rtk.rjifuture.org/rmp/facility/100000083214")
soup=BeautifulSoup(res.text,"html.parser")
soup.find_all("div",class_="container-fluid rmp-section")[1].find("div",class_="col").get_text(strip=True)

输出:

'2.5 miles E of Hwy 59 on Co. Rd VKit Carson, CO 80825'