js 爬虫抓取网页数据(目标网络爬虫的是做什么的?手动写一个简单)

优采云 发布时间: 2022-03-04 11:19

  js 爬虫抓取网页数据(目标网络爬虫的是做什么的?手动写一个简单)

  目标

  网络爬虫有什么作用?手动编写一个简单的网络爬虫;

  1. 网络爬虫1.1. 名称

  网络爬虫(也称为网络蜘蛛或网络机器人)是一种程序或脚本,它根据一定的规则自动爬取万维网上的信息。其他不太常用的名称是 ant、autoindex、emulator 或 worm。

  1.2. 简要说明

  网络爬虫通过自己的链接地址寻找网页,从网站的一个页面(通常是首页)开始,读取网页的内容,找到网页中的其他链接地址,然后寻找下一页通过这些链接地址。一个网页,以此类推,直到这个网站的所有网页都被爬取完毕。如果把整个互联网看成一个网站,那么网络蜘蛛就可以利用这个原理爬取互联网上的所有网页。因此,为了抓取网络上的数据,不仅是爬虫程序,还有一个服务器,它可以接受“爬虫”发送的数据,并对其进行处理和过滤。爬虫爬取的数据量越大,对服务器的性能要求就越高。.

  2. 进程

  网络爬虫有什么作用?它的主要工作是根据指定的url地址发送请求,得到响应,然后解析响应。新的URL路径,然后继续访问,继续解析;继续寻找需要的数据,继续解析出新的URL路径。这是网络爬虫的主要工作。以下是流程图:

  

  通过上面的流程图,可以大致了解网络爬虫是做什么的,基于这些,就可以设计一个简单的网络爬虫了。

  简单爬虫所需:

  发送请求和获取响应的功能;解析响应的功能;存储过滤数据的功能;处理解析后的URL路径的功能;

  2.1. 专注

  爬虫需要注意的三点:

  爬取目标的描述或定义;网页或数据的分析和过滤;URL 的搜索策略

  3. 分类

  根据系统结构和实现技术,网络爬虫大致可以分为以下几种:

  通用网络爬虫 聚焦网络爬虫 增量网络爬虫 深度网络爬虫。实际的网络爬虫系统通常是通过结合几种爬虫技术来实现的。

  4. 思想分析

  接下来,我将通过我们的官网来和大家一起分析一下如何实现这样的爬虫:

  

  首先观察我们爬虫的起始页是:

  分析页面

  

  所有好消息 URL 都由 XPath 表达式表示://div[@class='main_l']/ul/li

  

  相关数据

  标题:由 XPath 表达式表示 //div[@class='content']/h4/a/text() 描述:由 XPath 表达式表示 //div[@class='content']/p/text() 图像:使用 XPath 表达式来表示 //a/img/@src

  好了,我们在上面的代码中找到了需要获取的关键信息的XPath表达式,接下来就可以正式写代码实现了

  5. 代码实现

  代码实现部分使用了webmagic框架,因为它比使用基础Java网络编程要简单很多注:webmagic框架可以看下面的讲义

  5.1. 代码结构

  

  5.2. 程序入口

  演示.java

  /**

* 程序入口

*/

public class Demo {

public static void main(String[] args) {

// 爬取开始

Spider

// 爬取过程

.create(new WanhoPageProcessor())

// 爬取结果保存

.addPipeline(new WanhoPipeline())

// 爬取的第一个页面

.addUrl("http://www.wanho.net/a/jyxb/")

// 启用的线程数

.thread(5).run();

}

}

  5.3. 爬取过程

  WanhoPageProcessor.java

<p>package net.wanho.wanhosite;

import java.util.ArrayList;

import java.util.List;

import java.util.Vector;

import us.codecraft.webmagic.Page;

import us.codecraft.webmagic.Site;

import us.codecraft.webmagic.processor.PageProcessor;

import us.codecraft.webmagic.selector.Html;

public class WanhoPageProcessor implements PageProcessor {

// 部分一:抓取网站的相关配置,包括编码、抓取间隔、重试次数等

private Site site = Site

.me()

.setTimeOut(10000)

.setRetryTimes(3)

.setSleepTime(1000)

.setCharset("UTF-8");

// 獲得站點

@Override

public Site getSite() {

return site;

}

//爬取過程

@Override

public void process(Page page) {

//获取当前页的所有喜报

List list = page.getHtml().xpath("//div[@class=&#39;main_l&#39;]/ul/li").all();

//要保存喜报的集合

Vector voLst = new Vector();

//遍历喜报

String title;

String content;

String img;

for (String item : list) {

Html tmp = Html.create(item);

//标题

title = tmp.xpath("//div[@class=&#39;content&#39;]/h4/a/text()").toString();

//内容

content = tmp.xpath("//div[@class=&#39;content&#39;]/p/text()").toString();

//图片路径

img = tmp.xpath("//a/img/@src").toString();

//加入集合

ArticleVo vo = new ArticleVo(title, content, img);

voLst.add(vo);

}

//保存数据至page中,后续进行持久化

page.putField("e_list", voLst);

//加载其它页

page.addTargetRequests( getOtherUrls());

}

//其它页

public List getOtherUrls(){

List urlLsts = new ArrayList();

for(int i=2;i

0 个评论

要回复文章请先登录注册


官方客服QQ群

微信人工客服

QQ人工客服


线