WebMagic(二)-------简单使用

一:实现功能

获取(电影天堂)电影详情页链接,再获取电影名字以及下载地址,在控制台输出

二:思路

1、爬取(电影天堂)首页电影详情页所有链接,如图所示 

 链接:http://www.dytt8.net/

WebMagic(二)-------简单使用

2、查看抓取内容网页源码------看适合用那种方法抽取结果

WebMagic(二)-------简单使用

3、将第二步抽取的链接加入请求队列中-----进行二次请求

4、获取电影的名字和下载地址-----如下图所示

WebMagic(二)-------简单使用

5WebMagic(二)-------简单使用

三:代码实现

前面步骤还是如上次写的WebMagic(一):https://blog.****.net/qq_39769369/article/details/82878034

代码:

/**
 * 1、爬取(电影天堂)电影详情页链接
 * 2、再发起请求,爬取电影名字以及下载地址
 * 3、输出到控制台
 * @author zhl
 *
 */
public class InfoByWebMagic3 implements PageProcessor {
	/**
	 * 为防止该页面请请求失败 
	 * setRetryTimes(3)设置该页面请求次数 
	 * setSleepTime(3000)设置请求次数间隔时间
	 */
	private Site site = Site.me().setRetryTimes(3).setSleepTime(1000);
	/**
	 * Site就是要分析那个页面 一般是拿当前页面
	 */
	@Override
	public Site getSite() {
		return site;
	}

	/**
	 * 内容分析逻辑
	 * 工具:1、正则表达式
	 * 	   2、cssStyle
	 *     3、Jsoup
	 *     4、Xpath
	 */
	@Override
	public void process(Page page) {
		//电影详情链接movieLink的正则表达式
		String movieLinkReg="/html/gndy/\\w{4}/\\d{8}/\\d{5}.html";
		Pattern movieLinkPattern=Pattern.compile(movieLinkReg);
		//写相应的xpath
		String movieNameXpath="//title/text()";
		String movieDownloadXpath="//a[starts-with(@href,'ftp')]/text()";
		String movieLinkXpath="//div[@class='co_content2']/ul/a[@href]";
		List<String> movieLinkList=new ArrayList<String>();
		//结果抽取
		Selectable moviePage;
		Selectable movieNameS;
		Selectable movieDownloadS;
		if("http://www.dytt8.net".equals(page.getUrl().toString())){
			//抽取结果
			moviePage=page.getHtml().xpath(movieLinkXpath);
			//选中结果
			movieLinkList=moviePage.all();
			//循环遍历
			String movieLink="";
			Matcher movieLinkMatcher;
			for(int i=1;i<10;i++){
				//第一条过滤,从第二条开始遍历
				movieLinkList.get(i);
				//正则匹配
				movieLinkMatcher=movieLinkPattern.matcher(movieLink);
				if(movieLinkMatcher.find()){//匹配子串
					movieLink=movieLinkMatcher.group();//返回匹配到的字串
					//将找到的链接放到ddTargetRequest里面,会自动发起请求
					page.addTargetRequest(movieLink);
					//输出到控制台
					System.out.println(movieLink);
				}
			}
		}else{//第二次请求,电影详情页面
			//获取html
			movieNameS=page.getHtml().xpath(movieNameXpath);
			movieDownloadS=page.getHtml().xpath(movieDownloadXpath);
			page.putField("movieName",page.getHtml().xpath("//title/text()").toString());
			page.putField("downloadURL", page.getHtml().xpath("//a[starts-with(@href,'ftp')]/text()").toString());
			
		}
		movieLinkList.clear();
	}

	/**            
	 * 1、网络请求 
	 * 2、内容分析及抽取
	 * @param args
	 */
	public static void main(String[] args) {
		//爬取的路径URL---1个线程去执行
		Spider.create(new InfoByWebMagic()).addUrl("http://www.dytt8.net").thread(1).run();
		 //或者--也是输出到控制台
		//Spider.create(new InfoByWebMagic()).addUrl("http://www.dytt8.net").addPipeline(new ConsolePipeline()).run();                                       
	}
}

运行结果:

WebMagic(二)-------简单使用