当前位置: 首页 > news >正文

西安有关做网站的公司有哪些wordpress 批量替换

西安有关做网站的公司有哪些,wordpress 批量替换,手表网站 二手,代写稿子的平台文章目录 前言一、WebMagic二、使用步骤1. 搭建 Maven 项目2. 引入依赖 三、入门案例四、核心对象组件1. 核心对象SipderRequestSitePageResultItemsHtml#xff08;Selectable#xff09; 2. 四大组件DownloaderPageProcessorSchedulerPipeline 上篇#xff1a;Java-网… 文章目录 前言一、WebMagic二、使用步骤1. 搭建 Maven 项目2. 引入依赖 三、入门案例四、核心对象组件1. 核心对象SipderRequestSitePageResultItemsHtmlSelectable 2. 四大组件DownloaderPageProcessorSchedulerPipeline 上篇Java-网络爬虫(一) 下篇Java-网络爬虫(三) 前言 之前有介绍过传统实现爬虫的技术 HttpClient 和 Jsoup并提供了一些案例但是作为企业级的应用还是远远不够的竟然如此就需要一些更深入的技术 WebMagic。 一、WebMagic 官网https://webmagic.io/ WebMagic 是一款基于 Java 的开源网络爬虫框架底层是 HttpClient 和 Jsoup它提供了简单、灵活、强大的爬取功能可以用于抓取网页数据、图片、文件等。WebMagic 的设计参考了 Scapy 但是实现方式更 Java 化一些。 该框架分为核心和扩展两个部分核心部分是一个精简、模块化的爬虫实现而扩展部分则包括一些便利的、实用性的功能。 核心部分webmagic core提供非常简单、灵活的 API在基本不改变开发模式的情况下编写一个爬虫扩展部分webmagic extension提供一些便捷的功能例如注解模式编写爬虫等同时内置了一些常用的组件便于开发 优点 多语言支持提供了 Python 和 Scala 等语言的版本能够适应不同开发者的需求任务调度能够与 Quartz 等任务调度框架结合使用实现定时爬取数据的功能多线程支持能够利用多核 CPU 提高爬虫效率功能强大支持 Cookie、代理等功能能够模拟登录、避免反爬等操作数据存储支持多种格式的数据存储如 MySQL、Redis、Elasticsearch 等方便后续数据处理常处理能够处理一些异常情况如页面 404、解析错误等提高爬虫的健壮性易于学习和使用WebMagic 的核心非常简单但是覆盖了爬虫的整个流程也是很好的学习爬虫开发的材料。它提供简单灵活的 API只需少量代码即可实现一个爬虫模块化和可扩展性采用完全模块化的设计功能覆盖整个爬虫的生命周期链接提取、页面下载、内容抽取、持久化支持多线程抓取分布式抓取并支持自动重试、自定义UA/cookie 等功能支持爬取动态渲染的页面支持爬取 js 动态渲染的页面无框架依赖无框架依赖可以灵活地嵌入到项目中 架构介绍 WebMagic 的结构分为 Downloader、PageProcessor、Scheduler、Pipeline 四大组件这四大组件对应爬虫生命周期中的下载、处理、管理和持久化等功能。 Downloader Downloader 负责从互联网上下载页面以便后续处理WebMagic 默认使用了 Apache HttpClient 作为下载工具 PageProcessor PageProcessor 负责解析页面抽取有用信息以及发现新的链接。WebMagic 使用 Jsoup 作为 HTML 解析工具并基于其开发了解析 XPath 的工具 Xsoup Scheduler Scheduler 负责管理待抓取的 URL以及一些去重的工作。WebMagic 默认提供了 JDK 的内存队列来管理 URL并用集合来进行去重。也支持使用 Redis 进行分布式管理 Pipeline Pipeline 负责抽取结果的处理包括计算、持久化到文件、数据库等。WebMagic 默认提供了 “输出到控制台” 和 “保存到文件” 两种结果处理方案 用于数据流转的对象 Request Request 是对 URL 地址的一层封装一个 Request 对应一个 URL 地址它是 PageProcessor 于 Downloader 交互的载体也是 PageProcessor 控制 Downloader 的唯一方式。除了 URL 本身它还包含一个 Key-Value 结构的字段 extra可以在 extra 中保存一些特殊的属性然后在其它地方读取以完成不同的功能 Page Page 代表了从 Downloader 下载到的一个页面 — 可能是 HTML也可能是 JSON 或者其它文本格式的内容。Page 是 WebMagic 抽取过程的核心对象它提供了一些方法可供抽取、结果保存等 ResultItems ResultItems 相当于一个 Map它保存 PageProcessor 处理的结果供 Pipeline 使用它的 API 与 Map 很类似值得注意的是它有一个字段 skip若设置为 true 则不应被 Pipeline 处理 而 Spider 则将这几个组件组织起来让它们可以互相交互流程化的执行可以认为 Spider 是一个大的容器它也是 WebMagic 逻辑的核心。 工作原理 从架构图中可以得知 ① 一个 http请求其实 http 请求之后也会转换为 Request进入到 Downloader 之后会进行页面下载输出 Page② Page 经过 PageProcessor 之后开始解析页面会有两种输出类型Request 和 ResultItems对应两种情况 情况一输出的是 Request ③ 根据解析的逻辑如果发现需要进一步爬取的 url 地址则产生一些新的 Request 进入 Scheduler 等待进一步抓取④ Downloader 会从 Scheduler 拉取待处理的 Request⑤ 执行 ① 情况二输出的是 ResultItems ③ 需要抽取的数据会封装到 ResultItems 中再流转至 Pipeline④ Pipeline 对抽取的结果进行处理 二、使用步骤 1. 搭建 Maven 项目 如果有一个 Maven 工程的项目可跳过 打开 IDEA 工具点击 File - New - Project... 创建一个项目 选择 Maven 设置项目保存地址点击 Finish 创建完成 不过使用 WebMagic 一般会将爬取到的结果数据持久到数据中所以这里建议是搭建 SpringBoot 或者 SpringCloud 项目但是搭建这些项目不是本文的重点如果想要搭建简单的 SpringBoot 项目可参见 SpringBoot - 快速搭建 2. 引入依赖 WebMagic 分为两个部分核心和扩展可在 Maven 仓库 中查询这这两个依赖 !-- webMagic -- dependencygroupIdus.codecraft/groupIdartifactIdwebmagic-core/artifactIdversion0.10.0/version /dependency dependencygroupIdus.codecraft/groupIdartifactIdwebmagic-extension/artifactIdversion0.10.0/version /dependency三、入门案例 还是使用 WebMagic 爬取一个网站为例作为入门在上篇博客中我们爬取了 https://www.rgbku.com/chaxun.htmlrgb颜色查询器 这个网站的表格信息现在我们使用 WebMagic 获取底部链接的信息 html 源码 查看 html 源码可知只需要获取到div 为类 .zh - div - span - a然后再拿到 a 标签的 href 属性内容即可 代码编写 import org.jsoup.nodes.Document; import org.jsoup.nodes.Element; import org.jsoup.select.Elements; import us.codecraft.webmagic.Page; import us.codecraft.webmagic.Site; import us.codecraft.webmagic.Spider; import us.codecraft.webmagic.processor.PageProcessor; import us.codecraft.webmagic.selector.Html;import java.util.ArrayList; import java.util.List;public class TestProcessorDemo implements PageProcessor {Overridepublic void process(Page page) {// 通过 page 获取 Html 对象Html html page.getHtml();// 通过 Html 可以获取到 DocumentDocument document html.getDocument();// 有了 Document 就能够通过 Jsoup 的一些操作进行解析比如说获取 a 标签元素Elements aElements document.select(div.zh div span a);// 创建 List 集合用于存放 a 标签的超链接信息ListString links new ArrayList();for (Element aElement : aElements) {// 获取 a 标签中的链接String href aElement.attr(href);// 添加到集合中links.add(href);}System.err.println(links links);/** 不过一般也不会用 Jsoup 的方式来解析 Html* WebMagic 有一些解析器可以较为方便的拿到这些元素比如使用 css 解析器*/ListString href html.css(div.zh div span a, href).all();// 在将结果封装到 ResultItems默认设置下会打印在控制台上page.putField(href, href);}Overridepublic Site getSite() {return PageProcessor.super.getSite();}public static void main(String[] args) {Spider.create(new TestProcessorDemo())// 设置起始的 URL.addUrl(https://www.rgbku.com/chaxun.html)// 在当前线程中执行爬虫//.run();// 在新线程中执行爬虫.start();} }运行结果如下 可以看到是能够成功获取得到想要的数据。 如果查看过 WebMagic 的核心包中的源码可以发现其实有几个现成的 demo 案例 四、核心对象组件 在上述案例中有使用过 PageProcessor、Page、Site、ResultItems、Spider 等对象以下内容我会结合源码对这些对象和组件的一些概要说明 1. 核心对象 Sipder 可以认为 Spider 是一个大的容器它也是 WebMagic 逻辑的核心。它的作用是将各个组件组织起来使它们能够相互协作形成一个完整的爬虫系统。它负责管理和调度各个组件的运行以确保整个爬虫过程的顺利进行。 获取 Spider 对象的方法有两个要么通过构造方法 new 出来要么使用静态方法 create(PageProcessor pageProcessor) 创建出来 public class Spider implements Runnable, Task {...public static Spider create(PageProcessor pageProcessor) {return new Spider(pageProcessor);}public Spider(PageProcessor pageProcessor) {this.newUrlCondition this.newUrlLock.newCondition();this.pageCount new AtomicLong(0L);this.emptySleepTime 30000L;this.pageProcessor pageProcessor;this.site pageProcessor.getSite();}...}例如上述入门案例中就是使用 create 的方式 Spider spider Spider.create(new TestProcessorDemo());从源码上也可以看到 Spider 中包含了 webMaigc 的四大组件的影子 所以才说它是一个大的容器同时 Spider 中有各个组件的配置以及线程相关的方法是 webMagic 的核心 相关 API 方法说明static Spider create(PageProcessor pageProcessor)创建 SpiderSpider addUrl(String… urls)添加初始 URLSpider thread(int threadNum)开启 n 个线程void run()启动会阻塞当前线程执行void start()异步启动当前线程继续执行void runAsync()异步启动当前线程继续执行void stop()停止爬虫Spider addPipeline(Pipeline pipeline)添加一个 PipelineSpider setPipelines(List pipelines)添加多个 PipelineSpider setScheduler(Scheduler scheduler)设置 SchedulerSpider setDownloader(Downloader downloader)设置 DownloaderT get(String url)同步调用并直接获取结果List getAll(Collection urls)同步调用并直接取得一堆结果 Request Request 是对 URL 地址的一层封装一个 Request 对象对应一个 URL 地址。 从源码上可以看到 Request 对象中包含了发送一个 http 请求的所有要素包括 url 地址、请求类型、请求参数、cookie 和 header 等等还包含一个 Key-Value 结构的字段 extra 。可以在 extra 中保存一些特殊的属性然后在其他地方读取以完成不同的功能。 之前说 http 在进入到下载组件 Download 是便会转化成 Request 对象可以通过入门案例中的代码 spider.addUrl(https://www.rgbku.com/chaxun.html)进入到 addUrl(String... urls) 方法中看到 public class Spider implements Runnable, Task {...public Spider addUrl(String... urls) {String[] var2 urls;int var3 urls.length;for(int var4 0; var4 var3; var4) {String url var2[var4];// 将 url 转化成 Request 对象加载到调度器 Scheduler 中 this.addRequest(new Request(url));}this.signalNewUrl();return this;}...}Site Site 对象用于配置站点本身的一些配置信息例如编码、HTTP 头、超时时间、重试策略等、代理等。其中待解析的域名存放在 domain 这个属性中 通过设置 Site 对象可以对爬虫的行为进行详细配置以满足不同的需求。具体来说Site 对象可以设置以下配置信息 编码用于指定站点的字符编码方式以确保爬虫能够正确解析页面内容HTTP头用于设置请求头信息以模拟浏览器行为增加爬虫的隐蔽性超时时间用于设置爬虫请求的超时时间以避免因网络延迟等原因导致请求等待过长时间重试策略用于设置爬虫在遇到请求失败时是否进行重试以及重试的次数和间隔等代理用于设置代理服务器地址和端口等信息以便通过代理访问目标站点 Site 对象提供的配置方法如下 方法说明setCharset(String charset)设置字符编码方式以确保爬虫能够正确解析页面内容setUserAgent(String userAgent)设置用户代理用于标识发送请求的客户端应用或设备更好的模拟游览器发送请求Site setDomain(String domain)设置域名需要设置域名后addCookie() 才会生效setSleepTime(int sleepTime)设置爬虫在抓取下一个页面之前等待的时间以避免过于频繁的请求导致被目标站点封禁setTimeOut(int timeOut)设置爬虫请求的超时时间以避免因网络延迟等原因导致请求等待过长时间setRetrySleepTime(int retrySleepTime)设置爬虫在遇到请求失败时的重试间隔时间setRetryTimes(int retryTimes)设置爬虫在遇到请求失败时的重试次数addHeader(String key, String value)添加请求头信息以模拟浏览器行为增加爬虫的隐蔽性addCookie(String key, String value)添加 Cookie 信息以模拟浏览器会话信息增加爬虫的隐蔽性 通过合理配置 Site 对象的参数可以优化爬虫的性能提高爬虫的效率和成功率增加爬虫的隐蔽性。 之前提到过 domian 存放的是待解析域名从入门案例中的 addUrl(String... urls) - addRequest(Request request) 可以看到这条逻辑当然不止这一处 public class Spider implements Runnable, Task {...private void addRequest(Request request) {if (this.site.getDomain() null request ! null request.getUrl() ! null) {// 将清洗过的 url 存放到 Site 的 domain 属性中this.site.setDomain(UrlUtils.getDomain(request.getUrl()));}this.scheduler.push(request, this);}...}在 上篇Java-网络爬虫(一) 博客中有通过 HttpClient 的 execute(HttpUriRequest var1) 方法来发送请求HttpGet、HttpPost...均实现了 HttpUriRequest // 创建 httpClient 对象CloseableHttpClient httpClient HttpClients.createDefault();// 创建 httpGet 对象设置访问 URLHttpGet httpGet new HttpGet(https://www.rgbku.com/chaxun.html);// 发送请求response httpClient.execute(httpGet);在 webMagic 中底层也是使用 HttpClient 来发送请求的不够首先要通过 Site 和 Request 获取到 HttpUriRequest 和 HttpContext 对象进而就可以执行HttpClient 的 execute(HttpUriRequest var1, HttpContext var2) 方法发送请求获取响应信息了 Page Page 对象是用于处理和封装从目标网站下载得到的 HTML 页面内容的一种对象 该对象最重要的两个作用就是获取 Html 对象而 Html 对象是解析网页十分重要的对象其次是该 Page 对象能够能够将封装好的 ResultItems 对象传送给存储器 Pipeline 做持久化处理 常用方法 方法说明getHtml()获取当前页面的 Html对象String getRawText()获取当前页面的文本内容putField(String key, Object field)以 key-value 的形式封装信息到 ResultItems 中addTargetRequests(Iterable requests)用于添加目标请求的方法 ResultItems ResultItems 是一个 Map 对象用于保存 PageProcessor 处理的结果供Pipeline使用。它的 API 与 Map 类似可以保存各种类型的数据包括字符串、列表、字典等 ResultItems 的主要作用是作为 PageProcessor 和 Pipeline 之间的数据传输媒介。当 PageProcessor 处理完一个页面后可以将处理结果保存到 ResultItems 中然后由 Pipeline 进行处理。这样可以方便地实现数据的提取、清洗、过滤等操作并将结果持久化到文件、数据库等地方 ResultItems 还提供了一些额外的方法来控制结果的输出和处理。例如可以通过 setSkip(true) 方法来跳过当前的结果不进行后续的处理和输出。此外ResultItems 还提供了 getExtra() 方法用于获取一些自定义的数据和属性 总的来说WebMagic 中的 ResultItems 是一个重要的组件它充当了 PageProcessor 和 Pipeline 之间的桥梁使得数据的处理和输出更加灵活和方便。 HtmlSelectable 通过入门案例中使用 page.getHtml() 能够获取到一个 Html 对象解析相关的操作都与该对象有关而这个对象实现了 Selectable 在 WebMagic 中Selectable 是一个重要的接口它定义了一系列链式 API 调用方式 抽取元素的四种方式 Selectable 里主要支持了四种抽取技术XPath、正则表达式和 CSS 选择器。另外对于 JSON 格式的内容可使用 JsonPath 进行解析。 方式一XPath 选择器 XPath 的教程可参考https://www.w3cschool.cn/xpath/ 例如入门案例中获取a标签中的链接的代码可改写为 ListString href html.xpath(//div[classzh]/div/span/a/href).all();方式二regex正则表达式选择器 正则表达式-基础教程https://blog.csdn.net/xhmico/article/details/126729869 正则表达式是一种通用的文本抽取语言一般会用这种方式获取 url 地址等 例如入门案例中获取a标签中的链接的代码可改写为 page.putField(links, page.getHtml().regex([a-zA-z]://[^\\s][^\ ]*).all());CSS 选择器 入门案例中使用的就是这种方式获取元素CSS 选择器是与 XPath 类似的语言但相对于 XPath 而言简单一点只要对 css 语法熟悉写起来应该是比较简单的。比方说入门案例a标签中的链接的代码还可以改成 ListString href html.css(.zh a, href).all();JsonPath 选择器 JsonPath 是于 XPath 很类似的一个语言它用于从 Json 中快速定位一条内容 关于它的使用可参考JsonPath完全介绍及详细使用教程 API Selectable 提供了一系列链式 API 调用方式支持多种选择器包括 xpath、css、regex和 jsonPath 等。用户可以使用这些选择器方便地获取所需元素的信息同时还提供了诸如获取链接等便利方法。简单来说就是根据特定的方法抽取 html 页面的信息。使用 Selectable 接口可以直接完成页面元素的链式抽取也无需去关心抽取的细节。 public interface Selectable {Selectable xpath(String var1);Selectable $(String var1);Selectable $(String var1, String var2);Selectable css(String var1);Selectable css(String var1, String var2);Selectable smartContent();Selectable links();Selectable regex(String var1);Selectable regex(String var1, int var2);Selectable replace(String var1, String var2);String toString();String get();boolean match();ListString all();Selectable jsonPath(String var1);Selectable select(Selector var1);Selectable selectList(Selector var1);ListSelectable nodes(); }以下是 Selectable 常用 API 的介绍 方法说明示例Selectable xpath(String var1)使用 XPath 选择器html.xpath(“//div[class‘title’]”)Selectable regex(String var1)使用正则表达式抽取html.regex(“(.*?)”)Selectable regex(String var1, int var2)使用正则表达式抽取并指定捕获组html.regex(“(.*?)”,1)Selectable $(String var1)使用 Css 选择器选择html.$(“div.title”)Selectable $(String var1, String var2)使用 Css 选择器选择html.$(“div.title”,“text”)Selectable css(String var1)功能同$()使用 Css 选择器选择html.css(“div.title”)Selectable css(String var1, String var2)功能同$()使用Css选择器选择html.css(“div.title”,“text”)Selectable jsonPath(String var1)使用 JsonPath 选择器选择html.jsonPath(“$.*”)Selectable links()获取所有链接如果链接为相对地址会自动拼接html.links()Selectable replace(String regex, String replacement)替换内容html.replace(“”,“”)String get()返回一条String类型的结果String link html.links().get()String toString()功能同 get()返回一条 String 类型的结果String link html.links().toString()List all()返回所有抽取结果List links html.links().all()boolean match()是否有匹配结果boolean result html.links().match() Html 除了 Selectable 这些常用的 API 外还有如下几个方法用得也比较多 方法说明Document getDocument()获取 Document 对象static Html create(String text)通过文本获取 Html 对象 从这些 API 中可以看出那些抽取元素的方法返回的都是 Selectable 对象也就是说抽取是支持链式调用的 例如入门案例中获取a标签中的链接的代码可改写为 ListString href html// css 选择类为 zh 的标签.css(.zh)// 获取其下所有的链接.links() // 使用这种方式获取链接如果链接是相对地址的形式会自动进行拼接.all();输出 2. 四大组件 Downloader 前面就有提到过 Downloader 的作用就是负责从互联网上下载页面 Downloader 的输入是 Request 输出是 Pag可见 Downloader.java 源码 public interface Downloader {Page download(Request var1, Task var2);void setThread(int var1); }默认情况下 Spider 配置的 Downloader 为 HttpClientDownloader可以从 initComponent() 方法中得出 查看 HttpClientDownloader.java 源码中的 download() 方法 public class HttpClientDownloader extends AbstractDownloader {...public Page download(Request request, Task task) {if (task ! null task.getSite() ! null) {CloseableHttpResponse httpResponse null;// 获取 HttpClient 对象CloseableHttpClient httpClient this.getHttpClient(task.getSite());Proxy proxy this.proxyProvider ! null ? this.proxyProvider.getProxy(request, task) : null;// 通过 Request 和 Site 得到 HttpUriRequest、HttpContextHttpClientRequestContext requestContext this.httpUriRequestConverter.convert(request, task.getSite(), proxy);Page page Page.fail(request);Page var9;try {// 发起请求httpResponse httpClient.execute(requestContext.getHttpUriRequest(), requestContext.getHttpClientContext());// 解析响应体并封装成 Page 返回page this.handleResponse(request, request.getCharset() ! null ? request.getCharset() : task.getSite().getCharset(), httpResponse, task);this.onSuccess(page, task);this.logger.info(downloading page success {}, request.getUrl());Page var8 page;return var8;} catch (IOException var13) {this.onError(page, task, var13);this.logger.info(download page {} error, request.getUrl(), var13);var9 page;} finally {if (httpResponse ! null) {EntityUtils.consumeQuietly(httpResponse.getEntity());}if (this.proxyProvider ! null proxy ! null) {this.proxyProvider.returnProxy(proxy, page, task);}}return var9;} else {throw new NullPointerException(task or site can not be null);}}... }如果希望下载页面时进行一些其它的操作可以自定义 Downloader要么实现 Downloader 接口要么继承实现了 Downloader 接口的子类比如HttpClientDownloader 如果想要自定义的 Downloader 生效就需要在 spider.setDownloader() 方法中进行设置比如 Spider.create(new TestProcessorDemo())// 设置起始的 URL.addUrl(https://www.rgbku.com/chaxun.html)// 设置自定义 Downloader.setDownloader(new MyDownload())// 在当前线程中执行爬虫.run();// 在新线程中执行爬虫//.start();PageProcessor PageProcessor 的作用就是负责解析页面的 它的输入是 Page 对象process() 方法中实现页面解析的逻辑PageProcessor.java 源码如下 public interface PageProcessor {void process(Page var1);default Site getSite() {return Site.me();} }而页面的解析是开发者根据需求去编写也就是说要开发者去实现webMaic 也没办法提供默认的 PageProcessor, 所以使用 webMaigc 编写爬虫的时候都需要去实现 PageProcessor 接口或者继承实现了 PageProcessor 接口的类比如SimplePageProcessor。而解析的结果最好是封装到 ResultItems 中交给 Pipeline 进行处理Page 对象中可以通过 putField(String key, Object field) 方法直接将对象封装到 ResultItems 中 public class Page {...public void putField(String key, Object field) {this.resultItems.put(key, field);}... }Scheduler Scheduler 负责管理待抓取的 URL Scheduler.java 源码 public interface Scheduler {void push(Request var1, Task var2);Request poll(Task var1); }Scheduler 默认是 QueueScheduler可查看 Spider.java 的源码得出 而 QueueScheduler 的底层就如同它的类名一样是个队列 之前说过 Downloader 下载页面时需要 Request 对象而这些 Request 对象都是从 Scheduler 中拉取而来的包括起始的 url 也是会先放到 Scheduler可以从入门案例中的 spider.addUrl() 方法去追溯源码证实 也可以从进入入门案例 sipder.run() 方法中看到传入 Downloader 的 Request 是从 Scheduler 中获取的 同时 Scheduler 也可以自定义只需要实现 Scheduler 接口或者继承其实现类比如QueueScheduler 即可然后通过 spider.setScheduler() 方法去设置例如 Spider.create(new TestProcessorDemo())// 设置起始的 URL.addUrl(https://www.rgbku.com/chaxun.html)// 设置自定义 Scheduler.setScheduler(new MyScheduler())// 在当前线程中执行爬虫.run();// 在新线程中执行爬虫//.start();Pipeline Pipeline 负责抽取结果的处理包括计算、持久化到文件、数据库等 Pipeline.java 源码 public interface Pipeline {void process(ResultItems var1, Task var2); }默认情况下webMaigc 的使用的 Pipeline 是 ConsolePipeline可查看 Spider.initComponent() 的方法源码得知 ConsolePipeline 的处理就是将封存在 ResultItems 里的内容打印到控制台上 ConsolePipeline.java 源码 public class ConsolePipeline implements Pipeline {public ConsolePipeline() {}public void process(ResultItems resultItems, Task task) {System.out.println(get page: resultItems.getRequest().getUrl());Iterator var3 resultItems.getAll().entrySet().iterator();while(var3.hasNext()) {EntryString, Object entry (Entry)var3.next();System.out.println((String)entry.getKey() :\t entry.getValue());}} }Spider 中可以配置多个 Pipeline 通常情况下开发者会自定义 Pipeline将爬取的数据存放在数据库中自定义的方式就是实现 Pipeline 接口重写 process() 方法通过 spider.setPipelines() 来设置例如 ListPipeline pipelines new ArrayList();// 添加输出到控制台的 PipelineConsolePipelinepipelines.add(new ConsolePipeline());// 添加保存到文本的 PipelineFilePipelinepipelines.add(new FilePipeline());// 添加自定义自定义 Pipelinepipelines.add(new MyPipeline());Spider.create(new TestProcessorDemo())// 设置起始的 URL.addUrl(https://www.rgbku.com/chaxun.html)// 设置 Pipeline.setPipelines(pipelines)// 在当前线程中执行爬虫.run();// 在新线程中执行爬虫//.start();上篇Java-网络爬虫(一) 下篇Java-网络爬虫(三) 参考博客 WebMagichttps://blog.csdn.net/weixin_40055163/article/details/123541437 JsonPath完全介绍及详细使用教程https://blog.csdn.net/software_test010/article/details/125427926
http://www.dnsts.com.cn/news/81248.html

