代码之家  ›  专栏  ›  技术社区  ›  yunum

如何在每次程序运行时更改beautifulsoup scraper的URL(无需手动执行)?

  •  0
  • yunum  · 技术社区  · 2 年前

    我有以下代码来获取Reddit用户名:

        from bs4 import BeautifulSoup
        from requests import get
        from fake_useragent import UserAgent
        
        ua = UserAgent()
        
        
        def lovely_soup(u):
            r = get(u, headers={'User-Agent': ua.chrome})
            return BeautifulSoup(r.text, 'lxml')
        
        
        url = 'https://old.reddit.com/r/aww'
        soup = lovely_soup(url)
        
        titles = soup.findAll('a', {'class': 'author'})
        
        for title in titles:
            print(title.text)
    

    但我有一个很长的URL列表,我想从中获取Reddit用户名。我真的希望避免在运行之间手动替换URL。如何让它在每次运行时替换URL(使用我提供的URL列表),然后自动运行,直到URL用完?

    如果有必要的话,我会在PyCharm上的虚拟环境中运行它。非常感谢。

    我试着用手做,但很快就筋疲力尽了。

    1 回复  |  直到 2 年前
        1
  •  1
  •   Kiran    2 年前

    我建议迭代URL,例如,您可以执行以下操作:

    for url in urls:
        soup = lovely_soup(url)
        titles = soup.findAll('a', {'class': 'author'})
    
        for title in titles:
            print(title.text)
    

    其中URL是您所有URL的列表,例如:[“www.google.com”、“www.bbc.co.uk”,…]

    上面的解决方案打印标题。每个url的文本。您可以将其稍加修改,使其位于存储它们的下方,并在最后一次将它们全部打印出来:

    authors = set()
    for url in urls:
        soup = lovely_soup(url)
        titles = soup.findAll('a', {'class': 'author'})
    
        for title in titles:
            authors.add(title.text)
    
    print(authors)