找到href值按类过滤美丽的汤

问题描述 投票:0回答:2

我的页面源具有“类”链接,如下例所示。我想返回一个包含所有“href”值的列表,因此在下面的示例中,“/ detail / Request-Technology%2C-LLC-Oakland-CA-94609 / napil006 / cyberMan”。我正在使用美丽的汤find_all尝试使用'a class'属性,但它不会返回任何内容。任何人都可以看到我做错了什么并提出解决方案吗?

资源:

<a class="web-btn-link easy-click" href="/detail/Request-Technology%2C-LLC-Oakland-CA-94609/napil006/cyberMan" id="position15" onclick="cookieJobID('b54b4b964def18552eefff31d034d2a5');handleBackButton(this);" style="font-size:18px;" title=“stuff” value="b54b4b964def18552eefff31d034d2a5">

码:

BeautifulSoup(driver.page_source).find_all('href', {'a class':'web-btn-link easy-click'})

输出:

[]
python python-3.x beautifulsoup
2个回答
-1
投票

您可以通过BeautifulSoup收集所有需要的元素并存储在列表中,然后遍历列表以打印href属性,如下所示:

href_elements = BeautifulSoup(driver.page_source).find_all('a', {'class':'web-btn-link easy-click'})
for href_element in href_elements:
    print(href_element.href)

3
投票

您的第一个错误是将属性名称传递给find_all(),后者将第一个参数解释为标记名。接下来,您要求find_all()过滤它找到的标记,只返回那些具有与给定值匹配的a class属性的标记,标记不能包含带有空格的属性名称。

请注意,这里没有a class标签,你有a标签,带有classhref属性。所以你想要使用

soup = BeautifulSoup(driver.page_source)
tags = soup.find_all('a', {'class': 'web-btn-link', 'href': True})

'href': True过滤器仅在标签定义了该属性时才匹配。请注意,我只过滤了两个类中的一个;请参阅Searching By CSS Class为什么这很重要,但您通常不希望排除匹配标签,而不仅仅是您找到的那两个类。在绝大多数文档中,您通常只需要匹配其中一个类(并且easy-click听起来像一个类用于脚本或CSS增强,应用于页面上可能不同的元素)。

使用CSS .select() call这种搜索更容易:

soup = BeautifulSoup(driver.page_source)
tags = soup.select("a.web-btn-link.easy-click[href]")

这会查找至少包含aweb-btn-link类的easy-click标签,以及仅具有href属性的标签。

调用仍将生成一系列标记对象,只获取属性,使用订阅:

soup = BeautifulSoup(driver.page_source)
tags = soup.select("a.web-btn-link[href]")
urls = [t['href'] for t in tags]

或者,只需逐个打印:

for tag in tags:
    print(t[‘href’])
© www.soinside.com 2019 - 2024. All rights reserved.