【问题标题】:Beautifulsoup find items in page with these attributesBeautifulsoup 在页面中查找具有这些属性的项目
【发布时间】:2018-04-27 17:09:58
【问题描述】:

css class=fb_pagZ 以及此类下的所有lia

所以在 css 中应该是:fb_pagZ li a,但我无法看到如何在 beautifulsoup 中表示它。

我目前有 beautifulsoup 代码,可以在页面上找到具有 fb_pagZ 名称的所有类,但我似乎无法进一步过滤到列表项,特别是 li a,只有 href 值被解析.

next_page_base=soup.find_all(class_='fb_pagZ')

示例 html 输出:

<div class="fb_pagZ">
<li><a href="site.com/img=2" /></li>
</div>

有人可以帮忙吗?

【问题讨论】:

  • 你能发一份你的html样本吗?

标签: python beautifulsoup


【解决方案1】:

你可以使用 BeautifulSoup 的select 选择器来做元素的 CSS 样式选择。

因此,根据您的描述,应该执行以下操作:

soup.select('.fb_pagZ li a')

假设,soup 是一个 BeautifulSoup 对象。

还要注意,要仅选择第一个元素,请使用select_one

soup.select_one('.fb_pagZ li a')

遍历选择,并获取href 属性的值:

for element in soup.select('.fb_pagZ li a'):
    href = element['href']
    # Do stuffs

当不存在这样的元素时,soup.select('.fb_pagZ li a') 的输出将是一个空列表,因此上述迭代无论如何都不会发生。

如果你想明确说明空虚:

# We're iterating over the pages, generating URLs
# e.g. if the pages come in querystrings in format
# `?page=2`, appending that and getting
# soup object for the final URL
elements = soup.select('.fb_pagZ li a')
if elements:
    for element in elements:
        href = element['href']

如果你也想匹配href 属性:

for element in soup.select('.fb_pagZ li a'):
    try:
        href = element['href']
    except KeyError:
        continue

或者您可以使用.get 并检查None(这是错误的):

for element in soup.select('.fb_pagZ li a'):
    href = element.get('href')
    if not href:
        continue

【讨论】:

  • .select 会选择所有出现的事件吗?此外,这不会提取 href 属性值。我该怎么做(请参阅更新的问题)
  • @John 是的,会的。
  • 可能该网站的首页没有href,是否可以修改您的代码以跳过此匹配并继续?目前对我来说,它完全失败了,因为第一场比赛没有href 属性
  • @Rakesh 如果您愿意,请随时加入
  • 更新代码的问题是这个选择器:elements = soup.select('.fb_pagZ li a') 正在选择没有href 属性的匹配项,但我只想匹配href
猜你喜欢
  • 2012-02-14
  • 1970-01-01
  • 2014-05-10
  • 2016-06-30
  • 2020-12-15
  • 1970-01-01
  • 1970-01-01
  • 2018-06-14
  • 1970-01-01
相关资源
最近更新 更多