如何用BeautifulSoup的find/find_all提取指定div下的国家URL
提取国家专属URL的解决方案
你可以通过以下两种方法获取目标URL:
方法1:遍历目标div并提取去重
每个well span4类的div下包含两个指向同一国家的URL(一个包裹地图,一个是按钮),用集合可自动去重。
修改后的代码:
import requests from bs4 import BeautifulSoup url = "https://www.rulac.org/browse/countries/P36" resp = requests.get(url) soup = BeautifulSoup(resp.content, 'html.parser') divs = soup.find_all("div", class_="well span4") country_urls = set() for div in divs: # 查找当前div下所有a标签 all_links = div.find_all('a') for link in all_links: href = link.get('href') # 筛选国家专属URL,避免无关链接 if href and '/browse/countries/' in href: country_urls.add(href) # 转成列表便于后续处理 country_urls = list(country_urls) print(country_urls)
方法2:使用CSS选择器直接定位
利用BeautifulSoup的CSS选择器,一步定位目标div下的所有a标签:
import requests from bs4 import BeautifulSoup url = "https://www.rulac.org/browse/countries/P36" resp = requests.get(url) soup = BeautifulSoup(resp.content, 'html.parser') # CSS选择器语法:选中class为well和span4的div下的所有a标签 target_links = soup.select('div.well.span4 a') # 提取href并去重 country_urls = list({link.get('href') for link in target_links if link.get('href') and '/browse/countries/' in link.get('href')}) print(country_urls)
重点提示
- 集合
set()会自动过滤重复的URL,避免数据冗余。 - 增加
/browse/countries/的判断,可以确保只提取符合要求的国家专属链接,排除页面中其他无关的a标签。
内容的提问来源于stack exchange,提问作者user032020
相关产品推荐
相关产品推荐

