基于Webmagic的Java爬虫(二)爬取当前页内容
基于Webmagic的Java爬虫(二)
一、目标:
获取(电影天堂)电影详情页链接,再获取电影名字和下载地址,并在控制台输出。
二、步骤:
- 爬取(电影天堂:https://mp.****.net) 首页电影详情的所有链接。
要爬取的内容: - 按 F12 查看页面的源码,写出电影详情页正则://div[@class=‘co_content4’]/ul/a[@href]
- 点击电影详情链接,观察地址栏,写出电影详情页的正则,作为判断的依据。正则为:http://www.dytt8.net/html/gndy/\w{4}/\d{8}/\d{5}.html
- 查看电影详情页网页源码,写出电影名称和电影下载链接的正则:
电影名称正则://div[@class=‘title_all’]/h1/font/text()
电影下载链接正则://a[starts-with(@href,‘ftp’)]/text()
三、代码:
package ang.one;
import us.codecraft.webmagic.Page;
import us.codecraft.webmagic.Site;
import us.codecraft.webmagic.Spider;
import us.codecraft.webmagic.processor.PageProcessor;
/**
* 爬取电影天堂电影详情页连接
* @author Ada
*
*/
public class MovieByWebMagic implements PageProcessor{
private Site site = Site.me().setRetryTimes(3).setSleepTime(1000);
public Site getSite() {
return site;
}
public void process(Page page) {
//电影详情链接movieLink的正则表达式
String movieLink="http://www.dytt8.net/html/gndy/\\w{4}/\\d{8}/\\d{5}.html";
//写相应的xpath
//电影名称
String movieNameXpath="//div[@class='title_all']/h1/font/text()";
//电影下载地址
String movieDownloadXpath="//a[starts-with(@href,'ftp')]/text()";
//电影网主界面要爬的数据所在的地址链接
String movieLinkXpath="//div[@class='co_content4']/ul/a[@href]";
//判断是否符合电影详情链接 movieNameXpath 的格式
if(!page.getUrl().regex(movieLink).match()) {
page.addTargetRequests(
page.getHtml().xpath(movieLinkXpath).links().all()
);
}
//get()与toString()方法功能相同
page.putField("电影名称", page.getHtml().xpath(movieNameXpath).get());
page.putField("电影链接", page.getHtml().xpath(movieDownloadXpath).toString());
//跳过空页
if (page.getResultItems().get("电影名称")==null){
//skip this page
page.setSkip(true);
}
}
public static void main(String[] args) {
Spider.create(new MovieByWebMagic()).addUrl("http://www.dytt8.net/")
.run();
}
}
四、运行结果: