Python3使用bs4如何提取指定父标签内无id/class的a标签URL?
问题原因
你的代码存在两处可优化的点,导致无法直接拿到纯净URL:
soup.select()用法错误:该方法接收CSS选择器作为参数,类筛选需要直接写在选择器语法中,你传入的第二个类参数不会生效- 提取属性方式不对:不需要将a标签转为字符串手动切割,BeautifulSoup的标签对象可以直接获取属性值
修复后的代码
import requests from bs4 import BeautifulSoup header = {"User-Agent":"Mozilla/5.0 (Windows NT 6.1; WOW64; rv:77.0) Gecko/20190101 Firefox/77.0"} Purl = 'https://www.tunisianet.com.tn/301-pc-portable-tunisie' req = requests.get(Purl, headers=header) soup = BeautifulSoup(req.content, 'lxml') ProductUrl = [] # 直接用CSS选择器定位符合class要求的h2下的a标签,一步到位 show_a = soup.select('h2.h3.product-title a') for a in show_a: # 直接通过get方法获取href属性值,属性不存在时会返回None不会报错 ProductUrl.append(a.get('href')) # 输出所有纯净URL for url in ProductUrl: print(url)
补充说明
如果你需要保留原来的分步写法,也可以只修改遍历部分的代码:
showName = soup.select('h2.h3.product-title') for i in showName: a_tag = i.find('a') if a_tag: ProductUrl.append(a_tag['href'])
内容的提问来源于stack exchange,提问作者hf wassim
相关产品推荐
相关产品推荐

