如何修复我的代码在列表中找不到关键字?

时间:2019-02-05 16:02:37

标签: python-3.x beautifulsoup lxml

我下面有代码。我需要它来从html页面中提取产品名称,这很好。然后,我需要它来将输入与列表中的元素进行匹配,并输出其索引。即使存在诸如“液体三通”之类的元素并且输入为“液体”,也与它们不匹配。

如果您知道为什么,我将不胜感激!

这是代码示例:

import urllib3
from bs4 import beautifulsoup
from lxml import etree

url = https://www.example.com    
response = http.request('GET', url)    
soup = BeautifulSoup(response.data)    
keyword = input()    
data = etree.HTML(str(soup))    
all_names = data.xpath('//a[@class="name-link"]/text()')    
namenumbered = [i for i, s in enumerate(all_names) if keyword in s]    

1 个答案:

答案 0 :(得分:1)

像上面所述,它区分大小写。如果希望在liquid中找到Liquid Tee,则可以使用正则表达式,或者在检查关键字是否存在于字符串中时将其全部大写/全部小写:

all_names = ['liquid!', 'Liquid Tee', 'LIQUID', 'liguid ', 'hello', 'The water is LiQuId.']

keyword = 'liquid'

namenumbered = [i for i, s in enumerate(all_names) if keyword.lower() in s.lower()]

输出:

正确输出在位置0、1、2和5处找到的液体

print (namenumbered)
[0, 1, 2, 5]

但不降低到更低,只会识别位置[0]。

all_names = ['liquid!', 'Liquid Tee', 'LIQUID', 'liguid ', 'hello', 'The water is LiQuId.']

keyword = 'liquid'


namenumbered = [i for i, s in enumerate(all_names) if keyword in s]

输出:

print (namenumbered)
[0]