使用Python从网站获取数据

时间:2017-04-14 04:00:18

标签: python python-3.x web

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

说明:

这是我们大学的网站:

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

我想点击第一个链接,通过网站中给出的程序,

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

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

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

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

4 个答案:

答案 0 :(得分:1)

您应该查看Selenium python库。

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

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

答案 1 :(得分:1)

您应该结帐请求模块以从Html获取数据。

PFB链接用于教学目的:

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

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

答案 2 :(得分:1)

您可以使用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>

每个链接都是对POST属性的网址值的action请求以及input元素。要使用requests -

以编程方式执行此操作
r = requests.post('url',data={'month':'...','year':'...','sem':'...','reg_type':'...','dn':'...','status1':'...'})

如果您再检查r.content,则会收到second page的来源。对此页面重复上述过程,这次相应地更改数据参数的键/值(使用检查器)并添加额外的'regno':'xyz'(其中xyz =注册号),您将收到最终的html内容为学生的结果页面。使用BeautifulSoup解析此问题,然后选择您需要的任何内容。

答案 3 :(得分:1)

以下是我对网站的观察:

  1. 网站使用表单显示学生的结果
  2. 表单网址为Bundle
  3. 表单方法是POST
  4. 传递给网址的数据为@Override public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { View view = inflater.inflate(R.layout.fragment_material_questions, container, false); ButterKnife.bind(this, view); getFragmentComponent().inject(this); presenter.setView(this); Bundle bundle = getArguments(); String youdData = bundle.getString("your_key"); ... }
  5. 所以你需要使用上面提到的参数将帖子请求提升到url。你可以在简单的python和请求中做到这一点。

    http://exam.cusat.ac.in/erp5/cusat/CUSAT-RESULT/Result_Declaration/display_sup_result

    这会创建60个单独的pdf文件。

    要将回复保存为pdf文件,您可以使用regno,deg_name,semester,year,result_type 参考this for installationthis for tutorial。我希望您亲身体验pdf保存部分。所以我正在跳过保存作为pdf部分。如果你发现很难有没有包可以将数据保存为python中的pdf,你可以google。我更喜欢这个,因为它接受一个列表作为输入/文件,因此您可以将所有响应添加到列表中并使用它来创建单个pdf文件。