【问题标题】:Combining or shortening If statements in python在python中组合或缩短If语句
【发布时间】:2017-12-18 08:48:14
【问题描述】:

我定义了以下函数来检查新书的数量。

def getNewSellerNumber(isbn):
    res=requests.get('http://www.amazon.com/dp/'+isbn)
    soup = bs4.BeautifulSoup(res.text,'html.parser')
    elements=soup.select('#mediaOlp > div > div > div > div.a-fixed-right-grid-col.accordion-row-left-content.a-col-left > div:nth-of-type(2) > div > span:nth-of-type(1) > a')

    if elements == []:
        elements2=soup.select('#mediaOlp > div > div > div.a-fixed-right-grid-col.accordion-row-left-content.a-col-left > div:nth-of-type(2) > div > span:nth-of-type(1) > a')
        if elements2 == []:
            elements3=soup.select('span > span:nth-of-type(3) > span.olp-new.olp-link > a')
            if elements3 ==[]:
                return None
            else:
                return elements3[0].text
        else:
            return elements2[0].text
    else:
        return elements[0].text

它工作正常,但我将来可能会添加另一个 CSS 选择器。这意味着我的 If 语句将会增长。为了存储 CSS 选择器,我制作了一个如下列表,但是这一次,它在每种情况下都返回 None,因为其中一个选择器总是错误的。

def getSellers(isbn):
    res = requests.get('http://www.amazon.com/dp/'+isbn)
    soup = bs4.BeautifulSoup(res.text,'html.parser')
    selectors = ['#mediaOlp > div > div > div > div.a-fixed-right-grid-col.accordion-row-left-content.a-col-left > div:nth-of-type(2) > div > span:nth-of-type(1) > a','#mediaOlp > div > div > div.a-fixed-right-grid-col.accordion-row-left-content.a-col-left > div:nth-of-type(2) > div > span:nth-of-type(1) > a','span > span:nth-of-type(3) > span.olp-new.olp-link > a' ]
    for i in selectors:
        elements = soup.select(i)
        if elements ==[]:
            return None
        else:
            print(elements[0].text)

如何合并或缩短这些 if 语句?

【问题讨论】:

  • 一个你可能错过的简化是一个空列表[] 给出False。所以if elements ==[]可以写成if not elements(虽然重写if所以not不是必需的。

标签: python python-3.x for-loop if-statement beautifulsoup


【解决方案1】:

循环后移动返回无

for i in selectors:
    elements = soup.select(i)
    if elements:
       return elements[0].text
return None  

【讨论】:

  • 由于空列表具有 false 值,您可以将 if elements != []: 简化为 if elements:
猜你喜欢
  • 1970-01-01
  • 2020-11-07
  • 1970-01-01
  • 2012-07-05
  • 1970-01-01
  • 2018-08-19
  • 1970-01-01
  • 2022-11-23
  • 1970-01-01
相关资源
最近更新 更多