使用带有身份验证的wget抓取coursera网页

时间:2015-05-14 00:56:43

标签: web-crawler wget

我正在尝试抓取Coursera中的一些网页,这对于课程结束后的审核非常重要,例如教学大纲,家庭作业等。

我正在使用wget,但我发现登录是必需的。所以我尝试了两个帖子:1 2。 他们都没有工作。

我发现Coursera网页不以* .html或* .htm结尾。 有没有办法在Coursera中使用wget登录和下载网页?

1 个答案:

答案 0 :(得分:1)

此Python程序包https://github.com/dgorissen/coursera-dl可能更适用于您要求的内容,但它不会使用 wget 并使用和需要Python。使用Python 2.7和pip包的作者注释。此软件包的优点是您可以一次性下载与课程相关的所有内容。

请注意,在首次打开课程页面之前,您需要接受Coursera课程的荣誉代码,然后才能按照主项目页面和README.md中的说明正确运行此脚本。与github.com上的至少一个项目不同,该项目在过去6个月内通过最新更新得到积极维护。

强烈建议你在我自己的Windows测试中查看其中一个Python软件包(除非你在另一个平台上找到与wget的区别),看来wget工具本身尽管在任一命令中都包含--no-check-certificate,但仍然存在Coursera安全证书的问题。

此测试是使用版本字符串中基于mingw32构建的 GNU Wget 1.14 完成的。最后,请注意Coursera登录协议的v1和v3都遇到了相同的结果。

wget(使用Coursera Login v1,也来自下面的评论):

wget --save-cookies=cookies.txt --no-check-certificate --keep-session-cookies
--post-data="email=email@example.com&password=mypassword&webrequest=true" 
https://accounts.coursera.org/api/v1/login?

Resolving accounts.coursera.org (accounts.coursera.org)... 54.225.163.33, 107.20
.232.186, 54.243.110.245
Connecting to accounts.coursera.org (accounts.coursera.org)|54.225.163.33|:443..
. connected.
WARNING: cannot verify accounts.coursera.org's certificate, issued by ...
  Unable to locally verify the issuer's authority.
HTTP request sent, awaiting response... 400 Bad Request
ERROR 400: Bad Request.

wget更新(使用Coursera Login v3):

请注意,wget(在Windows上测试)似乎不适用于Coursera Login v1(下面的评论)或Coursera Login v3(紧接在下面:

wget https://accounts.coursera.org/api/login/v3/login? --save-cookies cookies.txt
--keep-session-cookies --no-check-certificate --post-data
"email=email@example.com&password=mypassword&webrequest=true"


Resolving accounts.coursera.org (accounts.coursera.org)... 50.19.244.62, 107.20.
145.110, 54.221.210.127
Connecting to accounts.coursera.org (accounts.coursera.org)|50.19.244.62|:443...
 connected.
WARNING: cannot verify accounts.coursera.org's certificate, issued by ...
  Unable to locally verify the issuer's authority.
HTTP request sent, awaiting response... 400 Bad Request
ERROR 400: Bad Request.