【问题标题】:Python bs4 - find_all multiple tags and classesPython bs4 - find_all 多个标签和类
【发布时间】:2020-01-21 03:24:40
【问题描述】:

我正在做一些抓取并遇到了一个问题。

现在我的代码如下:

pn = soup.find_all("a", {"class": "full"})
pfp = soup.find_all("td", {"class": "fp active"})

在上面的示例中,我对页面进行了两次迭代。是否可以在两个标签/类上执行 find_all 以确保我准确地抓取数据?

谢谢

【问题讨论】:

  • bs4 文档是怎么说的?

标签: python beautifulsoup


【解决方案1】:

如果您有BS4 4.7.1 或更高版本,则可以使用css 选择器。

soup.select('a.full,td.fp.active')

soup.select('.full,.fp.active')

【讨论】:

  • 这行得通,结果和我的回答一样。但不确定哪个答案“更好”。
  • @D3l_Gato : CSS 选择器比 find_all() 快得多。我总是建议使用 CSS 选择器。
【解决方案2】:

如果你传入一个列表,Beautiful Soup 将允许与该列表中的任何项目进行字符串匹配:

soup.find_all(["a", "td"], {"class": ["full", "fp active"]})

文档:https://www.crummy.com/software/BeautifulSoup/bs4/doc/#a-list

【讨论】:

  • 虽然它可能有效,但您可能要检查的一个极端情况是,它可能不仅匹配a.full,还匹配a.fp。 (不完全确定,但似乎有可能。)
  • 感谢您的编辑和评论布拉德。我的初始测试似乎没问题,但我不确定我的源文档是否有“fp”标签。我会测试。非常感谢。
猜你喜欢
  • 2018-08-31
  • 1970-01-01
  • 1970-01-01
  • 2021-01-24
  • 1970-01-01
  • 1970-01-01
  • 2014-12-09
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多