求教批量抓取网页上面的图片

黎_10553 2019-10-14 1135

http://mangago.pro/sweetheart-v5-the-boss-is-too-kind/chapter-93

比如批量抓取这个页面上面同一话漫画的所有图片,保存到一个目录里面去,按图片先后顺序用数字文件名保存.


一开始火车头,一直获取到图片链接都很好,但是下载不了,因为做了防盗链.

然后用uibot的使用浏览器下载文件的命令来下载,成功,因为有浏览器打开这个过程,破了防盗链.


现在问题是,怎么直接把打开网页之后,图片批量另存,或者是批量获取到这些图片的链接也可以,然后循环使用浏览器的下载文件命令就可以了.


在这里我碰到的问题是:

1,如果使用数据抓取功能,那只能抓取文字和链接,所以,选了图片的话,会提示数据元生成错误.

2,如果我使用的是获取当前网页源代码,然后再用运行js代码来分析所有图片地址,再下载的话.命令中填入的js代码过不了检查,应该是正规表达式跟软件的js代码容器有兼容问题,我不会处理.


js代码如下:

function getimgsrc(htmlstr) { 
  var reg = /<img.+?src=('|")?([^'"]+)('|")?(?:\s+|>)/gim; 
  var arr = []; 
  while (tem = reg.exec(htmlstr)) { 
    arr.push(tem[2]); 
  } 
  return arr; 
}


提示:第二行,第29个字符' ' ?"无法识别的内容,这样.


恳请各位大佬指教.

最新回复 (8)
  • 2
    你可以直接获取源码,来用正则表达式来匹配数据就好了。不用去执行js来匹配啊
  • 黎_10553 2019-10-14
    3
    那个js代码我也是去百度一下抄来的,.....我自己不怎么会写正则,就是那个js我用浏览器运行过,的确是可以,能达到目标.
  • 黎_10553 2019-10-14
    4
    有不去头疼正规式的办法吗......很头疼正规表达式啊....
  • 黎_10553 2019-10-14
    5
    直接把js代码里面的正则表达式填进去,也报一样的错误,第18个字符,' ' ?"无法识别的内容,
  • 瞌睡蟲子 2019-10-14
    6


    dim hWeb = ""
    dim sRet = ""
    dim js = '''
    function() {
       var re = [];
       document.querySelectorAll("img").forEach(function(item){re.push(item.src);});
       return re;
    }
    '''

    hWeb = WebBrowser.BindBrowser("chrome",10000,{"bContinueOnError":false,"iDelayAfter":300,"iDelayBefore":200})
    sRet = WebBrowser.RunJS(hWeb,js,true,{"bContinueOnError":false,"iDelayAfter":300,"iDelayBefore":200})
    TracePrint(sRet)


  • 黎_10553 2019-10-14
    7
    谢谢各位了,不过这个js代码也报错:uibot37cedd85ba1d08.task 第22行:模块调用出错:调用的目标发生了异常。 TypeError: 对象不支持“forEach”属性或方法 
    我先用分割字符串去搞了,今天先搞定这个东西再说,回头再来研究这个uibot的正则表达式跟js代码的具体调用支持了.
  • 瞌睡蟲子 2019-10-14
    8
    黎_10553 谢谢各位了,不过这个js代码也报错:uibot37cedd85ba1d08.task 第22行:模块调用出错:调用的目标发生了异常。 TypeError: 对象不支持“forEach”属性或方法 ...
    你chrome是哪个版本
  • 黎_10553 2019-10-15
    9
    我改为用ie浏览器的,之前做过很多工作发现uibot对ie浏览器的兼容性什么的最好,不过就是运行有点慢,但是稳定.我已经用侵害字符串的笨方法实现了.需要源码或者方法的人也可以问我,这两天翻看了一下帖子,发现很多人有问到抓取图片以及批量抓取图片的问题.
返回
发新帖