美丽的汤find_all没有找到多个类的CSS选择器

时间:2018-04-01 21:21:22

标签: python beautifulsoup css-selectors

在网站上有这个<a>元素

<a role="listitem" aria-level="1" href="https://www.rest.co.il" target="_blank" class="icon rest" title="this is main title" iconwidth="35px" aria-label="website connection" style="width: 30px; overflow: hidden;"></a>

所以我使用这段代码来捕捉元素
(注意 find_all 参数 a.icon.rest

import requests
from bs4 import BeautifulSoup

url = 'http://www.zap.co.il/models.aspx?sog=e-cellphone&pageinfo=1'
source_code = requests.get(url)
plain_text = source_code.text
soup  = BeautifulSoup(plain_text, "html.parser")
for link in soup.find_all("a.icon.rest"):
    x = link.get('href')
    print(x)

遗憾的是,没有返回任何内容 虽然美丽的汤文件清楚地说:

  

如果您想搜索与两个或更多CSS类匹配的标签,那么   应该使用CSS选择器:

     

css_soup.select(&#34; p.strikeout.body&#34)
  returns: <p class="body strikeout"></p>

那为什么这不起作用? 顺便说一下,我使用pycharm

1 个答案:

答案 0 :(得分:0)

正如您引用的文档所述,如果您要搜索与两个CSS类匹配的标记,则必须使用CSS选择器而不是find_all。您引用的示例显示了如何执行此操作:

css_soup.select("p.strikeout.body")

但你没有这样做;无论如何你使用了find_all,当然它不起作用,因为find_all没有使用CSS选择器。

将其更改为使用select,它确实采用了CSS选择器,它会起作用。