Python - BeautifulSoup4: 标签变量丢失?

Python - BeautifulSoup4: tag variable getting lost?

我正在尝试访问文章标签内 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'})

这是输出。出于某种原因,在 print 'FirstDiv' 行和 SecondDiv= 行之前,打印命令被重复并且 "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'

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

您正在遍历所有 div 个元素:

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

对于每个 div 元素,您要遍历所有标题为 'article' 的元素。

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

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

然后将变量 FirstDiv 设置为在 articleTag 中搜索 class:row-primary。

似乎第二篇文章标签不包含任何带有 class row-primary 的元素,所以 return 是 None。即 FirstDiv = None

然后你运行:

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

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

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

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

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:]