How to get the href of the all the tag that is under the class "Subforum"in the given code?
`<li class="subforum">
<a href="Link1">Link1 Text</a>
</li>
<li class="subforum">
<a href="Link2">Link2 Text</a>
</li>
<li class="subforum">
<a href="Link3">Link3 Text</a>
</li>`
I have tried this code but obviously it didn't work.
`Bs = BeautifulSoup(requests.get(url).text,"lxml")
Class = Bs.findAll('li', {'class': 'subforum"'})
for Sub in Class:
print(Link.get('href'))`
答案 0 :(得分:9)
href
属于a
代码,而非li
代码,使用li.a
获取a
代码
import bs4
html = '''<li class="subforum">
<a href="Link1">Link1 Text</a>
</li>
<li class="subforum">
<a href="Link2">Link2 Text</a>
</li>
<li class="subforum">
<a href="Link3">Link3 Text</a>
</li>`<br>'''
soup = bs4.BeautifulSoup(html, 'lxml')
for li in soup.find_all(class_="subforum"):
print(li.a.get('href'))
出:
Link1
Link2
Link3
为什么要使用class_
:
搜索具有特定CSS类的标记非常有用,但CSS属性的名称class
,是Python中的保留字。使用类作为关键字参数会给你一个语法错误。从Beautiful Soup 4.1.2开始,你可以使用关键字参数class_
来搜索CSS类。
答案 1 :(得分:1)
你几乎就在那里,你只需为你所在的a
找到一个li
元素:
Class = Bs.findAll('li', {'class': 'subforum"'})
for Sub in Class:
print(Sub.find("a").get('href')) # or Sub.a.get('href')
但是,有一种更简单的方法 - CSS selector:
for a in Bs.select("li.subforum a"):
print(a.get('href'))
此处,li.subforum a
会匹配a
类属性li
元素下的所有subforum
元素。
作为附注,在BeautifulSoup
4中,findAll()
已重命名为find_all()
。而且,您应该遵循Python general variable naming guidelines。