這段時間趁閑魚時間,看到一段關于JAVA爬蟲某知名網(wǎng)站的代碼囚巴;試了試ios利用webview 及 AFNETWORKING網(wǎng)絡請求 ;仿java思路 完成了一個成功的dome柄瑰;
閑話不多說:
? ? 大致流程:
? ? ? ? ?1务嫡、利用火狐、Google chrome瀏覽器 查看控制臺 ?抓取 其網(wǎng)絡請求(get钥星、post)獲取其請求頭沾瓦、請求體;
? ? ? ? ?2谦炒、利用webview獲取cookies (https請求需要自己配置info.list)
? ? ? ? ?3贯莺、參考其請求模式,模擬請求 獲取HTML響應體宁改;
? ? ? ? ?4缕探、解析請求體、展示給用戶还蹲; ? ? //獲取有效信息?
? ? ? ? ?5爹耗、 保存數(shù)據(jù)提交自己的服務器;
1谜喊、利用火狐潭兽、Google chrome瀏覽器 查看控制臺? 抓取 其網(wǎng)絡請求(get、post)獲取其請求頭斗遏、請求體山卦;
2、利用webview獲取cookies
3、參考其請求模式铸本,模擬請求 獲取HTML響應體
這個是關鍵券膀,需要模擬請求
遇到post的其實可以用ios原生post請求 獲取 根據(jù)瀏覽器獲取的請求方式進行:
NSURLSession*session = [NSURLSession sharedSession];
// 設置請求路徑
NSURL*URL=[NSURL URLWithString:@"https://www.baidu.com"];//不需要傳遞參數(shù)
// 創(chuàng)建請求對象
NSMutableURLRequest*request=[NSMutableURLRequest requestWithURL:URL];//默認為get請求
request.timeoutInterval=5.0;//設置請求超時為5秒
request.HTTPMethod=@"POST";//設置請求方法
// 設置請求體
NSString*param=[NSString stringWithFormat:@"reportformat=21&tradeCode=%@",uesr_name];
//把拼接后的字符串轉換為data淮摔,設置請求體
[requestsetValue:@"max-age=0"forHTTPHeaderField:@"Cache-Control"];
[requestsetValue:cookies forHTTPHeaderField:@"Cookie"];
[requestsetValue:@"https://www.baidu.com"forHTTPHeaderField:@"Origin"];
request.HTTPBody=[paramdataUsingEncoding:NSUTF8StringEncoding];
// 發(fā)送請求
NSURLSessionDataTask*dataTask = [session dataTaskWithRequest:request completionHandler:^(NSData*_Nullabledata,NSURLResponse*_Nullableresponse,NSError*_Nullableerror) {
// 解析數(shù)據(jù)data流過來的html編碼轉換成NSString
NSStringEncodingenc =CFStringConvertEncodingToNSStringEncoding(kCFStringEncodingGB_18030_2000);//可以在流量器上獲取解碼的類型
NSString* str =[[NSStringalloc]initWithData:dataencoding:enc];
// 反饋給服務器
NSLog(@"=====>>>>>%@",str);
//[data writeToFile:@"/Users/lufeng1/Desktop/c.html" atomically:YES];//可以測試看看獲取的數(shù)據(jù)正確與否
}];
// 執(zhí)行任務
[dataTask resume];
4屋摔、解析請求體硕勿、展示給用戶
解析這里的responseObject即可 給的例子是用GB翻譯的 可以用保存的方式 存儲為HTML查看?
給個福利吧鄙早,查看HTML有些時候獲取不全body 可以試試這句話-----
//NSString * str= [webView stringByEvaluatingJavaScriptFromString:@"document.body.innerHTML"];
5汪茧、 保存數(shù)據(jù)提交自己的服務器
自己post回去有用信息即可
文章寫的比較粗糙吧,過程之中可能會遇到HTTPS請求報錯 那就需要配置相對應的HTTPS.cer文件放入工程:
~openssl s_client -connect www.baidu.com:443 /dev/null | openssl x509 -outform DER > https.cer
可把www.baidu.com替換直接獲取證書限番。