如何从网站的产品列表中提取品牌名称?

2024-06-28 19:21:12 发布

您现在位置:Python中文网/ 问答频道 /正文

到目前为止,我有:


lst = ["Tommy", "Tommy Hilfiger", "Tommy Jeans", "Hugo", "Hugo Boss", "Boss", "HUGO", "BOSS", "Lacoste", "lacoste",
       "Adidas",
       "adidas", "Armani", "North", "Paul", "Smith", "Vivienne Westwood", "Levis", "Kent", "Nike", "Calvin Klein",
       "Calvin",
       "Pretty Green"]

 title_div = soup.find_all(class_='product-name')
 for container5 in title_div:
   container_text = container5.text.split(' ')
   for string in container_text:
     if string in lst:
       print(string)

这只返回第一个名字:例如,当我想返回“Pretty Green”时,只返回“Tommy Hilfiger”或“Pretty”中的“Tommy”

有没有关于如何使这项工作的建议

****以下代码是存储在容器文本中的内容

container_text =

['HUGO', 'Dolive', 'T', 'Shirt', 'Blue']
['Tommy', 'Hilfiger', 'Lounge', 'Logo', 'Flag', 'T', 'Shirt', 'White']
['BOSS', 'Multi', 'Colour', 'Triple', 'Pack', 'T', 'Shirts']
['BOSS', 'Triple', 'Pack', 'Crew', 'Neck', 'T', 'Shirts']
['EA7', 'Emporio', 'Armani', 'Crew', 'Neck', 'Logo', 'T', 'Shirt', 'Grey']
['PS', 'By', 'Paul', 'Smith', 'Regular', 'Fit', 'T', 'Shirt', 'Blue']
['The', 'North', 'Face', 'Fine', 'Alpine', '2', 'T', 'Shirt', 'Khaki']
['Vivienne', 'Westwood', 'Orb', 'Logo', 'T', 'Shirt', 'Grey']
['Levis', 'Logo', 'Crew', 'Neck', 'T', 'Shirt', 'White']
['Nike', 'Futura', 'Icon', 'T', 'Shirt', 'White']
['Calvin', 'Klein', 'Jeans', 'Tape', 'T', 'Shirt', 'White']
['Tommy', 'Hilfiger', 'Lounge', 'Logo', 'Flag', 'T', 'Shirt', 'Green']
['Tommy', 'Hilfiger', 'Logo', 'T', 'Shirt', 'Navy']
['adidas', 'Originals', '3', 'Stripe', 'T', 'Shirt', 'Blue']
['Nike', 'Futura', 'Icon', 'T', 'Shirt', 'Black']
['Tommy', 'Hilfiger', 'Flag', 'T', 'Shirt', 'Khaki']
['BOSS', 'Tblurry', '5', 'T', 'Shirt', 'Black']
['Tommy', 'Hilfiger', 'Flag', 'T', 'Shirt', 'Grey']
['Lacoste', 'Crew', 'Neck', 'T', 'Shirt', 'Blue']
['Tommy', 'Hilfiger', 'Logo', 'T', 'Shirt', 'Navy']
['Lacoste', 'Crew', 'Neck', 'T', 'Shirt', 'Blue']
['Pretty', 'Green', 'X', 'Umbro', 'Ringer', 'T', 'Shirt', 'Blue']
['Armani', 'Exchange', 'Crew', 'Neck', 'Logo', 'T', 'Shirt', 'White']
['The', 'North', 'Face', 'Logo', 'T', 'Shirt', 'Blue']
['HUGO', 'Dolive', 'Logo', 'T', 'Shirt', 'Black']
['Tommy', 'Hilfiger', 'Loungewear', 'Taped', 'T', 'Shirt', 'Navy']
['Tommy', 'Hilfiger', 'Loungewear', 'Logo', 'T', 'Shirt', 'White']
['Tommy', 'Hilfiger', 'Loungewear', 'Icon', 'T', 'Shirt', 'Navy']
['Tommy', 'Hilfiger', 'Loungewear', 'Icon', 'T', 'Shirt', 'White']
['Tommy', 'Hilfiger', 'Loungewear', 'Round', 'Neck', 'T', 'Shirt', 'Grey']
['Kent', 'And', 'Curwen', 'Rose', 'Patch', 'Icon', 'T', 'Shirt', 'Black']
['HUGO', 'Dolive', 'Crew', 'Neck', 'T', 'Shirt', 'Black']
['HUGO', 'Dolive', 'Crew', 'Neck', 'T', 'Shirt', 'White']
['HUGO', 'Dolive', 'Crew', 'Neck', 'T', 'Shirt', 'White']
['Tommy', 'Hilfiger', 'Lounge', 'Logo', 'Flag', 'T', 'Shirt', 'Navy']
['Tommy', 'Hilfiger', 'Lounge', 'Logo', 'Flag', 'T', 'Shirt', 'White']
['Tommy', 'Hilfiger', 'Lounge', 'Logo', 'Flag', 'T', 'Shirt', 'Grey']
['Calvin', 'Klein', 'Crew', 'Neck', 'Lounge', 'T', 'Shirt', 'White']
['Tommy', 'Hilfiger', 'Loungewear', '3', 'Pack', 'T', 'Shirts', 'White']
['Calvin', 'Klein', 'Logo', 'T', 'Shirt', 'Black']
['Tommy', 'Hilfiger', 'Lounge', '3', 'Pack', 'V', 'Neck', 'T', 'Shirts', 'White']
['Calvin', 'Klein', 'Short', 'Sleeved', 'T', 'Shirt', 'White']
['Tommy', 'Hilfiger', 'Lounge', '3', 'Pack', 'V', 'Neck', 'T', 'Shirts']
['Calvin', 'Klein', 'Short', 'Sleeved', 'T', 'Shirt', 'Black']
['Calvin', 'Klein', 'Crew', 'Neck', 'Logo', 'T', 'Shirt', 'Grey']
['Calvin', 'Klein', 'Lounge', 'Logo', 'T', 'Shirt', 'White']
['Tommy', 'Hilfiger', 'Core', 'Slim', 'T', 'Shirt', 'Grey']
['Tommy', 'Hilfiger', 'Core', 'Slim', 'Fit', 'T', 'Shirt', 'White']
['Tommy', 'Hilfiger', 'Core', 'Slim', 'T', 'Shirt', 'Navy']
['Tommy', 'Hilfiger', 'Core', 'Slim', 'T', 'Shirt', 'Black']
['BOSS', 'TChup', 'T', 'Shirt', 'Navy']
['BOSS', 'Tales', 'Logo', 'T', 'Shirt', 'Black']
['Calvin', 'Klein', 'Jeans', 'Institutional', 'T', 'Shirt', 'White']
['Calvin', 'Klein', 'Jeans', 'Institutional', 'T', 'Shirt', 'Black']
['BOSS', 'Tales', 'T', 'Shirt', 'White']

