【问题标题】:Scraping authenticated website in node.js在 node.js 中抓取经过身份验证的网站
【发布时间】:2016-09-13 19:06:00
【问题描述】:

我想用 node.js 抓取我的大学网站 (moodle),但我还没有找到能够做到这一点的无头浏览器。我使用 RoboBrowser 在 python 中只用了 10 行代码就完成了:

from robobrowser import RoboBrowser
url = "https://cas.upc.edu/login?service=https%3A%2F%2Fatenea.upc.edu%2Fmoodle%2Flogin%2Findex.php%3FauthCAS%3DCAS"
browser = RoboBrowser()
browser.open(url)
form = browser.get_form()
form['username'] = 'myUserName'
form['password'] = 'myPassword'
browser.submit_form(form)
browser.open("http://atenea.upc.edu/moodle/")
print browser.parsed

问题是该网站需要身份验证。你能帮助我吗?谢谢!

PD:我认为这可能很有用 https://www.npmjs.com/package/form-scraper,但我无法让它发挥作用。

【问题讨论】:

标签: javascript python node.js meteor


【解决方案1】:

假设您想阅读第 3 方网站并“抓取”特定信息,您可以使用诸如 cheerio 之类的库在 Node 中实现此目的。

Cheerio 是一个“专为服务器设计的核心 jQuery 的精益实现”。这意味着给定一个 DOM(或其一部分)的字符串表示,cheerio 可以像 jQuery 一样遍历它。

example from Max Ogden 展示了如何使用 request 模块从远程服务器获取 HTML,然后将其传递给 cheerio

var $ = require('cheerio')
var request = require('request')

function gotHTML(err, resp, html) {
  if (err) return console.error(err)
  var parsedHTML = $.load(html)
  // get all img tags and loop over them
  var imageURLs = []
  parsedHTML('a').map(function(i, link) {
    var href = $(link).attr('href')
    if (!href.match('.png')) return
    imageURLs.push(domain + href)
  })
}

var domain = 'http://substack.net/images/'
request(domain, gotHTML)

【讨论】:

  • 谢谢,但是我已经知道如何用js抓取公共网站了,问题是我想抓取一个需要认证的页面。
  • 那你为什么不在你的问题中解释一下呢?
  • 我不解释,但在python代码中可以清楚地看到。
【解决方案2】:

Selenium 支持多种语言、多种平台和多种浏览器。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-01-02
    • 1970-01-01
    • 1970-01-01
    • 2018-02-27
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多