相关文章:

  • 网站推广网站制作网站建设公司个人微网站怎么做
  • 58网站怎么做品牌推广厦门 外贸网站
  • 空包网站怎么建设下载软件的网站
  • 邯郸做网站推广多少钱房产系统平台
  • 免费网站推广工具有哪些企业管理培训视频免费
  • 北京网站建设方案品牌公司网站打模块
  • 网络设计网站南通网站维护
  • 重庆多语网站建设品牌企业自己使用原生php做网站性能
  • 天津网站开发网站南宁网站改版
  • 关于网站建设的大学做微信平台网站
  • 网站中文名注册网页设计与开发第四版答案
  • 公司网站页面设计图片wordpress侧边栏插件
  • vue.js网站开发用例湖北企业建站系统平台
  • 精品网站建设哪家公司服务好phpwind 做的网站
  • 做网单哪个网站最好用设计非常好的网站
  • 彩票网站开发需要多少钱网站优化主要怎么做
  • 企业网站公众号mvc 网站开发
  • 朝阳区北京网站建设wordpress后台轮播图设置
  • 静态网站需要数据库吗马大云湘潭
  • 网站建设2000字论文企业形象设计教案
  • 网站建设网站的好处网站建设项目成本估算表
  • 做受免费网站搜索引擎营销的名词解释
  • 电子商务网站建设与规划教案wordpress禁止前台登录
  • 南平高速建设有限公司网站济南品牌网站制作便宜
  • flash网站开源品牌vi
  • CMS源码就可以做网站吗营销型网站建设的目的
  • 国外很炫酷的网站网络工程专业学什么
  • 建设个商城网站需要多少钱关键词筛选
  • 程序可以做网站吗织梦房产网站源码
  • 游戏开发网站开发返利网站建设哪个公司好