Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/471.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 使用google chrome中的inspect元素功能刮取网站_Javascript_Python_Google Chrome_Web Scraping_Screen Scraping - Fatal编程技术网

Javascript 使用google chrome中的inspect元素功能刮取网站

Javascript 使用google chrome中的inspect元素功能刮取网站,javascript,python,google-chrome,web-scraping,screen-scraping,Javascript,Python,Google Chrome,Web Scraping,Screen Scraping,我正试图搜刮一个网站。通过Python中的“urllib2.urlopen”或R中的“htmlTreeParse”进行的传统HTML解析无法从网页中获取数据。这是由服务器故意完成的,这样view source就不会显示显示的数据,但当我使用google chrome中的inspect元素功能(通过右键单击google chrome中的网站)时,我就能够看到数据(项目列表及其信息)。我的问题是如何以编程方式启动所需的页面并为每个页面保存inspect元素。或者,如果我有一个程序可以启动这些链接并以

我正试图搜刮一个网站。通过Python中的“urllib2.urlopen”或R中的“htmlTreeParse”进行的传统HTML解析无法从网页中获取数据。这是由服务器故意完成的,这样view source就不会显示显示的数据,但当我使用google chrome中的inspect元素功能(通过右键单击google chrome中的网站)时,我就能够看到数据(项目列表及其信息)。我的问题是如何以编程方式启动所需的页面并为每个页面保存inspect元素。或者,如果我有一个程序可以启动这些链接并以某种方式使用Control-S

将每个链接的html副本保存到本地磁盘。

我将签出以自动执行浏览器功能。您可以按id/名称自动搜索,然后检查它是否存在,或者以自动方式通过html进行解析。

您可以使用greasemonkey或tampermonkey轻松完成此操作。 您只需在userscript中定义url,然后导航到要调用的页面。 您可以使用包含iframe的顶部页面,该iframe可导航到计划中的每个页面。 当页面显示在iframe中时,userscript将运行并保存数据

脚本是基本的javascript,没有什么特别的,如果你需要初学者,请告诉我。 最大的问题是下载文件,这是JS的一个相当新的功能,但使用下载库很简单(无耻)

因此,基本上,您可以有一个包含url列表的textarea,每行一个,抓取一行并调用userscript将iframe的.src设置为url。您可以使用CSS查询选择器深入页面,或者保存整个页面,只需获取所需代码的标记的.outerHTML。如果需要的话,我很乐意举例说明,但一旦你让它工作起来,你就再也不会回到服务器抓取了

编辑:

一个framing dispatcher页面,用于简单地将每个所需页面加载到iframe中,从而触发用户脚本:

<html>
<iframe id=frame1></iframe>
<script>
var base="http://www.yelp.ca/search?cflt=coffee&find_loc=Toronto,%20ON&start="; //the part of the url that stays the same
var pages=[20, 40, 60, 80];  //all the differing url parts to be concat'd at the end
var delay= 1000 * 30; //30 sec delay, adjust if needed
var slot=0; //current shown page's index in pages

function doNext(){
  var page=pages[slot++];
  if(!page){ page=pages[slot=0]; }
  frame1.src=base+page;
}

setInterval(doNext, delay);
</script>
</html>
请注意,它将html另存为.txt,以避免chrome警告可能有害的文件。 您可以批量重命名它们,或者尝试创建新的扩展并将其与浏览器关联


编辑:忘记提及在chrome中关闭文件保存确认以供无人参与使用:设置\显示高级设置…\n下载前询问每个文件的保存位置(取消选中)

您试图解析的页面可能格式不正确,因此urllib2无法处理,但chrome可以。您可能能够用其他包解析它;请参阅,和。这不是格式错误,他们故意这样做,以便当您查看源代码时,它没有数据。感谢您的评论,这可能有助于启动链接,但我需要它将这些页面保存到磁盘(Ctr-S)或以某种方式使用chrome的inspect element功能访问数据。我不认为这是我刚刚添加的tampermonkey,这是伟大的,但我感谢一些帮助,因为我是一个新手。我不知道该怎么做,我有一个类似“”的链接列表,其中开始将是40,60,80,…,如何使用tampermonkey启动和下载这些链接?通过将这些链接保存到磁盘或保存每个链接的检查元素,我的电子邮件是ghofham@gmail以防时间太长。感谢这么多在这些链接上使用view source的成员将不会显示显示的数据,这就是为什么我必须将其保存到磁盘或使用inspect元素的原因。我测试了代码显示,它将列表保存为真正的HTML。你是个天才,非常感谢。
// ==UserScript==
// @name       yelp scraper
// @namespace  http://anon.org
// @version    0.1
// @description  grab listing from yelp
// @match     http://www.yelp.ca/search?cflt=coffee&find_loc=Toronto,%20ON&start=*
// @copyright  2013, dandavis
// ==/UserScript==


function Q(a,b){var t="querySelectorAll";b=b||document.documentElement;if(!b[t]){return}if(b.split){b=Q(b)[0]}return [].slice.call(b[t](a))||[]}

function download(strData,strFileName,strMimeType){var D=document,A=arguments,a=D.createElement("a"),d=A[0],n=A[1],t=A[2]||"text/plain";a.href="data:"+strMimeType+","+escape(strData);if('download'in a){a.setAttribute("download",n);a.innerHTML="downloading...";D.body.appendChild(a);setTimeout(function(){var e=D.createEvent("MouseEvents");e.initMouseEvent("click",true,false,window,0,0,0,0,0,false,false,false,false,0,null);a.dispatchEvent(e);D.body.removeChild(a);},66);return true;};var f=D.createElement("iframe");D.body.appendChild(f);f.src="data:"+(A[2]?A[2]:"application/octet-stream")+(window.btoa?";base64":"")+","+(window.btoa?window.btoa:escape)(strData);setTimeout(function(){D.body.removeChild(f);},333);return true;}

window.addEventListener("load", function(){
  var code=Q("#businessresults")[0].outerHTML;
  download(code, "yelp_page_"+location.href.split("start=")[1].split("&")[0]+".txt", "x-application/nothing");
});