【发布时间】:2017-11-16 18:03:09
【问题描述】:
是否可以在单个soup.find_all 函数中使用多个参数来从某些元素中查找任何特定项目?如果我选择soup.select 选项,我想知道的过程可以很容易地应用。更具体地说:看下面的例子:
from bs4 import BeautifulSoup
html_element='''
<div class="browse-movie-bottom">
<a href="https://yts.ag/movie/logan-lucky-2017" class="browse-movie-title">Logan Lucky</a>
<div class="browse-movie-year">2017</div>
<div class="browse-movie-tags">
<a href="https://yts.ag/torrent/download" rel="nofollow" title="Logan Lucky">Logan Lucky 720p</a>
<a href="https://yts.ag/torrent/download" rel="nofollow" title="Logan Lucky">Logan Lucky 1080p</a>
</div>
</div>
'''
soup = BeautifulSoup(html_element,"lxml")
for item in soup.find_all(class_='browse-movie-bottom')[0].find_all(class_='browse-movie-tags')[0].find_all("a"):
# for item in soup.select(".browse-movie-bottom .browse-movie-tags a"):
print(item.text)
一方面,我使用soup.select() 解析电影标签,您知道可以这样使用它,以便所有参数可以放在一个大括号中。
另一方面,我使用soup.find_all() 做了同样的事情,它需要三个不同的大括号中的三个不同的参数。结果是一样的。
我的问题是:是否可以使用 soup.find_all() 函数创建任何表达式,该函数将在单个大括号中包含多个参数,就像我对 soup.select() 所做的那样。如下所示:
这是一个错误的,但它会让你知道我在追求什么类型的表达:
soup.find_all({'class':'browse-movie-bottom'},{'class':'browse-movie-tags'},"a")[0]
但是,有效的搜索结果是:
Logan Lucky 720p
Logan Lucky 1080p
【问题讨论】:
-
这种情况下
select的缺点是什么? -
所以,只有当我在
soup.select函数中遇到任何缺点时,我才应该使用find_all函数,这就是你的意思 @PRMoureu 吗?我想学习它。就是这样。
标签: python python-3.x web-scraping beautifulsoup