我是python和beautifulsoup的新手。
在for
声明中,incident
是什么?它是类,类型,变量吗?
紧随其后的那条线......完全丢失了。
有人可以向我解释一下这段代码吗?
for incident in soup('td', width="90%"):
where, linebreak, what = incident.contents[:3]
print where.strip()
print what.strip()
break
print 'done'
答案 0 :(得分:3)
第一个语句启动一个循环,该循环解析HTML文档,查找宽度设置为90%的td元素。表示td元素的对象绑定到名称incident
。
第二行是多重赋值,可以按如下方式重写:
where = incident.contents[0]
linebreak = incident.contents[1]
what = incident.contents[2]
换句话说,它从td标签中提取内容,并为每个元素赋予更有意义的名称。
循环中的最后一行导致循环在仅检查第一个元素后中断。该代码可能已经被重写为不使用可以使其更清晰的循环。
答案 1 :(得分:1)
欢迎使用Stack Overflow!我们来看看发生了什么。我已经添加了进一步阅读的链接,在询问更多问题之前先看看它们。
for incident in soup('td', width="90%"):
incident
只是soup
返回的可迭代的任意局部变量。一般来说,for
statement中的局部变量可能是一个列表,但可能是一个元组甚至是一个字符串。如果可以迭代某些东西,比如文件,那么Python可能会接受for
来浏览这些项目。
在这种情况下,soup
返回宽度为90%的td
HTML元素列表。我们可以看到这一点,因为下一行会发生什么:
where, linebreak, what = incident.contents[:3]
where
,linebreak
和what
也都是任意局部变量。它们都被分配在一个声明中。在Python中,这被称为multiple assignment。这三个元素来自何处?incident.contents[:3]
使用slice notation要求前三个元素。
print where.strip()
print what.strip()
这两行在屏幕上打印where
和what
。但是strip
在做什么?它正在消除空白区域。因此," some text "
变为"some text"
。
break
break
只是在第一个周期后打破for
循环。它并没有打破整个计划。相反,它会将程序的流程返回到循环后的下一行。
print 'done'
这就是它所说的,将“完成”字样发送到屏幕上。如果您正在使用此程序,当您看到屏幕上显示“已完成”(不带引号)时,您就知道它已完成。
¹为了在技术上更精确,他们将字节发送到标准输出(通常称为标准输出)。
答案 2 :(得分:0)
首先,Python关注换行符和空格的位置,因此您应该使用代码标记来呈现Python代码。就像我一样,我必须猜测你的代码最初是如何格式化的。
for incident in soup('td', width="90%"):
where, linebreak, what = incident.contents[:3]
print where.strip()
print what.strip()
break
print 'done'
'for y in y:'语句假设'y'是某种可迭代(类似列表)的东西 - 一个有序的对象集合。然后,对于列表中的每个元素,它将元素分配给名称“x”,并运行缩进块。
在这种情况下,似乎有一个函数,soup(),它返回一个事件列表。每个事件都是一个包含属性的对象,称为“内容”,它本身就是一个列表; [:3]表示'列表的前三个元素'。因此,该行在事件内容中采用前三项内容,并为其指定名称“where”,“linebreak”和“what”。 strip()函数从字符串的开头和结尾删除空格。所以我们打印'where'和'what'。 'break'退出for-loop,所以在这种情况下它只运行一次,这有点奇怪。