繁体   English   中英

使用Python从网站获取数据

[英]Fetching data from a website using Python

我想知道是否可以通过提供一些特定的输入来使用python从网站获取数据。 我知道我应该写一些代码,但是在这里我从头开始,有些困惑,希望您能理解。

说明:

这是我们的大学网站:

http://exam.cusat.ac.in/

我想通过网站中给出的程序单击“第一链接”,

B / Tech V学期2016年11月下载/查看结果-定期考试

然后下一页可以选择输入注册号,因为我知道注册号,所以可以将其分配给变量。 在这里,我想获得多个学生的成绩,这是该计划的主要目标。

例如:从12153600到12153660开始的结果应从网站中逐一检索。

最后一件事是,如果我可以得到结果,可以将其转换为PDF吗? 如果可能的话,我可以将所有这些结果转换为不同页面的单个PDF文件吗?

您应该检出Selenium python库。

您将可以使用该库实现所需的功能。 具体来说,您将使用Selenium的get函数来获取您的网站,使用selenium的click函数来单击第一个链接,依此类推。

许多研究人员将其用于模拟Facebook等网站上的点击事件并收集结果数据。

您应该检出请求模块以从HTML中获取数据。

PFB的教程链接:

http://docs.python-requests.org/en/master/user/quickstart/

https://media.readthedocs.org/pdf/requests/master/requests.pdf

您可以使用Python的requests库发送请求,并使用BeautifulSoup解析收到的html。

首先,您需要使用浏览器的开发工具来检查页面。 如果这样做,您会发现每个链接行都是一个form元素-

<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>

每个链接都是对action属性的url值和input元素的POST请求。 要使用requests以编程方式执行此操作-

r = requests.post('url',data={'month':'...','year':'...','sem':'...','reg_type':'...','dn':'...','status1':'...'})

如果您随后检查r.content ,则将收到第二页的来源。 在此页面上再次重复上述过程,这次相应地更改数据参数的键/值(使用检查器),并添加一个额外的'regno':'xyz' (其中xyz =注册号),您将收到最终的学生成绩页面的html内容。 使用BeautifulSoup解析此内容,然后选择所需的内容。

这些是我对网站的观察:

  1. 该网站使用表格显示学生的成绩
  2. 表单网址为http://exam.cusat.ac.in/erp5/cusat/CUSAT-RESULT/Result_Declaration/display_sup_result
  3. 表单方法是POST
  4. 传递给url的数据是regno,deg_name,semester,year,result_type

因此您需要使用上述参数向网址提出发布请求。您可以在简单的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部分。 如果您发现困难,则没有可将google格式的数据另存为pdf的软件包。 我更喜欢这样做,因为它接受列表作为输入/文件,因此您可以将所有响应添加到列表中,并使用它来创建单个pdf文件。

暂无
暂无

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

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