【问题标题】:Find link in specific tags using python, beautiful soup and lambda functions使用 python、beautiful soup 和 lambda 函数在特定标签中查找链接
【发布时间】:2022-02-10 04:31:14
【问题描述】:

我有以下 html,我在 python 3 中使用 bs4 beautiful soup 从位于特定标签内的链接中提取所有 href:.如果我可能有多个或没有嵌套在 .此外,还有一个步骤是我过滤掉没有“base.html”结尾的链接。

<article>
   <a href='link/base.html'>click me!</a>
</article>
...
<article>
   <a href='link2/base.html'>click me!</a>
</article>
...
<article>
   <a href='link3/base.html'>click me!</a>
</article>

这是我的代码

page = bs4.BeautifulSoup(source, 'html.parser')

articles = page.find_all(name="article")

article_links = map(lambda article: article.a, articles)

article_links = map(lambda tag: tag.get('href'), article_links)

article_links = filter(lambda link: 'base.html' in link, article_links)

article_links = map(lambda link: url + link, article_links)

但是,这会导致

AttributeError: 'NoneType' 对象没有属性 'get''

在第 4 行的 .get('href') 部分。其他变化会导致不同的错误。它需要是 lambda 函数。最好,我还想将前两个 lambda 函数合二为一。

【问题讨论】:

    标签: python html web-scraping beautifulsoup lambda


    【解决方案1】:

    不知道为什么要使用 lambda,所以以防万一使用 css selectors 选择更具体的目标并使用 list comprehension 迭代结果集:

    [url+a['href'] for a in page.select('article a[href*="base.html"]')]
    

    示例

    from bs4 import BeautifulSoup
    
    url = 'http://www.example.com/'
    html = '''<article>
       <a href='link/base.html'>click me!</a>
    </article>
    ...
    <article>
       <a href='link2/base.html'>click me!</a>
    </article>
    ...
    <article>
       <a href='link3/base.html'>click me!</a>
    </article>'''
    
    page = BeautifulSoup(html, 'html.parser')
    
    [url+a['href'] for a in page.select('article a[href*="base.html"]')]
    

    输出

    ['http://www.example.com/link/base.html',
     'http://www.example.com/link2/base.html',
     'http://www.example.com/link3/base.html']
    

    【讨论】:

      猜你喜欢
      • 2016-10-07
      • 1970-01-01
      • 1970-01-01
      • 2017-02-17
      • 2017-05-31
      • 2022-01-16
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多