[英]Fetching data from a website using Python
我想知道是否可以通过提供一些特定的输入来使用python从网站获取数据。 我知道我应该写一些代码,但是在这里我从头开始,有些困惑,希望您能理解。
说明:
这是我们的大学网站:
我想通过网站中给出的程序单击“第一链接”,
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
解析此内容,然后选择所需的内容。
这些是我对网站的观察:
http://exam.cusat.ac.in/erp5/cusat/CUSAT-RESULT/Result_Declaration/display_sup_result
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.