Beautifulsoup 美丽集团';s find方法返回标记项,但调用字符串get';非类型';错误
我刚刚开始学习python和bs4。我正在尝试解析如下所示的html页面:Beautifulsoup 美丽集团';s find方法返回标记项,但调用字符串get';非类型';错误,beautifulsoup,web-crawler,html-parsing,Beautifulsoup,Web Crawler,Html Parsing,我刚刚开始学习python和bs4。我正在尝试解析如下所示的html页面: .... <p class="result-info"> <span class="result-meta"> <span class="result-price">$1895</span> <span class="result-hood"> address1 </span> </span>
....
<p class="result-info">
<span class="result-meta">
<span class="result-price">$1895</span>
<span class="result-hood"> address1 </span>
</span>
....
错误发生在infoDS['area']=lala.string
行。它抱怨
AttributeError:“非类型”对象没有属性“字符串”
但当我打印type(lala)时,它显示lala是
。当我打印拉拉本身时,它会显示整个标签文本
(地址1)
我很困惑,因为我使用相同的想法来获取firstSpan,并且输出正确的字符串$1895没有任何问题。但这对拉拉不起作用……我花了几个小时拼命地在网上调查和搜索,但没有发现任何有用的东西
任何建议或暗示都将不胜感激 我不能100%确定这是否是您的代码的问题,但我认为您实际从类中获取数据的方式是错误的。通常,当我使用BeautifulSoup来查找特定的类时,我会使用与您不同的方法。例如,我将使用以下方法:
variable=soup.find(attrs={“class”:class\u name\u here})
后跟variable=variable.getText()
因此,在您的情况下,请尝试以下方法:
soup = BeautifulSoup(allResponse.content)
resultInfoTags = soup.find_all(attrs={"class":"result-info"})
infoList = []
for infoTag in resultInfoTags:
infoDS = {}
infoDS['detail_link'] = infoTag.find('a', href=True)
for metaData in infoTag.find_all(attrs={"class":"result-meta"}):
firstSpan = metaData.find(attrs={"class":"result-price"})
infoDS['price'] = firstSpan.getText()
lala = metaData.find(attrs={"class":"result-hood"})
infoDS['area'] = lala.getText()
infoList.append(infoDS)
同样,我不确定这是否是你的程序中正在发生的事情,所以如果不是,请告诉我。我今天通过大量实验幸运地发现了这一点。如果遇到相同的问题,请在
infoDS['area']=lala.getText()行前面添加一个non checkIf lala not None
,以解决问题。
尽管none检查在这里是有意义的,但我仍然不知道如果存在lala
的实际值,那么none检查是否会影响代码。如果您碰巧知道原因,请在此处留下解决方案/解释。非常感谢 发布所有html代码,请不要这样做。我将metaData.find(“span”,class=“result hood”)
替换为您的格式find(attrs={“class”:“result hood”})
它仍然抱怨AttributeError:'NoneType'对象没有属性“getText”
。。。我们不同的实现应该以相同的方式工作。我从bs4的官方网站上学习了类
格式
soup = BeautifulSoup(allResponse.content)
resultInfoTags = soup.find_all(attrs={"class":"result-info"})
infoList = []
for infoTag in resultInfoTags:
infoDS = {}
infoDS['detail_link'] = infoTag.find('a', href=True)
for metaData in infoTag.find_all(attrs={"class":"result-meta"}):
firstSpan = metaData.find(attrs={"class":"result-price"})
infoDS['price'] = firstSpan.getText()
lala = metaData.find(attrs={"class":"result-hood"})
infoDS['area'] = lala.getText()
infoList.append(infoDS)