通常总共有65行


Tags: tommybluegreyflaglogoblackwhiteshirt
2条回答

反向搜索

与其查看container.text对象中的word是否在品牌列表中,不如查看文本中是否有任何品牌

brand_names = ["Tommy", "Tommy Hilfiger", "Tommy Jeans", "Hugo", "Hugo Boss", "Boss", "HUGO", "BOSS", "Lacoste", "lacoste",
       "Adidas",
       "adidas", "Armani", "North", "Paul", "Smith", "Vivienne Westwood", "Levis", "Kent", "Nike", "Calvin Klein",
       "Calvin",
       "Pretty Green"]

title_div = soup.find_all(class_='product-name')
for container5 in title_div:
    for brand in brand_names:
        if brand in container5.text:
            print(brand)

使用信息性名称

作为旁注,请尝试为变量使用更多信息丰富的名称。例如,我将lst替换为brand_names,因为这样可以更清楚地知道发生了什么

将逻辑与打印分开

将需要用户交互的方法与实际执行逻辑的代码分离始终是一个好原则。这使得在其他情况下重用代码或更改某些仅与输出相关的内容变得更容易

在这种情况下,它可能看起来像:

def find_brands(title_div, brands):
    for container5 in title_div:
        for brand in brand_names:
            if brand in container5.text:
                yield brand # Generator

def print_matches(matches):
    if len(matches)==0:
        print('Other')

    for match in matches:
        print(match)

def main():
    # Add code for creating soup in front of this.
    title_div = soup.find_all(class_='product-name')
    matched_brands=list(find_brands(title_div, brand_names))
    print_matches(matched_brands)

注意,我在这里使用了generator。现在你可以把它看作是返回一个一次性列表

然后您可以调用main方法

看起来您正在解析HTML很好,我认为您应该检查如下子集:

lst = ["Tommy", "Tommy Hilfiger", "Tommy Jeans", "Hugo", "Hugo Boss", "Boss", "HUGO", "BOSS", "Lacoste", "lacoste",
       "Adidas",
       "adidas", "Armani", "North", "Paul", "Smith", "Vivienne Westwood", "Levis", "Kent", "Nike", "Calvin Klein",
       "Calvin",
       "Pretty Green"]

mystring = "Tommy"
for x in lst:
    if set(mystring).issubset(x):
        print(x,mystring)
#Tommy Tommy
#Tommy Hilfiger Tommy
#Tommy Jeans Tommy

相关问题 更多 >