java爬虫抓取动态网页(目标网络爬虫的是做什么的?手动写一个简单的)
优采云 发布时间: 2021-09-21 23:15java爬虫抓取动态网页(目标网络爬虫的是做什么的?手动写一个简单的)
目标网络爬虫做什么?手动编写一个简单的网络爬虫1.webcrawler1.1.name1.2.short description@2.process
通过上面的流程图,我们可以大致了解网络爬虫的功能,并根据这些功能设计一个简单的网络爬虫
简单爬虫程序所需的功能:
发送请求和获取响应的功能;解析响应的功能;存储过滤后的数据的功能;处理解析后的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.爬行过程
<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