帮助解释代码段

时间:2010-09-26 19:19:26

标签: python beautifulsoup

我是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'

3 个答案:

答案 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]

wherelinebreakwhat也都是任意局部变量。它们都被分配在一个声明中。在Python中,这被称为multiple assignment。这三个元素来自何处?incident.contents[:3]使用slice notation要求前三个元素。

        print where.strip()
        print what.strip()

这两行在屏幕上打印wherewhat。但是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,所以在这种情况下它只运行一次,这有点奇怪。