我有一个页面源,其中包含“类”链接,如下例所示。我想返回一个包含所有“ 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'})
输出:
[]
答案 0 :(得分:3)
您的第一个错误是将属性名称传递给find_all()
,后者将第一个参数解释为 tagname 。接下来,您要求find_all()
过滤找到的标签,以仅返回具有与给定值匹配的a class
属性的标签,标签中不能包含空格的属性名称。>
请注意,这里没有a class
标签,而具有a
和class
属性的href
标签。所以您想使用
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]")
这将查找至少具有{em> {em} {em} {em}和a
类的web-btn-link
标签,并且仅查找具有easy-click
属性的标签。 / p>
该调用仍将产生一系列标记对象,仅使用订阅即可获取属性:
href
或者,仅一张一张地打印它们:
soup = BeautifulSoup(driver.page_source)
tags = soup.select("a.web-btn-link[href]")
urls = [t['href'] for t in tags]
答案 1 :(得分:-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)