Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/296.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何在python中解析多个tr标记_Python_Html_Beautifulsoup - Fatal编程技术网

如何在python中解析多个tr标记

如何在python中解析多个tr标记,python,html,beautifulsoup,Python,Html,Beautifulsoup,我目前在解析表中出现的所有tr标记时遇到问题,我能够解析第一个tr标记,但我无法理解如何解析所有后续tr标记,我曾想过使用for循环,但它不起作用。 我只包含了部分代码,其中包括我希望存储在json文件中的tr标记 以下是我尝试过的: def parseFacultyPage(br, facultyID): if br is None: return None br.open('https://academics.vit.ac.in/student/stud_h

我目前在解析表中出现的所有tr标记时遇到问题,我能够解析第一个tr标记,但我无法理解如何解析所有后续tr标记,我曾想过使用for循环,但它不起作用。 我只包含了部分代码,其中包括我希望存储在json文件中的tr标记

以下是我尝试过的:

def parseFacultyPage(br, facultyID):
    if br is None:
        return None

    br.open('https://academics.vit.ac.in/student/stud_home.asp')
    response = br.open('https://academics.vit.ac.in/student/class_message_view.asp?sem=' + facultyID)
    html = response.read()
    soup = BeautifulSoup(html)
    tables = soup.findAll('table')

    # Extracting basic information of the faculty
    infoTable = tables[0].findAll('tr')
    name = infoTable[2].findAll('td')[0].text
    if (len(name) is 0):
        return None
    subject = infoTable[2].findAll('td')[1].text
    msg = infoTable[2].findAll('td')[2].text
    sent = infoTable[2].findAll('td')[3].text
    emailmsg = 'Subject: New VIT Email' + msg
如果tr标记存在多个,下面是示例html代码

<table width="79%" border="0" cellpadding="0" cellspacing="0" height="350">
  <tr>
    <td valign="top" width="1%" bgcolor=#FFFFFF>
        &nbsp;
    </td>
    <td valign="top" width="78%" bgcolor=#FFFFFF>



    <center><b><u>VIEW CLASS MESSAGE - Winter Semester 2015~16</u></b></center>
    <br><br>


        <br>
        <table cellpadding=4 cellspacing=2 border=0 bordercolor='black' width="100%">

        <tr bgcolor=#5A768D>
            <td width="25%"><font color=#FFFFFF>From</font></td>
            <td width="25%"><font color=#FFFFFF>Course</font></td>
            <td><font color=#FFFFFF>Message</font></td>
            <td width="10%"><font color=#FFFFFF>Posted On</font></td>
        </tr>

            <tr bgcolor="#EDEADE" onMouseOut="this.bgColor='#EDEADE'" onMouseOver="this.bgColor='#FFF9EA'">
                <td valign="top">RAGHAVAN R (SITE)</td>
                <td valign="top">ITE308 - Distributed Systems - TH</td>
                <td valign="top">Dear students,

As informed in the class, this is to remind you Today special class from 6 to 6.50 pm at same venue SJT 126.

regards

R. Raghavan
SITE</td>
                <td valign="top">11/02/2016 11:42:57</td>
            </tr>

            <tr bgcolor="#EDEADE" onMouseOut="this.bgColor='#EDEADE'" onMouseOver="this.bgColor='#FFF9EA'">
                <td valign="top">SMART (APT) (ACAD)</td>
                <td valign="top">STS302 - Soft Skills - SS</td>
                <td valign="top">Dear Students,

As  04 Feb 16 to 08 Feb 16 were announced as “No Instruction days”, the first assessment that was supposed to happen from 08 Feb 16 to 12 Feb 16 is being postponed to 7th week (15 Feb 16 to 19 Feb 16)
</td>
                <td valign="top">10/02/2016 21:48:14</td>
            </tr>

        <tr bgcolor=#5A768D>
            <td>&nbsp;</td>
            <td>&nbsp;</td>
            <td>&nbsp;</td>
            <td>&nbsp;</td>
        </tr>

        </table>


    <br><br>
    </td>
  </tr>
</table>

查看课堂信息-2015~16冬季学期



从…起 课程 消息 张贴在 拉哈万R(现场) ITE308-分布式系统-第 亲爱的同学们:, 如课堂上所述,这是为了提醒您今天下午6点至6点50分在SJT 126同一地点举行的特别课程。 当做 拉格万 场地 11/02/2016 11:42:57 智能(APT)(ACAD) STS302-软技能-SS 亲爱的同学们:, 由于2016年2月4日至2016年2月8日被宣布为“无指导日”,原定于2016年2月8日至2016年2月12日进行的第一次评估将推迟到第7周(2016年2月15日至2016年2月19日) 10/02/2016 21:48:14


您应该首先迭代如下所示的行,并在每行中,在开始时将列查询到
columns
变量中

for index, row in enumerate(tables[1].findAll('tr')):
    if index==0:
        continue

    columns= row.findAll('td')
    name = columns[0].text
    if not name:
        return None
    subject = columns[1].text
    msg = columns[2].text
    sent = columns[3].text
编辑:看起来您的html有两个表结构。你需要内在的。因此,使用索引1代替表[1]


我还在迭代器周围添加了行索引。使用这种方法,您可以跳过标题行,当
index==0

您应该首先迭代抛出下面的行,在每一行中,在开始时将列查询到
columns
变量中

for index, row in enumerate(tables[1].findAll('tr')):
    if index==0:
        continue

    columns= row.findAll('td')
    name = columns[0].text
    if not name:
        return None
    subject = columns[1].text
    msg = columns[2].text
    sent = columns[3].text
编辑:看起来您的html有两个表结构。你需要内在的。因此,使用索引1代替表[1]


我还在迭代器周围添加了行索引。使用此选项,您可以跳过标题行,当
index==0

你的答案是正确的,但我无法让它在html页面上工作,我只包含了部分html代码,因此你的答案不适用于该页面,它只是正确地存储消息。你可以查看html代码并告诉我如何正确地定位它吗?请检查
表[1]
获取内部表。更新了答案并做了一些解释您的意思是
msg
在第三个循环中没有取任何值?请描述一下。您没有提到如何存储这些值很抱歉,它正在工作我刚在末尾传递了return,所以它只存储了第一条消息您可以尝试
json.load(f.read())
但是你可能应该检查已经详细说明答案的现有问题。你的答案是正确的,但我无法让它在html页面上运行。我只包含了部分html代码,因此你的答案不适用于该页面,它只是正确地存储了消息。你可以查看html代码并告诉我如何定位它吗是否正确?请检查
表[1]
是否为您提供了内部表。更新了答案并做了一些解释您的意思是
msg
在第三个循环中没有取任何值?请描述一下。你没有提到你是如何存储这些值的,很抱歉,它起作用了,我刚在末尾传递了return,所以它只存储了第一条消息。你可以尝试
json.load(f.read())
,但你可能应该检查已经详细说明答案的现有问题