我试图在文章标签内找到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'
答案 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:]