【发布时间】:2022-01-20 23:31:39
【问题描述】:
在 Python 出现的这些年里,似乎已经解决了这个问题,但不管怎样:
def soupstrainer(tag_element,srch_str):
''' take a soup element
return a list of found items
'''
results=[]
###literal search string returns results, even though two lines down,
### print(srch_str) returns the expected string
souper=tag_element.find_all('a',{'data-tn-element':'companyName'}) #srch_str)
print(srch_str)
for r in souper:
if r != None:
results.append(r.get_text(r.string, strip=True))
return results
with open('scrapesnip.html', 'r') as the_file:
doc4 = the_file.read()
soup = BeautifulSoup(doc4, 'html.parser')
result = soupstrainer(soup,str("'a',{'data-tn-element':'companyName'}"))
print(result,len(result))
结果:
## zero results passing the string
/PYscripts/bravosierra4.py
'a',{'data-tn-element':'companyName'} <=== these two strings *look* identical
[] 0
## with the identical string
## 'hard coded' into the function
/PYscripts/bravosierra4.py
'a',{'data-tn-element':'companyName'} <=== these two strings *look identical
['Keysight Technologies', 'ECS Federal LLC', 'Corsica Technologies, LLC', 'Caribou', 'Collins Aerospace', 'Travelers', 'CyberCoders', 'HealthVerity', 'Circadence Corporation'] 9
我是否错误地传递了srch_string?
【问题讨论】:
-
上面共享的代码和输出的完全混乱使得很难对你的问题说任何明智的 - 我觉得编译器可能会有同样的感觉。请澄清问题,分享一些人们可以运行以重现问题的代码,并解释您的预期以及发生了什么。
-
你正在传递两个完全不同的东西!
-
还不错,我也觉得很乱!我将尝试提炼: 1. 函数 soupstrainer 有两个参数,HTML glob tag_element 和我希望从 glob 中过滤出来的内容,即 search_str。
-
2. @juanpa.arrivillaga,我想我只传递了一个字符串类型的对象。但我必须以函数不期望的方式传递,我在 find_all 下面的行中使用 print(srch_str),它似乎与我将它粘贴到函数中时工作的字符串相同(硬-代码)。
-
souper=tag_element.find_all('a',{'data-tn-element':'companyName'})没有传入字符串!那是两个不同的参数,一个是字符串,另一个是字典。"'a',{'data-tn-element':'companyName'}"是一个字符串。看看下面的答案
标签: python function beautifulsoup parameters