if语句匹配bs4输出中的String

时间:2018-04-18 18:38:33

标签: python if-statement beautifulsoup

需要一些帮助。我有一个函数,我在我的bs对象上使用find_all函数来打印一些特定的html。我的目标是最终将productName和颜色匹配在一起,这样我就可以找到正确的链接但是我在挑选正确的单词时遇到了一些麻烦。这是我的代码,运行时我没有输出。

timeline

任何人都有任何想法为什么我的if语句不会打印出包含“Checker”的结果?感谢

2 个答案:

答案 0 :(得分:1)

您的代码存在一些问题:

  1. 定义函数时应缩进代码。即def下的代码应缩进wrt。 def关键字。
  2. 如果您以后不使用input,为什么要使用它?
  3. pep 8指定变量名称的命名约定。遵循这一点可能是个好主意。更具体一点:
  4.   

    函数名称应为小写,单词分隔   必要时强调提高可读性。

         

    变量名称遵循与函数名称相同的约定。

    回到你的问题,做你想做的最直接的方式是:

    import requests
    from bs4 import BeautifulSoup
    import re
    
    def get_product():
        session = requests.Session()
        r = session.get('http://www.supremenewyork.com/shop/all/accessories')
        soup = BeautifulSoup(r.content, 'lxml')
        product_names = soup.findAll('a', text=re.compile(r'\bTees\b'))
        product_names = [link.get_text() for link in product_names]
        return product_names
    
    products = get_product()
    for item in products:
        if 'Checker' in item:
            print('yas gurl!')
    

答案 1 :(得分:0)

soup.findAll找到多个元素。因此,您需要迭代它们:

import requests
from bs4 import BeautifulSoup

def getPremeProduct() -> str:
    session = requests.Session()
    base = "http://www.supremenewyork.com"
    r = session.get('http://www.supremenewyork.com/shop/all/accessories')
    soup = BeautifulSoup(r.content, 'lxml')
    keyword = input('Input your keyword: ')
    color = str(input('input your color: '))
    productColor = soup.findAll('p', text=re.compile(r'\bChecker\b'))
    productNames = soup.findAll('a', text=re.compile(r'\bTees\b'))

for product_name in ProductNames:
    product_name = str(product_name)
    if "Checker" in product_name:
        print(product_name)