Articles of 网页抓取

Request.js与Browserify无法正常工作

我目前正在构build一个js chrome扩展,为此,我需要从一些站点中删除数据。 所以,基于这个SO问题,我发现我可以通过使用Browserify 请求来实现这一点 。 我安装了两个使用npm和创build一个bundle.js片段创build我的bundle.js文件( 因为权限的原因,运行terminal命令不起作用 ),所以我可以在客户端,我的浏览器运行Node js require 。 好的,所以我最终设法创build了bundle.js文件,并试图在我的本地服务器上运行它,但它一直给我CORS错误,并且不返回所需的响应: 抓取API无法加载https://somesite/index.html 。 请求的资源上没有“Access-Control-Allow-Origin”标题。 原因' http:// localhost:8080 '因此不被允许访问。 如果一个不透明的响应满足您的需求,请将请求的模式设置为“no-cors”来取消禁用CORS的资源。 奇怪的是,如果我使用node从terminal直接运行“unbundled”文件: $ node myFileWithRequires.js 它按预期工作,返回报废的数据。 我究竟做错了什么? 我怎样才能使用request和浏览器在客户端的数据? 码: myBrowserifySnippet.js var browserify = require('browserify'); var b = browserify(); b.add('myrequest.js'); const fs = require('fs'); const writable = fs.createWriteStream('bundle.js'); b.bundle().pipe(writable); myFileWithRequires.js var request = require('request'); request('http://www.google.com', function (error, […]

使用jsdom时出现“调度事件”DOMNodeInsertedIntoDocument“失败”错误

