使用Python从网站获取数据
我想知道我是否可以通过提供一些特定的输入来使用python从网站获取数据。 我知道我应该写一些代码,但在这里我从零开始,有点困惑,希望你能理解 说明: 这是我们大学的网站: 我想通过网站上的程序点击第一个链接 下载/查看2016年11月B.Tech V学期的成绩-定期考试 然后下一页有一个输入注册号的选项,因为我知道注册号,我可以将它分配给一个变量。 在这里我想得到多个学生的结果,这是本课程的主要目的 例如:从12153600到12153660的结果应该从网站上逐个检索 最后一件事是,如果我能得到结果,我能把它转换成PDF格式吗?如果可能,我可以将所有这些结果转换为一个单独的PDF文件作为不同的页面吗?您应该查看python库 使用该库,您将能够实现您想要的。具体来说,您可以使用Selenium的get函数获取您的网站,使用Selenium的click函数单击第一个链接,等等使用Python从网站获取数据,python,python-3.x,web,Python,Python 3.x,Web,我想知道我是否可以通过提供一些特定的输入来使用python从网站获取数据。 我知道我应该写一些代码,但在这里我从零开始,有点困惑,希望你能理解 说明: 这是我们大学的网站: 我想通过网站上的程序点击第一个链接 下载/查看2016年11月B.Tech V学期的成绩-定期考试 然后下一页有一个输入注册号的选项,因为我知道注册号,我可以将它分配给一个变量。 在这里我想得到多个学生的结果,这是本课程的主要目的 例如:从12153600到12153660的结果应该从网站上逐个检索 最后一件事是,如果我能
许多研究人员使用它来模拟网站(如Facebook)上的点击事件并收集结果数据。您应该检查请求模块以从Html获取数据 PFB用于教程目的的链接:
您可以使用Python的
请求
库发送请求,并美化组
解析您收到的html
首先,您需要使用浏览器的开发工具检查页面。如果这样做,您将发现每个链接行都是一个表单元素-
<form id="myForm0121x1" action="..." method="post">
<input name="month" value="..." type="hidden">
<input name="year" value="..." type="hidden">
<input name="sem" value="..." type="hidden">
<input name="reg_type" value="..." type="hidden">
<input name="dn" value="..." type="hidden">
<input name="status1" value="..." type="hidden">
</form>
如果您随后选中r.content
,则您将已收到该文件的来源。对此页面再次重复上述过程,这次相应地更改数据参数的键/值(使用inspector),并添加额外的'regno':'xyz'
(其中xyz=注册号),您将收到学生结果页面的最终html内容。使用BeautifulSoup
解析此内容,并选择您需要的任何内容。以下是我对网站的观察:
该网站使用表单显示学生的结果
表单url是http://exam.cusat.ac.in/erp5/cusat/CUSAT-RESULT/Result_Declaration/display_sup_result
表单方法是POST
传递到url的数据包括注册号、学位名称、学期、年份、结果类型
因此,您需要使用上述参数将post请求提升到url。您可以在简单的python和请求中实现这一点
import requests # to make requests.
import pdfkit # for saving as pdf
url="http://exam.cusat.ac.in/erp5/cusat/CUSAT-RESULT/Result_Declaration/display_sup_result" #form url
pdfs=[]
payload={ "deg_name":"B.Tech", "semester":"5", "month":"November", "year":"2016", "result_type":"Regular" }
option={'quiet': ''}
for i in range(12153600,12153660+1):
payload.update({"regno":str(i)})
response=requests.post(url,data=payload)
pdfkit.from_string(response.content,str(i)+".pdf",options=option) #saves to 12153600.pdf - 12153660.pdf files
open("result_"+str(i)+".html","w").write(response.content) #This will save results from roll no 12153600 - 12153660 in result_rollno.html files.
这将创建60个单独的pdf文件
要将响应保存为pdf文件,可以使用pdfkit
参考我想让你把pdf保存部分作为实际操作。因此,我将跳过另存为pdf部分。如果您发现很难在python中将数据保存为pdf格式,您可以在google上搜索。我更喜欢这样做,因为它接受一个列表作为输入/文件,这样您就可以将所有响应添加到一个列表中,并使用它创建一个pdf文件。为什么您想要60个不同学生连续60个注册号的结果?实际上它是用于数据处理…@MaxPowerThis可能更适合作为注释。你给他们指出了正确的方向,但没有真正回答问题。BeautifulSoup是一个很好的方法。我还使用BeautifulSoup进行爬网过程首先非常感谢@Mani..这是我想要的东西…但我仍然有一些问题。。我使用了pdfkit,但所需的输出不是精确的形式。。。获得的输出格式不正确,即使结果html页面没有css文件。。。当我从结果页面单击“打印到PDF”时,它将正确对齐,而使用pdfkit时,它不会。。请帮帮我…你能看看这个问题吗@Mani我在我的电脑中再次检查了它,它工作正常。您是否使用安装页面中提到的apt get
安装了webkit?实际上我使用的是mac。。目前我的问题是pdf文件不是我想要的。。看到这个链接,我需要的是一个输出PDF文件作为第一个屏幕截图,而我目前收到的PDF文件作为第二个屏幕截图。我没有mac来执行和检查代码,但在我的pc中它工作正常。检查如何安装webkit,我认为它应该有问题。
import requests # to make requests.
import pdfkit # for saving as pdf
url="http://exam.cusat.ac.in/erp5/cusat/CUSAT-RESULT/Result_Declaration/display_sup_result" #form url
pdfs=[]
payload={ "deg_name":"B.Tech", "semester":"5", "month":"November", "year":"2016", "result_type":"Regular" }
option={'quiet': ''}
for i in range(12153600,12153660+1):
payload.update({"regno":str(i)})
response=requests.post(url,data=payload)
pdfkit.from_string(response.content,str(i)+".pdf",options=option) #saves to 12153600.pdf - 12153660.pdf files
open("result_"+str(i)+".html","w").write(response.content) #This will save results from roll no 12153600 - 12153660 in result_rollno.html files.