Python 靓汤-是否可以将搜索限制在特定区域
我在页面上搜索某些关键字,并返回classPython 靓汤-是否可以将搜索限制在特定区域,python,beautifulsoup,Python,Beautifulsoup,我在页面上搜索某些关键字,并返回classds\u data容器中包含的值。我的页面有多个关键字匹配项,但我只想从标记为 有没有办法告诉美丽的汤我只想从那里搜索,我已经试过了 ds_data = soup.find('div', {'class': 'tabsBody'}.findNext(text=pattern).findNext('div', {'class': 'ds_data'}) 但这失败了 我的代码 keyword_list = [ 'USB 2.0 ports quantit
ds\u data
容器中包含的值。我的页面有多个关键字匹配项,但我只想从标记为
有没有办法告诉美丽的汤我只想从那里搜索,我已经试过了
ds_data = soup.find('div', {'class': 'tabsBody'}.findNext(text=pattern).findNext('div', {'class': 'ds_data'})
但这失败了
我的代码
keyword_list = [
'USB 2.0 ports quantity',
'USB 3.0 ports quantity',
'VGA',
'Internal memory'
]
#Iterate through our keyword list and return the results
for search_text in keyword_list:
pattern = re.compile(r'\s*%s\s*' % search_text)
ds_data = soup.find(text=pattern).findNext('div', {'class': 'ds_data'})
if ds_data.find('img', {'class': 'spacer_top n-sign'}):
result_text = '0'
elif ds_data.find('img', {'class': 'spacer_top y-sign'}):
result_text = 'Yes'
else:
result_text = ds_data.text
print search_text, result_text
您的代码(逐字复制了问题的语法错误)
当然失败了,因为它试图在python字典上调用方法findNext
;dict()
对象没有这样的方法
但实际上,soup.find
返回一个新的soup,您可以搜索它,因此:
divsoup = soup.find('div', {'class': 'tabsBody'})
ds_data = divsoup.find(text=pattern).findNext('div', {'class': 'ds_data'})
将仅从
元素中返回匹配项。请注意,findNext
将把树导航到同级节点,而find
将只导航到子节点
此外,这些名称为单数(不包含全部)的方法在匹配项上返回
None
,因此如果您对内容不确定,确实需要检查返回值。HTML是大量的,不适合,试图尽可能地缩短所有内容。如果不看到html块和预期结果,就不可能真正回答问题,因为它们工作得非常好,也大大减少了代码的执行时间:)只需检查每个find方法中的None即可。。。或者使用阵列版本。
divsoup = soup.find('div', {'class': 'tabsBody'})
ds_data = divsoup.find(text=pattern).findNext('div', {'class': 'ds_data'})