繁体   English   中英

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

[英]How to web scrape data using Python from an html table and store it in a csv file. I am able to extract some parts but not the others

我是Web抓取的初学者,并且对此过程非常感兴趣。 我为自己设定了一个项目,该项目可以使我保持动力直到完成项目。

我的项目

我的目标是编写一个Python程序,该程序可转到我的大学成绩页面,并刮取一系列学生的所有结果,并将他们的每个分数存储在.csv文件或带分隔符的文本文件中的每个主题中。 我已经获得了将提交请求提交到.asp页的代码。 如果您可以指导我如何将主题明智的信息存储在单独的列中,例如:

所需输出:

Sl.no,Name,Subject1,Subject2,Subject3,Subject4,Subject5,Subject6,.. etc

1,杰森,8,9,8,8,8,9..etc

2,彼得,6,8,9,8,7,7..etc

一系列的考试编号。

一些样本数据进行尝试

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

寄存器编号 :15te1218

学位 :BTHEE

考试 :第二

谁能给我指导我如何完成任务的方向? 请纠正我,如果您可以指导我解决问题,那将非常好。

可以用更简单的方式完成此操作吗?

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

我不知道如何从结果页面的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)

输出:

15te1244
[u'8.67']
15te1245
[u'8.8']
[]
15te1246
[u'7.8']
[]

如果您可以向我展示如何以所需的输出格式进行打印,将对您有所帮助。

谢谢。

花了很多时间找到蛮力解决方案。

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]

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM