<iOS>從網(wǎng)頁撈取所有圖片網(wǎng)址

前言

最近專案開發(fā)上遇到需要抓取HTML內(nèi)文的圖片痰滋,在最近剛好有些時間就把之前寫的Source整理一下並開放到Github上面,下面會介紹一下這個這個功能的操作並為大家一步一步的解析琅豆。

介紹

一般在用WebView開啟網(wǎng)頁的內(nèi)容通常有兩種方法:

1.直接用url開啟網(wǎng)頁

NSURL *websiteUrl=[NSURL URLWithString:@"http://www.google.com"];
NSURLRequest *urlRequest=[NSURLRequestre questWithURL:websiteUrl];
[myWebView loadRequest:urlRequest];

2.開啟HTML內(nèi)文

NSString*htmlFile=[[NSBundlemainBundle]pathForResource:@"html"ofType:@"html"];
NSString*htmlString=[NSStringstringWithContentsOfFile:htmlFile encoding:NSUTF8StringEncoding error:nil];
[webView loadHTMLString:htmlString baseURL:nil];

這篇文章就是要介紹該如何把上述兩種的網(wǎng)頁內(nèi)圖片給抓出來,其實講兩種真的作法其實就是一種而已七蜘,讀取網(wǎng)址後在底層的SDK也是會轉(zhuǎn)換成HTML的內(nèi)文,所以這邊我們要先將網(wǎng)址轉(zhuǎn)換成HTML的文字字串柄粹,在從內(nèi)文去抓取我們要的圖片網(wǎng)址。

作法

首先如果拿到的是網(wǎng)址格式如(http://www.google.com)匆绣,便要先轉(zhuǎn)成HTML

NSURL*url = [NSURLURLWithString:string];
NSError*error;
NSString*string = [NSString stringWithContentsOfURL:url encoding:NSASCIIStringEncoding error:&error]; 

這樣就可以拿到HTML的內(nèi)文了驻右,取的內(nèi)文後,網(wǎng)頁內(nèi)的格式通常為崎淳。

<html>
<body>
    <p>這是段文字</p>
    <img src= “https://pic.pimg.tw/timmyvong/1384342688-1767482568.gif" />
</body>
</hmtl>

這邊我們要將圖片從HTML內(nèi)文抓出來就需要用到陣規(guī)表示式的語法來判斷 <img /> 的Tag

NSString *pattern =@"<img.*?src=[^>]*/>";

有了這個判斷規(guī)則後堪夭,便可以開始從HTML內(nèi)文抓取有img tag的圖片網(wǎng)址

NSRegularExpression *regex = [NSRegularExpression regularExpressionWithPattern:pattern options:NSRegularExpressionAllowCommentsAndWhitespace error:nil];
NSArray *result = [regex matchesInString:_htmlString options:NSMatchingReportCompletion range:NSMakeRange(0, _htmlString.length)];

取到result之後印出Log來看發(fā)現(xiàn)並不是我們要的圖片網(wǎng)址,但確實有根據(jù)我們剛剛所指定的規(guī)則搜尋到資料拣凹。

"<NSSimpleRegularExpressionCheckingResult : 0x7f93107647e0>{21885, 131}{<NSRegularExpression: 0x7f9310765c40> <img.*?src=[^>]*/> 0x2}"

因此我們還需要做些事情來取得我們所需要的圖片網(wǎng)址

@autoreleasepool {
        for (NSTextCheckingResult *item in result) {
            NSString *imgHtml = [_htmlString substringWithRange:[item rangeAtIndex:0]];
            NSArray *tmpArray = nil;
            if ([imgHtml rangeOfString:@"src=\""].location != NSNotFound) {
                tmpArray = [imgHtml componentsSeparatedByString:@"src=\""];
            } else if ([imgHtml rangeOfString:@"src="].location != NSNotFound) {
                tmpArray = [imgHtml componentsSeparatedByString:@"src="];
            }
            
            if (tmpArray.count >= 2) {
                NSString *src = tmpArray[1];
                NSUInteger loc = [src rangeOfString:@"\""].location;
                if (loc != NSNotFound) {
                    src = [src substringToIndex:loc];
                    NSString *newSrc = nil;
                    if (![src hasPrefix:@"http"]) {
                        newSrc = [NSString stringWithFormat:@"https:%@",src];
                        NSRange range = [newSrc rangeOfString:@"?v="];
                        if (range.length > 0) {
                            NSMutableString *new = [NSMutableString stringWithString:newSrc];
                            [new deleteCharactersInRange:NSMakeRange((unsigned long)range.location, src.length - (unsigned long)range.location)];
                            src = new;
                        }
                    }else {
                        NSRange range = [src rangeOfString:@"?v="];
                        if (range.length > 0) {
                            NSMutableString *new = [NSMutableString stringWithString:src];
                            [new deleteCharactersInRange:NSMakeRange((unsigned long)range.location, src.length - (unsigned long)range.location)];
                            src = new;
                        }
                    }
                    NSLog(@"%@",src);
                }
            }
        }
    }

這樣印出來的Log就會是我們想要的圖片網(wǎng)址森爽。

這邊附上我範(fàn)例上的Demo:

https://github.com/chueh/SWebViewImageDownload

也封裝好了,如有需要的可以直接去pod下載嚣镜,使用方法:

在podfile內(nèi)新增
pod "SWebViewImageDownload"爬迟,接著pod install
使用:
給定一個網(wǎng)址
NSString *url = @"[http://xxxx.com](http://xxxx.com/)";
初始化SWebViewImageDownload,並給stringType(StringTypeWithURL為一般網(wǎng)址菊匿、StringTypeWithHTML為HTML Body內(nèi)文)
SWebViewImageDownload *webImageDownload = [[SWebViewImageDownload alloc] initWithHTMLString:url stringType:StringTypeWithURL];

這是Demo的圖片

Simulator Screen Shot 2016年6月1日 下午12.03.06.png
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末雕旨,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子捧请,更是在濱河造成了極大的恐慌凡涩,老刑警劉巖,帶你破解...
    沈念sama閱讀 223,126評論 6 520
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件疹蛉,死亡現(xiàn)場離奇詭異活箕,居然都是意外死亡,警方通過查閱死者的電腦和手機可款,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 95,421評論 3 400
  • 文/潘曉璐 我一進店門育韩,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人闺鲸,你說我怎么就攤上這事筋讨。” “怎么了摸恍?”我有些...
    開封第一講書人閱讀 169,941評論 0 366
  • 文/不壞的土叔 我叫張陵悉罕,是天一觀的道長。 經(jīng)常有香客問我立镶,道長壁袄,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 60,294評論 1 300
  • 正文 為了忘掉前任媚媒,我火速辦了婚禮嗜逻,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘缭召。我一直安慰自己栈顷,他們只是感情好逆日,可當(dāng)我...
    茶點故事閱讀 69,295評論 6 398
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著萄凤,像睡著了一般室抽。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上蛙卤,一...
    開封第一講書人閱讀 52,874評論 1 314
  • 那天狠半,我揣著相機與錄音噩死,去河邊找鬼颤难。 笑死,一個胖子當(dāng)著我的面吹牛已维,可吹牛的內(nèi)容都是我干的行嗤。 我是一名探鬼主播,決...
    沈念sama閱讀 41,285評論 3 424
  • 文/蒼蘭香墨 我猛地睜開眼垛耳,長吁一口氣:“原來是場噩夢啊……” “哼栅屏!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起堂鲜,我...
    開封第一講書人閱讀 40,249評論 0 277
  • 序言:老撾萬榮一對情侶失蹤栈雳,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后缔莲,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體哥纫,經(jīng)...
    沈念sama閱讀 46,760評論 1 321
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 38,840評論 3 343
  • 正文 我和宋清朗相戀三年痴奏,在試婚紗的時候發(fā)現(xiàn)自己被綠了蛀骇。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 40,973評論 1 354
  • 序言:一個原本活蹦亂跳的男人離奇死亡读拆,死狀恐怖擅憔,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情檐晕,我是刑警寧澤暑诸,帶...
    沈念sama閱讀 36,631評論 5 351
  • 正文 年R本政府宣布,位于F島的核電站辟灰,受9級特大地震影響屠列,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜伞矩,卻給世界環(huán)境...
    茶點故事閱讀 42,315評論 3 336
  • 文/蒙蒙 一笛洛、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧乃坤,春花似錦苛让、人聲如沸沟蔑。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,797評論 0 25
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽瘦材。三九已至,卻和暖如春仿畸,著一層夾襖步出監(jiān)牢的瞬間食棕,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 33,926評論 1 275
  • 我被黑心中介騙來泰國打工错沽, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留簿晓,地道東北人。 一個月前我還...
    沈念sama閱讀 49,431評論 3 379
  • 正文 我出身青樓千埃,卻偏偏與公主長得像憔儿,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子放可,可洞房花燭夜當(dāng)晚...
    茶點故事閱讀 45,982評論 2 361

推薦閱讀更多精彩內(nèi)容