【问题标题】:function returns nothing with if-else statements函数在 if-else 语句中不返回任何内容
【发布时间】:2022-11-22 21:33:38
【问题描述】:

我正在尝试使用 beautiful soup 在网站列表中查找特定链接。 我试图找到

  1. 包含关键字的 href url
  2. 包含关键字的锚点
  3. 如果页面不包含关键字打印“未找到”。

    这个想法是让函数返回 URL 或“未找到”

    我用 beautifulsoup 构建了代码并构建了 if-else 语句 所以该函数返回变量 a 是链接或“未找到” 它可以一路打印不同的结果,但函数返回是空的。

    from bs4 import BeautifulSoup
    from urllib.request import Request, urlopen
    from urllib.parse import urlparse, urljoin
    import re
    import ssl
    
    #function to parse a website from a url and find the links that contain the content about transparency.
    
    def transp_url(url):
        #hearders because some pages return 403 error
        hdr = {'User-Agent': 'Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.11 (KHTML, like Gecko) Chrome/23.0.1271.64 Safari/537.11',
            'Accept': 'text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8',
            'Accept-Charset': 'ISO-8859-1,utf-8;q=0.7,*;q=0.3',
            'Accept-Encoding': 'none',
            'Accept-Language': 'en-US,en;q=0.8',
            'Connection': 'keep-alive'}
    
        #SSL certificate error with some pages, thus adding this:
        ssl._create_default_https_context = ssl._create_unverified_context
    
        req = Request(url, headers=hdr)
        html_page = urlopen(req)
        global a
        #find one href link URL that contains "transpar"
        #problem with casing doesn't recognise uper or lower.
        soup = BeautifulSoup(html_page, "lxml")
        link = soup.select_one("a[href*=transpar]")
        if link:
            #print("link found")
            a = link['href']
            #print(a)
    
        else:
        #get the link of the transparence page based on anchor.
        #problem with casing doesn't recognise uper or lower.
            link2 = soup.find("a", string=re.compile("Transpar"))
            if link2:
                #print("link found")
                a = link2['href']
                #print(a)
            else: 
                link3 = soup.find("a", string=re.compile("transpar"))
                if link3:
                    #print("link found")
                    a = link3['href']
                    #print(a)
                else:
                    #print("No Transparency page")            
                    a = "No Transparency page"
                    #print(a)
        return a
    

【问题讨论】:

  • 我看到您发布了一个函数,该函数末尾带有 return a。你能展示一下你是如何调用这个函数的吗?

标签: python function if-statement return return-type


【解决方案1】:

您没有使用任何 return 或 print,这意味着它不会返回任何东西。您拥有的唯一印刷品是评论,不计入代码。删除'#',然后它会打印一些东西。

【讨论】:

  • return a 在底部。
最近更新 更多