Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/loops/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Beautifulsoup 美丽集团';s find方法返回标记项,但调用字符串get';非类型';错误_Beautifulsoup_Web Crawler_Html Parsing - Fatal编程技术网

Beautifulsoup 美丽集团';s find方法返回标记项,但调用字符串get';非类型';错误

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>

我刚刚开始学习python和bs4。我正在尝试解析如下所示的html页面:

....
<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 check
If 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)