Python - BeautifulSoup4:标签变量迷路了吗?

时间:2015-09-22 18:20:31

标签: python beautifulsoup

我试图在文章标签内找到div内的div。这是我的代码,直到它崩溃:

chart = soup.find('div',{'class':"chart-data"})
for divTag in chart.find_all('div'):
    for articleTag in divTag.find_all('article'):
        savedSpans[1]=str(articleTag.get('id'))[4:]
        print savedSpans[1]
        FirstDiv=articleTag.find("div",{'class':'row-primary'})
        print 'articleTag', type(articleTag)
        print 'FirstDiv', type(FirstDiv)
        SecondDiv=FirstDiv.find("div",{'class':'row-title'})

这是输出。出于某种原因,在打印之前,FirstDiv' line和SecondDiv = line,重复打印命令并且" FirstDiv"变量失去了它的价值。和想法?

1
articleTag <class 'bs4.element.Tag'>
FirstDiv <class 'bs4.element.Tag'>

articleTag <class 'bs4.element.Tag'>
FirstDiv <type 'NoneType'>

以下是错误消息:

Traceback (most recent call last):
  File "billboardscrape.py", line 26, in <module>
    SecondDiv=FirstDiv.find("div",{'class':'row-title'})
AttributeError: 'NoneType' object has no attribute 'find'

2 个答案:

答案 0 :(得分:0)

首先,如果程序崩溃,我们需要查看错误声明。

您正在循环遍历所有div元素:

for divTag in chart.find_all('div'):

对于每个div元素,您循环遍历所有标题为“article”的元素。

for articleTag in divTag.find_all('article'):

好的,所以articleTag代表当前迭代的Div元素中找到的当前'article'标签。

然后将变量FirstDiv设置为articleTag中的类:row-primary。

似乎第二篇文章标签不包含类row-primary的任何元素,因此返回值为None。即FirstDiv =无

然后你运行:

SecondDiv=FirstDiv.find("div",{'class':'row-title'})

这导致错误,因为如前所述,FirstDiv是None(即找不到。

在运行SecondDiv = ...之前,你需要检查FirstDiv是否等于None,如果FirstDiv等于None,你知道不要对这个变量运行.find方法。

答案 1 :(得分:0)

通过在我的标记标识符中更具体来修复它:

chart = soup.find('div',{'class':"chart-data"})
    for divTag in chart.find_all('div', {'class':"container"}):
        for articleTag in divTag.find_all('article',{'class':"chart-row"}):
            savedSpans[1]=str(articleTag.get('id'))[4:]