热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

iOS开发——WKWebView的学习、爬取

文章目录1.前言2.全部代码3.WKWebView3.1引库3.2网页简单加载4.WKNavigationDelegate4.1方法4.2本文主要用的4.2.1分析1.前言当时不

在这里插入图片描述


文章目录

  • 1. 前言
  • 2. 全部代码
  • 3. WKWebView
    • 3.1 引库
    • 3.2 网页简单加载
  • 4. WKNavigationDelegate
    • 4.1 方法
    • 4.2 本文主要用的
      • 4.2.1 分析


1. 前言

当时不知道怎么想的,想实现把一个网页数据拿下来然后自己组装到app的tableview里面,后来想法废弃了,但是这个东西学了部分,做个记录吧,所以有了这个文章,同时,后续还会补充一下WKWebView的学习。
截止发文:目标网址的结构没有变化,我会把我现在爬取的网页结构一起放在demo里面,供分析用。要不然结构变了,demo就没用了。


2. 全部代码

demo:点击下载
在这里插入图片描述


3. WKWebView


3.1 引库

#import
@property (nonatomic, strong) WKWebView *webView;

3.2 网页简单加载

就拿微博说事吧

self.webView= [[WKWebView alloc] initWithFrame:self.view.frame];
self.webView.navigationDelegate = self;
[self.view addSubview:self.webView];
[self.webView loadRequest:[NSURLRequest requestWithURL:[NSURL URLWithString:@"https://weibo.com/"]]];

4. WKNavigationDelegate


4.1 方法

&#64;protocol WKNavigationDelegate <NSObject>//请求之前&#xff0c;决定是否要跳转:用户点击网页上的链接&#xff0c;需要打开新页面时&#xff0c;将先调用这个方法。
- (void)webView:(WKWebView *)webView decidePolicyForNavigationAction:(WKNavigationAction *)navigationAction decisionHandler:(void (^)(WKNavigationActionPolicy))decisionHandler;//接收到相应数据后&#xff0c;决定是否跳转
- (void)webView:(WKWebView *)webView decidePolicyForNavigationResponse:(WKNavigationResponse *)navigationResponse decisionHandler:(void (^)(WKNavigationResponsePolicy))decisionHandler;//页面开始加载时调用
- (void)webView:(WKWebView *)webView didStartProvisionalNavigation:(null_unspecified WKNavigation *)navigation;// 主机地址被重定向时调用
- (void)webView:(WKWebView *)webView didReceiveServerRedirectForProvisionalNavigation:(null_unspecified WKNavigation *)navigation;// 页面加载失败时调用
- (void)webView:(WKWebView *)webView didFailProvisionalNavigation:(null_unspecified WKNavigation *)navigation withError:(NSError *)error;// 当内容开始返回时调用
- (void)webView:(WKWebView *)webView didCommitNavigation:(null_unspecified WKNavigation *)navigation;// 页面加载完毕时调用
- (void)webView:(WKWebView *)webView didFinishNavigation:(null_unspecified WKNavigation *)navigation;//跳转失败时调用
- (void)webView:(WKWebView *)webView didFailNavigation:(null_unspecified WKNavigation *)navigation withError:(NSError *)error;// 如果需要证书验证&#xff0c;与使用AFN进行HTTPS证书验证是一样的
- (void)webView:(WKWebView *)webView didReceiveAuthenticationChallenge:(NSURLAuthenticationChallenge *)challenge completionHandler:(void (^)(NSURLSessionAuthChallengeDisposition disposition, NSURLCredential * _Nullable credential))completionHandler;//9.0才能使用&#xff0c;web内容处理中断时会触发
- (void)webViewWebContentProcessDidTerminate:(WKWebView *)webView API_AVAILABLE(macosx(10.11), ios(9.0));
&#64;end

4.2 本文主要用的

- (void)webView:(WKWebView *)webView didFinishNavigation:(null_unspecified WKNavigation *)navigation {[self.webView evaluateJavascript:&#64;"document.body.innerHTML" completionHandler:^(id _Nullable result, NSError * _Nullable error) {NSLog(&#64;"网页抓取结果:%&#64;", result);[self writeToFileWithTxt:result];}];NSString *titleSrcString &#61; [NSString stringWithFormat:&#64;"document.getElementsByClassName(&#39;weibo-text&#39;)[0].getElementsByTagName(&#39;a&#39;)[0].href"];[self.webView evaluateJavascript:titleSrcString completionHandler:^(id _Nullable result, NSError * _Nullable error) {// 超话链接NSLog(&#64;"标题链接抓取结果:%&#64;", result);}];NSString *titleString &#61; [NSString stringWithFormat:&#64;"document.getElementsByClassName(&#39;weibo-text&#39;)[0].textContent"];[self.webView evaluateJavascript:titleString completionHandler:^(id _Nullable result, NSError * _Nullable error) {// 标题NSLog(&#64;"标题抓取结果:%&#64;", result);}];NSString *imageSrcString &#61; [NSString stringWithFormat:&#64;"document.getElementsByClassName(&#39;m-img-box&#39;)[0].getElementsByTagName(&#39;img&#39;)[0].src"];[self.webView evaluateJavascript:imageSrcString completionHandler:^(id _Nullable result, NSError * _Nullable error) {// 取一个头像地址NSLog(&#64;"头像抓取结果:%&#64;", result);}];NSString *authorString &#61; [NSString stringWithFormat:&#64;"document.getElementsByClassName(&#39;m-text-cut&#39;)[0].textContent"];[self.webView evaluateJavascript:authorString completionHandler:^(id _Nullable result, NSError * _Nullable error) {// 自媒体名称NSLog(&#64;"自媒体名称抓取结果:%&#64;", result);}];}

4.2.1 分析

脚本中要根据当前字段的class与tpye等相关内容去获取&#xff0c;可以结合demo里面的网页结构来分析。


推荐阅读
  • 开机自启动的几种方式
    0x01快速自启动目录快速启动目录自启动方式源于Windows中的一个目录,这个目录一般叫启动或者Startup。位于该目录下的PE文件会在开机后进行自启动 ... [详细]
  • IOS Run loop详解
    为什么80%的码农都做不了架构师?转自http:blog.csdn.netztp800201articledetails9240913感谢作者分享Objecti ... [详细]
  • 在JavaWeb开发中,文件上传是一个常见的需求。无论是通过表单还是其他方式上传文件,都必须使用POST请求。前端部分通常采用HTML表单来实现文件选择和提交功能。后端则利用Apache Commons FileUpload库来处理上传的文件,该库提供了强大的文件解析和存储能力,能够高效地处理各种文件类型。此外,为了提高系统的安全性和稳定性,还需要对上传文件的大小、格式等进行严格的校验和限制。 ... [详细]
  • DVWA学习笔记系列:深入理解CSRF攻击机制
    DVWA学习笔记系列:深入理解CSRF攻击机制 ... [详细]
  • VB.net 进程通信中FindWindow、FindWindowEX、SendMessage函数的理解
    目录一、代码背景二、主要工具三、函数解析1、FindWindow:2、FindWindowEx:3、SendMessage: ... [详细]
  • 本文将带你快速了解 SpringMVC 框架的基本使用方法,通过实现一个简单的 Controller 并在浏览器中访问,展示 SpringMVC 的强大与简便。 ... [详细]
  • 用阿里云的免费 SSL 证书让网站从 HTTP 换成 HTTPS
    HTTP协议是不加密传输数据的,也就是用户跟你的网站之间传递数据有可能在途中被截获,破解传递的真实内容,所以使用不加密的HTTP的网站是不 ... [详细]
  • 网站访问全流程解析
    本文详细介绍了从用户在浏览器中输入一个域名(如www.yy.com)到页面完全展示的整个过程,包括DNS解析、TCP连接、请求响应等多个步骤。 ... [详细]
  • 在多线程并发环境中,普通变量的操作往往是线程不安全的。本文通过一个简单的例子,展示了如何使用 AtomicInteger 类及其核心的 CAS 无锁算法来保证线程安全。 ... [详细]
  • 微信公众号推送模板40036问题
    返回码错误码描述说明40001invalidcredential不合法的调用凭证40002invalidgrant_type不合法的grant_type40003invalidop ... [详细]
  • 如何在Java中使用DButils类
    这期内容当中小编将会给大家带来有关如何在Java中使用DButils类,文章内容丰富且以专业的角度为大家分析和叙述,阅读完这篇文章希望大家可以有所收获。D ... [详细]
  • 本文介绍了如何利用HTTP隧道技术在受限网络环境中绕过IDS和防火墙等安全设备,实现RDP端口的暴力破解攻击。文章详细描述了部署过程、攻击实施及流量分析,旨在提升网络安全意识。 ... [详细]
  • 秒建一个后台管理系统?用这5个开源免费的Java项目就够了
    秒建一个后台管理系统?用这5个开源免费的Java项目就够了 ... [详细]
  • 深入解析Struts、Spring与Hibernate三大框架的面试要点与技巧 ... [详细]
  • .NET Core 托管服务优化与实践
    在.NET Core应用中,托管服务的形式主要分为进程内托管(InProcess)和进程外托管(OutOfProcess)。这两种托管方式各有优缺点,本文将深入探讨它们的特点,并结合实际案例,介绍如何根据具体需求选择合适的托管模式,以实现性能优化和资源利用的最大化。此外,文章还将分享一些实用的配置技巧和最佳实践,帮助开发者提升应用的稳定性和可维护性。 ... [详细]
author-avatar
mengziwudao
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有