【问题标题】:How can I iterate over multiple tags in soup.findAll('tag1', 'tag2', 'tag3')?如何迭代soup.findAll('tag1','tag2','tag3')中的多个标签?
【发布时间】:2021-06-07 00:00:08
【问题描述】:

我正在尝试编写一个 python 脚本,其中将自动修改多个 html 文件中的某些标签;从终端运行单个命令。

我构建了代码库。

在我的代码库中,我做了如下所示的事情。有没有更方便的方法可以用更少的代码做到这一点?

#modifying the 'src' of <img> tag in the soup obj
for img in soup.findAll('img'):
    img['src'] = '{% static ' + "'" + img['src'] + "'" + ' %}'

#modifying the 'href' of <link> tag in the soup obj
for link in soup.findAll('link'):
    link['href'] = '{% static ' + "'" + link['href'] + "'" + ' %}'

#modifying the 'src' of <script> tag in the soup obj
for script in soup.findAll('script'):
    script['src'] = '{% static ' + "'" + script['src'] + "'" + ' %}'

例如,我可以在单个 for 循环中而不是 3 中执行吗?并不是说它必须像我在下面写的那样,任何好的实践建议都是我正在寻找的。​​p>

for img, link, script in soup.findAll('img', 'link', 'script'):
    rest of the code goes here....

【问题讨论】:

    标签: python html performance beautifulsoup automation


    【解决方案1】:

    也许使用字典来检索适当的属性?另外,使用更快的 css 选择器。

    import requests
    from bs4 import BeautifulSoup as bs
    
    r = requests.get('https://stackoverflow.com/questions/66541098/how-can-i-iterate-over-multiple-tags-in-soup-findalltag1-tag2-tag3')
    soup = bs(r.content, 'lxml')
    
    lookup = {
        'img':'src',
        'link': 'href',
        'script':'src'
    }
    
    for i in soup.select('img, link, script'):
        var = lookup[i.name]
        if i.has_attr(var):
            i[var] = '{% static ' + "'" + i[var] + "'" + ' %}'
            print(i[var])
    

    【讨论】:

      【解决方案2】:

      是的,你可以。 您可以将元素列表传递给 findAll 方法

      for element in soup.findAll(['img', 'link', 'script']): # use find_all for bs4
          
          if element.name == 'img':
              value = element['src']
          elif element.name == 'href':
              value = element['href']
          elif element.name == 'script':
              value = element['src']
          else:
              continue
              
          print(val)
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2014-04-29
        • 2023-02-11
        • 1970-01-01
        • 1970-01-01
        • 2020-03-15
        • 1970-01-01
        • 2013-07-19
        • 1970-01-01
        相关资源
        最近更新 更多