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



到目前为止我有这个:


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)

这只返回第一个名称:例如,just"Tommy";从";Tommy Hilfiger";或";漂亮的"当我想返回";漂亮的绿色";。

关于如何使这项工作发挥作用,有什么建议吗?

****以下代码是存储在container_text 中的内容

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行

看起来你对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

反转搜索

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

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)

使用信息丰富的名称

顺便说一句,尽量为变量使用信息更丰富的名称。例如,我用brand_names替换了lst,因为它可以更清楚地了解发生了什么

将逻辑与打印分离

将需要用户交互的方法与实际执行逻辑的代码分开总是一个很好的原则。这样可以更容易地在其他情况下重用代码,或者更改一些只与输出相关的内容。

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

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)

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

然后您可以直接调用main方法。

最新更新