Python BeautifulSoup4:标记变量丢失了?

2024-04-27 00:05:55 发布

您现在位置:Python中文网/ 问答频道 /正文

我想在文章标签里找到一个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=行之前,print命令会重复,“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'

Tags: indivfortagtypechartelementfind
2条回答

首先,如果程序正在崩溃,我们需要看到错误语句。你知道吗

您正在遍历所有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。你知道吗

第二个articleTag似乎不包含任何类行primary的元素,因此返回值为None。i、 e FirstDiv=无

然后运行:

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

这会导致一个错误,因为前面提到的FirstDiv是None(即找不到)。你知道吗

在运行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:]

相关问题 更多 >