【问题标题】:Accessing password-protected news sites with valid password through c / libcurl通过 c / libcurl 使用有效密码访问受密码保护的新闻站点
【发布时间】:2012-05-22 10:02:46
【问题描述】:

我使用 libcurl 用 C 语言编写了一个网站爬虫,如果我们愿意,它可以从任何网站上抓取文本内容。

但是,我们需要的是能够抓取具有有效订阅的受密码保护的网站,例如大型新闻出版商。所以我们有这些网站的用户名/密码。

任何人都可以提供有关使用 libcurl 实现此目的的建议吗?我知道您可以将用户名/密码添加到 libcurl 选项中。我认为这样做,只需访问可能受密码保护的正确页面,就可以了。以下是 CURL 代码的摘录:

curl_easy_setopt(curlTestHandle, CURLOPT_URL, "mypasswordprotectedwebsiteurl");
curl_easy_setopt(curlTestHandle, CURLOPT_WRITEFUNCTION, WriteMemoryCallback);
curl_easy_setopt(curlTestHandle, CURLOPT_FOLLOWLOCATION, 1);
curl_easy_setopt(curlTestHandle, CURLOPT_MAXREDIRS, 5);

curl_easy_setopt(curlTestHandle, CURLOPT_USERPWD, "myusername:mypassword");

res = curl_easy_perform(curlTestHandle);
curl_easy_getinfo (curlTestHandle, CURLINFO_RESPONSE_CODE, &httpResponse);

但是,也许我过于简化了?也许它可能适用于某些网站,但不适用于其他网站?有没有人做过并实现了类似的事情?

谢谢,

马诺杰

【问题讨论】:

  • 如果你考虑使用 Python,有很多工具可以做这种事情。 (Selinium、Mechanize 等。)虽然速度可能是个问题,但启动和运行会更容易
  • 支持 Indeera 的评论。除非您需要某种跨平台/设备兼容性(例如在移动设备上执行此操作),否则建议您使用 Python。我在 Python 中创建了所有与屏幕抓取相关的原型(使用 Urllib / Urllib2 / BeautifulSoup),并且仅在需要时转移到 libcurl 以在设备上使用。

标签: c web-scraping libcurl password-protection http-authentication


【解决方案1】:

这取决于。如果站点为登录表单中的隐藏字段生成不同的编号,那么您必须解析(或简单搜索)HTML 文件以将隐藏字段附加到请求中。否则,您可以硬编码代码中的值。

这还取决于您要抓取多少个不同的网站。如果有很多不同的网站,那么最好的办法是解析HTML(或者通过字符串搜索读取表单)并获取登录时要填写的字段。

您还必须读取和设置 cookie。我认为 libcurl 应该具有轻松处理此问题的功能。

--- 我困了,我可能跑题了。如果这篇文章根本没有帮助,请告诉我删除它。

【讨论】:

  • 您的建议提供了一些有用的指导,谢谢。对此进行了尝试,您似乎可以在身份验证期间获取响应标头发送的 cookie。然后将其存储并基本上将其发送到新请求中以访问付费墙后面的内容。但是,这个概念似乎不适用于我发现的所有网站!所以我还是卡住了!
  • 我发现认证后请求中发送的cookie与响应中发送的原始cookie不同(实际上更大,数据更多)!
  • @ManojSolanki:有时,网站有更严格的条件来提供内容。您可能希望使用 Firefox 中的 Firebug 等工具或 Safari/Chrome 中的内置开发人员工具来观察流量和标头。您可以尝试在请求中复制这些信息,并查看服务器是否为请求提供服务。
  • 是的,这正是我一直在做的。我发现一些看起来像是在用户计算机上写入初始 cookie 的 javascript 代码。然后在后续请求中使用它,并构成我看到正在发送的较大 cookie 的一部分。所以不幸的是,对于像这样的网站,如果它使用 javascript 编写初始 cookie,我无法看到如何通过付费墙。但是我认为有些网站是可以抓取的,但不是所有网站都可以抓取,除非我太容易放弃了?!
  • 如果他们使用JS设置cookie,那么根据代码的复杂程度,可能无法爬取。有没有试过复制 JS 代码执行来设置 cookie?
猜你喜欢
  • 2011-11-29
  • 1970-01-01
  • 1970-01-01
  • 2011-07-01
  • 2014-03-25
  • 2010-09-27
  • 2013-03-02
  • 1970-01-01
相关资源
最近更新 更多