如何使用Python从html表中web抓取数据并将其存储在csv文件中。我能提取一些部分,但不能提取其他部分

2024-10-02 06:29:58 发布

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

我是网页抓取的初学者,我对这个过程非常感兴趣。我给自己定了一个项目,可以让我一直保持动力直到我完成这个项目。在

我的项目

我的目标是编写一个Python程序,该程序可以进入我的大学成绩页面,并将一系列学生的所有成绩汇总到一个.csv文件或分隔文本文件中。我已经得到了将post请求提交到.asp页面的代码。如果您能指导我如何将主题详细信息存储在单独的列中,我将不胜感激,例如:

期望输出:

在序列号,名称、主题1、主题2、主题3、主题4、主题5、主题6等等

1、杰森,8,9,8,8,8,9…等等

彼得,6,8,9,8,7,7…等

一。在

一。在

一。在

一系列的考试号码。在

一些要尝试的示例数据

结果网站http://result.pondiuni.edu.in/candidate.asp

寄存器号:15te1218

考试:秒

有人能告诉我如何完成这项任务吗? 请纠正我,如果你能指导我解决问题,那就太棒了。在

这能用一种更简单的方法来完成吗?在

在下面的代码中,您可以看到我试图打印出学生的姓名,但它返回一个空集(不起作用)。我不希望它将数据作为一个集合返回,因为这个细节只有一次出现。在

我不知道如何从结果页的html表中提取该学生的主题名和相应的标记。这方面需要一些帮助。在

代码:

import requests
from bs4 import BeautifulSoup 
import re
import csv

for x in xrange(44,47):

    EXAMNO ='15te12'+str(x)
    print EXAMNO

    data = {"txtregno": EXAMNO,
        "cmbdegree": r"BTHEE~\BTHEE\result.mdb", # use raw strings
        "cmbexamno": "B",
        "dpath": r"\BTHEE\result.mdb",
        "dname": "BTHEE",
        "txtexamno": "B"}

results_page = requests.post("http://result.pondiuni.edu.in/ResultDisp.asp", data=data).content
soup = BeautifulSoup(results_page, 'html.parser').prettify()
regpa= "<!--Percentage / S.G.P.A : <b>(.+?) </b>&nbsp;&nbsp;&nbsp; -->"
patterngpa =re.compile(regpa)
gpa=re.findall(patterngpa,soup)
print gpa
rename="<font size=3 color=black>(.+?)</font>"
patternname=re.compile(rename)
name=re.findall(patternname,soup)
    print (name)

输出:

^{pr2}$

如果您能告诉我如何以所需的输出格式打印它,那会很有帮助。在

谢谢。在


Tags: 项目代码inimportre主题dataresult
1条回答
网友
1楼 · 发布于 2024-10-02 06:29:58

花了很多时间才找到暴力解决方案。在

import requests
from bs4 import BeautifulSoup 
import re
import csv
for x in xrange(44,47):
    EXAMNO ='15te12'+str(x)
    data = {"txtregno": EXAMNO,
    "cmbdegree": r"BTHEE~\BTHEE\result.mdb", # use raw strings
    "cmbexamno": "B",
    "dpath": r"\BTHEE\result.mdb",
    "dname": "BTHEE",
    "txtexamno": "B"}
    results_page = requests.post("http://result.pondiuni.edu.in/ResultDisp.asp", data=data).content
    soup = BeautifulSoup(results_page, 'html.parser').prettify()
    string=str(BeautifulSoup(results_page, 'html.parser'))
    regpa= "<! Percentage / S.G.P.A : <b>(.+?) </b>&nbsp;&nbsp;&nbsp;  >"
    print (re.search(regpa,string,re.M|re.I )).group(1) 
    regname="<b>Name of the student : <b><font color=\"black\" size=\"3\">(.*)</font></b></b>"
    print (re.search(regname,string,re.M|re.I )).group(1)
    regsub="66%\"><font color=\"black\" face=\"arial\" size=\"2\">(.*)</font></td>"
    matches=(re.findall(regsub,string,re.M|re.I ))

    for i in xrange(len(matches)):
        regsubm=">"+matches[i]+"</font></td>\n<td align=\"center\" bgcolor=\"white\" width=\"2%\"><font color=\"black\" face=\"arial\" size=\"2\">..</font></td>\n<td align=\"center\" bgcolor=\"white\" width=\"7%\"><font color=\"black\" face=\"arial\" size=\"2\">[\xc2]?[\xa0]?[\xc2]?[\xa0]?-</font></td>\n<td align=\"center\" bgcolor=\"white\" width=\"1%\"><font color=\"black\" face=\"arial\" size=\"2\">-</font></td>\n<td align=\"center\" bgcolor=\"white\" width=\"5%\"><font color=\"black\" face=\"arial\" size=\"2\">-</font></td>\n<td align=\"center\" bgcolor=\"white\" width=\"5%\"><font color=\"black\" face=\"arial\" size=\"2\">(.*)</font>"
        matchesm=re.findall(regsubm,string,re.M)
        print matches[i],' ->',matchesm[0]

相关问题 更多 >

    热门问题