我正在考虑使用JSDom的项目,需要刮一个网站。 我开始尝试一个亚马逊网页。 这是一个示例代码: jsdom.env(url, ["http://code.jquery.com/jquery.js"], function(errors, window) { console.log(errors); var $ = window.$, results = parseResultsPage($); //do some stuff window.close(); }); 起初,我有一个if(errors.length > 0) …子句,但事实certificate, errors总是充满的。 即使拼抢本身有效,我得到所有我需要的结果,我总是得到: [ { type: 'error', message: 'Dispatching event \'DOMNodeInsertedIntoDocument\' failed', data: { error: [Object], event: [Object] } } ] 这意味着我无法有效地testing错误。 简单地忽略这个错误对我来说是不安全的。 有什么build议么? 这可能是亚马逊相关的问题吗? (他们在他们的页面上使用jQuery 1.2.6) 更新 : 在JSDom github页面( […]

如何在Node.js中模拟POST请求之后访问响应体?

我现在一直在尝试这个很长一段时间。 我想要从具有成人内容的subreddit中取消内容。 但是,问题是,你必须回答一个简单的问题,才能访问该页面,即如果你是18+或不。 我做了一些关于源代码的研究,发现这个解决scheme是一个简单的POST请求。 你需要发送参数“over18 = yes”。 但我的问题是,我无法访问post后的响应主体。 这里是在节点中使用http请求的代码。 我甚至用节点“请求”模块尝试过,但没有任何帮助。 希望find能够帮助我的人。 var http = require("http"); var options = { host: 'www.reddit.com', port: 80, path: '/over18?dest=http%3A%2F%2Fwww.reddit.com%2Fr%2Fnsfw&over18=yes', method: 'POST' }; var req = http.request(options, function(res) { console.log('STATUS: ' + res.statusCode); console.log('HEADERS: ' + JSON.stringify(res.headers)); res.setEncoding('utf8'); res.on('data', function (chunk) { console.log('BODY: ' + chunk); }); }); req.on('error', function(e) […]

如何在Node.js中完成所有Web抓取请求后才呈现页面?

我正在使用jsdom (Node.js的networking抓取库)在1到10个Web请求之间的任何地方。 它是这样的: app.get('/results', function(req, res) { jsdom.env( "http://website1.com", ["http://code.jquery.com/jquery.js"], function (errors, window) { // scrape website #1 } ); jsdom.env( "http://website2.com", ["http://code.jquery.com/jquery.js"], function (errors, window) { // scrape website #2 } ); jsdom.env( "http://website3.com", ["http://code.jquery.com/jquery.js"], function (errors, window) { // scrape website #3 } ); } res.render('results', { items: items }); } 在所有jsdom请求完成之后,我收集了所有我需要的信息之后,如何才运行res.render() ? […]

如何从JavaScript下载网页?

我如何从JavaScript呈现的网页链接下载? Python是首选语言。 到目前为止,我已经尝试在无头服务器上使用Selenium的Python绑定 。 这种方法非常缓慢,充满错误,不能可靠地确定下载进度或成功。 此外,无头服务器干扰我的剪贴板(这是一个问题)。 我使用Firefox,因为它可以configuration为下载到默认目录,但我不认为Chrome的情况是更好的。 另外,我试过使用WebKit。 def render(url): """Fully render a webpage (JavaScript and all) and return the HTML.""" import subprocess from textwrap import dedent script = dedent("""\ import sys from PyQt4.QtCore import QUrl from PyQt4.QtGui import QApplication from PyQt4.QtWebKit import QWebPage class Render(QWebPage): def __init__(self, url): self.app = QApplication(sys.argv) QWebPage.__init__(self) self.loadFinished.connect(self._loadFinished) self.mainFrame().load(QUrl(url)) […]

(节点)警告:检测到可能的EventEmitter内存泄漏

我写了一个基于cheerio.js和request.js构build的小脚本,用于从订阅代理站点获取联系信息(URL和电子邮件)。 虽然它运行并返回我需要的所有信息,但在运行时,我连续5次收到以下警告: (node) warning: possible EventEmitter memory leak detected. 11 listeners added. Use emitter.setMaxListeners() to increase limit. Trace at Socket.EventEmitter.addListener (events.js:160:15) at Socket.Readable.on (_stream_readable.js:689:33) at Socket.EventEmitter.once (events.js:179:8) at Request.onResponse (/home/max/Desktop/scraping/node_modules/request/request.js:625:25) at ClientRequest.g (events.js:175:14) at ClientRequest.EventEmitter.emit (events.js:95:17) at HTTPParser.parserOnIncomingClient [as onIncoming] (http.js:1689:21) at HTTPParser.parserOnHeadersComplete [as onHeadersComplete] (http.js:120:23) at Socket.socketOnData [as ondata] (http.js:1584:20) at TCP.onread (net.js:525:27) 我的本能告诉我,我可能会得到这个警告,因为我嵌套在另一个请求的请求。 […]

如何使用cheerio从网页中的换行中删除内容

祝大家好日子。 我有2个问题在使用Cheerionetworking抓取。 我经历了可能有我的答案的问题,但找不到回答我的问题的问题,于是我决定提出一个问题。 背景资料:我只学习Javascript约2〜3个月,所以我可能会问一些很有趣的问题,请原谅。 目的:我正在寻找从以下网站刮来的数据 – 我期待得到 自行车商店的名字 自行车商店的地址 自行车店的电话 我已经设法刮掉我需要的数据,但是它们是在一个HTML组中(不知道这是如何调用它,这是我使用的代码。 var request = require('request'); var cheerio = require('cheerio'); var url = 'http://www.togoparts.com/bikeshops/list_shops.php?country=MY'; request(url, function(err, resp, body) { if (err) throw err; $ = cheerio.load(body, { normalizeWhitespace: false }); var doc = $("td[width='52%'].verdana1"); doc.each(function() { var link = $(this); console.log(link.html()); }); }); 结果运行在一个循环中,我可以得到以下内容。 我无法发布图片 – […]

节点请求库错误:getaddrinfo ENOTFOUND dns.js 26

我以连续的方式(每天多次请求一次)抓取网站,并且每次都使用asynchronous和请求节点模块。 我使用async eachLimit并行运行函数getPage(这里没有显示代码)。 但是,一旦在几千个查询中,我收到以下错误: Error: getaddrinfo ENOTFOUND 247sports.com 247sports.com:80 at errnoException (dns.js:26:10) at GetAddrInfoReqWrap.onlookup [as oncomplete] (dns.js:77:26) 即使我知道我通过它的url是有效的。 我发现有人使用http模块的解决scheme,并得到相同的错误,但似乎没有人使用请求模块得到这个。 我知道我的IP没有被阻止,因为我可以在错误之后立即访问网站。 我也知道我的用户代理不是问题,因为我旋转了用户代理列表,所有这些都是有效的。 我的猜测是问题在于请求库与节点http模块交互的地方。 不幸的是,我无法准确地重现问题,因为当我同时或连续推送大量请求时,它似乎只是被触发。 下面的函数代码是我的函数的样子: function getPage(){ var options = { url: "http://stackoverflow.com/", headers: { 'User-agent': 'Mozilla/5.0 (X11; Linux x86_64; rv:2.0.1) Gecko/20110506 Firefox/4.0.1' }; request(options, function(err, resp, body) { if (err){ throw err; return; } PagesScraped++; […]

节点的X射线爬行到多个数据的另一个网站

我想要废除网站到JSON,因为我需要从网站的数据,我下面的教程: https : //github.com/matthewmueller/x-ray但只是返回1数据,我想返回像这样的数据: { "category": "Fashion", "data": [ { "merchant-name": "Centro", "imageurl": "http://img.nodejscore.com/javascript/1aa0dd2a47c06f4e30d8bc304d9ad535.jpg", "promo-title": "BNI Shop & Win dengan Kartu Kredit BNI di Centro Dept Store, Parkson Dept Store dan Parkson Gourmetmart", "valid-until": "valid until 30 November 2017" }, { "merchant-name": "Centro", "imageurl": "http://img.nodejscore.com/javascript/1aa0dd2a47c06f4e30d8bc304d9ad535.jpg", "promo-title": "BNI Shop & Win dengan Kartu Kredit BNI di […]

我如何做一个JavaScript的recursion刮板?

所以我为了学习目的而做一个小刮刀,最后我应该在网站上看到一个树状的页面结构。 我一直在b my我的头,试图正确地得到要求。 这或多或less是我所拥有的: var request = require('request'); function scanPage(url) { // request the page at given url: request.get(url, function(err, res, body) { var pageObject = {}; /* [… Jquery mumbo-jumbo to 1. Fill the page object with information and 2. Get the links on that page and store them into arrayOfLinks */ var arrayOfLinks […]