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

优采云 发布时间: 2021-12-31 19:14

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

  目标

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

  1. 网络爬虫

  1.1. 姓名

  1.2. 简介

  2.流程

  

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

  一个简单的爬虫。必要的功能:

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

  2.1. 兴趣点

  3. 分类

  4. 创意分析

  

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

  

  所有喜讯信息的URL用XPath表达式表示://div[@class='main_l']/ul/li

  

  相关数据

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

  5.代码实现

  代码实现部分使用了webmagic框架,因为比使用基本的Java网络编程要简单得多。注意:对于 webmagic 框架,您可以阅读以下讲义

  5.1.代码结构

  

  5.2.程序入口

  Demo.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.爬取过程

  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='main_l']/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='content']/h4/a/text()").toString();

//内容

content = tmp.xpath("//div[@class='content']/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网络选项),然后找到那些加载数据的json请求,最后直接请求那些URL获取数据来模拟浏览器请求,等待一个从满载开始的一定时间 只需从完成的页面中获取数据。这类爬虫通常需要内嵌浏览器内核,如:webmagic、phantom.js、HttpUnit等

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

  

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

  

  

  从上图可以看出,我们可以从首页的HTML源代码中直观的找到我们需要的标题、内容、图片链接等信息。那么我们可以通过什么方式提取这些目标数据呢?

  其实提取页面元素的webmagic框架主要支持以下三种方法:

  XPath 正则表达式 CSS 选择器

  当然,选择哪种方式提取数据需要根据具体页面进行分析。在这个例子中,很明显使用XPath提取数据是最方便的

  所以,那我直接给出我们需要爬取的数据的XPath路径:

  注:“//”表示从相对路径开始,第一个“/”表示从页面路径开始;两个/后面的内容代表一个元素,括号内的内容表示该元素的执行属性,如:h1[@class='entry-title']表示:有一个h1元素,其class属性为“条目标题”

  6.2.3. 页面数据提取:

  使用webmagic提取页面数据时,需要自定义一个类来实现PageProcessor接口。

  该类实现PageProcessor接口的主要功能如下三步:

  爬虫配置:爬取页面的配置,包括编码、爬取间隔、重试次数等页面元素的提取:使用正则表达式或者XPath提取页面元素。新链接的发现:从一个页面找到的链接到其他待抓取的目标页面

<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='main_l']/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='content']/h4/a/text()").toString();

//内容

content = tmp.xpath("//div[@class='content']/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人工客服


线