摘要

网上有很多个人站来分享电影资源,其实有时候我们自己也想做这个一个电影站来分享资源。但是这个时候就有一个问题,电影的资源应该从哪里来呢?难道要自己一条条手动去从网络上获取,这样无疑是缓慢而又效率低下的。这个时候我们可以用自己掌握的知识去写一个小小爬虫程序,在网络上爬去电影资源。

爬去对象---电影天堂

首先打开电影天堂的链接,从下面的图片可以看出电影天堂的电影资源都是已列表页--详情页的方式展示得,这样是非常易于爬去的。那么我这次就以电影天堂导航栏中的最新资源为例。点开最新资源,是列表也展示的,每页25条资源。列表页的访问链接是:http://www.ygdy8.net/html/gndy/dyzz/list_23_PAGE.html (其中PAGE是分页参数)

列表页:

详情页:
 

其中PAGE是分页参数,通过更改分页参数可以达到获取每一页中对应电影的详情页访问链接。再获取完详情页的链接后,再次通过访问详情页的方法,获取对应电影的下载链接和电影名字。

那么梳理一下整个的爬去过程如下:

1.找到电影天堂最新资源的列表页访问链接

2.循环更改电影列表访问链接的分页参数.

3.分析列表页页面排版规则,获取电影详情页的URL

5.访问获取的每一个详情页的的URL.分析页面.获取电影名称和电影下载链接

6.将获取的信息存入到存储介质中.

通过以上6步即可完成电影的爬去!!!

废话不多说,直接上代码!!!

爬取代码

添加需要依赖的jar:

<dependency>
<groupId>org.jsoup</groupId>
<artifactId>jsoup</artifactId>
<version>1.7.2</version>
</dependency>
CommonMethod.java 该方法类是用于获取页面的元素以及将信息写入文件中
package com.penglei.util;

import com.penglei.vo.MovieVo;

import java.io.*;
import java.net.URL;
import java.net.URLConnection;
import java.util.Iterator;
import java.util.List; /**
* 公用的方法
* Created by penglei on 2017/2/13.
*/
public class CommonMethod {
/**
* 获取页面元素
* @param url
* @return
* @throws IOException
*/
public static String getHtmlPage(String url) throws IOException {
String line;
URL oul = new URL(url);
//建立连接
URLConnection conn = oul.openConnection();
//获得数据
BufferedReader bufferedReader = new BufferedReader(new InputStreamReader(conn.getInputStream(), "gbk"));
StringBuilder htmlpage = new StringBuilder();
while ((line = bufferedReader.readLine()) != null) {
htmlpage.append(line);
}
//返回页面(String类型的页面数据)
return htmlpage.toString();
} /**
* 将List中的信息写入txt
* @param file
* @param urlList
*/
public static void insertUrlToFile(String file, List<MovieVo> urlList) throws IOException {
//下面是写文件
boolean flag = false;
FileWriter fw = null;
BufferedWriter bw = null;
try {
fw = new FileWriter(file, true);
bw = new BufferedWriter(fw, 100);
Iterator<MovieVo> iter=urlList.iterator();
while(iter.hasNext()) {
bw.write(iter.next().getTitle()+"----["+iter.next().getDownloadUrl()+"]" + "\r\n");
}
flag = true;
} catch (IOException e) {
System.out.println("write error");
flag = false;
} finally {
if (bw != null) {
bw.flush();
bw.close();
}
if (fw != null)
fw.close();
}
}
}

SpiderCommon.java 该方法将被重新

package com.penglei.service;

import java.io.IOException;

/**
* Created by penglei on 2017/2/13.
*/
public class SpiderCommon { public void search(String url) throws IOException {
System.out.println("The method will be override!");
}
}

SpiderMovieList.java 获取列表页资源

package com.penglei.service;

import com.penglei.util.CommonMethod;
import org.jsoup.Jsoup;
import org.jsoup.nodes.Document;
import org.jsoup.nodes.Element;
import org.jsoup.select.Elements; import java.io.IOException;
import java.util.ArrayList;
import java.util.List; /**
*抓取电影天堂列表页的数据
* Created by penglei on 2017/2/13.
*/
public class SpiderMovieList extends SpiderCommon { private static List<String> uList =new ArrayList<String>(); @Override
public void search(String url) throws IOException {
//根据Url地址获取网页内容
String htmlPage = CommonMethod.getHtmlPage(url);
if (htmlPage != null){
//对网页内容进行分析和提取
Document docx = Jsoup.parse(htmlPage);
//获取列表页对应的table元素
Elements htmltables = docx.select("table.tbspan");
//获取a标签链接元素
Elements links = htmltables.select("a[href]");
for (Element link : links) {
String linkHref = link.attr("href");
uList.add("http://www.ygdy8.net"+linkHref);
}
}
} public List<String> getUrlList() {
return uList;
} /**
* 得到列表页的url
* @param n 一共有多少页
* @param indexurl 页面的url
* @throws IOException
*/
public static List getAllMovieUrl(int n,String indexurl) throws IOException {
Integer i=1;
SpiderMovieList spiderMovieList = new SpiderMovieList();
System.out.println("***********开始爬取列表页***********");
for (i = 1; i <= n; i++) {
String url = indexurl.replace("PAGE",i.toString());
spiderMovieList.search(url);
System.out.println("info"+"爬取第"+i+"页");
}
System.out.println("***********列表页爬取完成***********");
List<String> resultList=spiderMovieList.getUrlList();
return resultList;
}
}

SpiderMovieDetail.java 获取电影详情页资源

package com.penglei.service;

/**
* Created by penglei on 2017/2/13.
*/ import com.penglei.util.CommonMethod;
import com.penglei.vo.MovieVo;
import org.jsoup.Jsoup;
import org.jsoup.nodes.Document;
import org.jsoup.nodes.Element;
import org.jsoup.select.Elements; import java.io.IOException; /**
* 抓取每个电影对应的列表页的数据,获取对应的电影名称和电影下载链接
*/
public class SpiderMovieDetail extends SpiderCommon { private MovieVo movieVo; @Override
public void search(String url) throws IOException {
movieVo = new MovieVo();
String htmlpage = CommonMethod.getHtmlPage(url);
if (htmlpage != null){
//对网页内容进行分析和提取
Document doc = Jsoup.parse(htmlpage);
//获取标题
Element link = doc.select("div.title_all").last();
if(link!=null){
String title = link.text();
//获取链接
Elements elements = doc.select("div#Zoom");
Element element = elements.select("a[href]").first();
if(element!=null){
String href = element.attr("href");
movieVo.setDownloadUrl(href);
}
//将标题加入到MovieVo对象中
movieVo.setTitle(title);
} }
}
public MovieVo getMovie() {
return movieVo;
}
}

最后就是执行的main方法了

package com.penglei;

import com.penglei.service.SpiderMovieDetail;
import com.penglei.service.SpiderMovieList;
import com.penglei.util.CommonMethod;
import com.penglei.vo.MovieVo; import java.io.IOException;
import java.util.ArrayList;
import java.util.List; /**
* Created by penglei on 2017/2/13.
*/
public class DemoRun {
/**
* PAGE是电影天堂的分页参数,所以通过循环更改PAGE来抓取某一页
*/
//最新
private static String INDEX_DYZZ="http://www.ygdy8.net/html/gndy/dyzz/list_23_PAGE.html"; public static void main(String[] args) throws IOException, InterruptedException {
List<MovieVo> movieVos=new ArrayList<MovieVo>();
SpiderMovieDetail detail=new SpiderMovieDetail();
//获取列表页中所有电影的详情页访问链接
List<String> list = SpiderMovieList.getAllMovieUrl(157, INDEX_DYZZ);
System.out.println(list.size());
for (int i = 0; i < list.size(); i++) {
//获取详情页数据
detail.search(list.get(i));
movieVos.add(detail.getMovie());
System.out.println("**********爬取详情页**********"+i+"完成");
}
System.out.println("**********开始执行插入**********");
//将获取资源写入txt
CommonMethod.insertUrlToFile("E:\\AMark\\StudyCode\\seed.txt",movieVos);
System.out.println("**********插入完成**********");
}
}

代码结构如下:

通过以上代码即可爬去到对应的电影资源!

访问最新资源共获取3923条电影资源。

对应代码资源地址是:https://github.com/whitescholars/spider.git


结语

如果你还需要了解更多技术文章信息,请继续关注白衣秀才的博客
个人网站:http://penglei.top/
Github:https://github.com/whitescholars
微博:http://weibo.com/u/3034107691?refer_flag=1001030102_&is_all=1

java批量爬去电影资源的更多相关文章

  1. java批量爬取电影资源

    摘要 网上有很多个人站来分享电影资源,其实有时候我们自己也想做这个一个电影站来分享资源.但是这个时候就有一个问题,电影的资源应该从哪里来呢?难道要自己一条条手动去从网络上获取,这样无疑是缓慢而又效率低 ...

  2. python爬去电影天堂恐怖片+游戏

    1.爬去方式python+selenium 2.工作流程 selenium自动输入,自动爬取,建立文件夹,存入磁力链接到记事本 3.贴上代码 #!/usr/bin/Python# -*- coding ...

  3. Python多线程爬虫爬取电影天堂资源

    最近花些时间学习了一下Python,并写了一个多线程的爬虫程序来获取电影天堂上资源的迅雷下载地址,代码已经上传到GitHub上了,需要的同学可以自行下载.刚开始学习python希望可以获得宝贵的意见. ...

  4. Java爬虫爬取网站电影下载链接

    之前有看过一段时间爬虫,了解了爬虫的原理,以及一些实现的方法,本项目完成于半年前,一直放在那里,现在和大家分享出来. 网络爬虫简单的原理就是把程序想象成为一个小虫子,一旦进去了一个大门,这个小虫子就像 ...

  5. Java基础-爬虫实战之爬去校花网网站内容

    Java基础-爬虫实战之爬去校花网网站内容 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. 爬虫这个实现点我压根就没有把它当做重点,也没打算做网络爬虫工程师,说起爬虫我更喜欢用Pyt ...

  6. 使用htmlparse爬虫技术爬取电影网页的全部下载链接

    昨天,我们利用webcollector爬虫技术爬取了网易云音乐17万多首歌曲,而且还包括付费的在内,如果时间允许的话,可以获取更多的音乐下来,当然,也有小伙伴留言说这样会降低国人的知识产权保护意识,诚 ...

  7. 爬虫新手学习2-爬虫进阶(urllib和urllib2 的区别、url转码、爬虫GET提交实例、批量爬取贴吧数据、fidder软件安装、有道翻译POST实例、豆瓣ajax数据获取)

    1.urllib和urllib2区别实例 urllib和urllib2都是接受URL请求相关模块,但是提供了不同的功能,两个最显著的不同如下: urllib可以接受URL,不能创建设置headers的 ...

  8. Python爬取电影天堂指定电视剧或者电影

    1.分析搜索请求 一位高人曾经说过,想爬取数据,要先分析网站 今天我们爬取电影天堂,有好看的美剧我在上面都能找到,算是很全了. 这个网站的广告出奇的多,用过都知道,点一下搜索就会弹出个窗口,伴随着滑稽 ...

  9. 使用htmlparser爬虫技术爬取电影网页的全部下载链接

    昨天,我们利用webcollector爬虫技术爬取了网易云音乐17万多首歌曲,而且还包括付费的在内,如果时间允许的话,可以获取更多的音乐下来,当然,也有小伙伴留言说这样会降低国人的知识产权保护意识,诚 ...

随机推荐

  1. 一、什么是hadoop?

    一.什么是hadoop 1. 背景 Hadoop为分布式文件系统和计算的基础框架系统,其中包含hadoop程序,hdfs系统等.   2. 名词解释 1.Hadoop, Apache开源的分布式框架. ...

  2. ZOJ 3923 Handshakes

    水题. 算一下每个人和之前的人握手次数+之后的人和这个人握手次数.取最大值. #include<cstdio> #include<cstring> #include<cm ...

  3. 浏览器缓存(Egret项目实例分析)

    参考文章: 浏览器缓存机制:http://web.jobbole.com/82997/ 浏览器缓存机制:http://www.cnblogs.com/skynet/archive/2012/11/28 ...

  4. ie6,ie7兼容性总结

    摘自: http://www.cnblogs.com/li0803/archive/2009/08/22/1552094.html 其实浏览器的不兼容,我们往往是各个浏览器对于一些标准的定义不一致导致 ...

  5. AndroidStudio项目.gitignore文件内容

    .metadata/ *~ # files for the dex VM *.dex # Java class files *.class # generated files bin/ gen/ li ...

  6. 解决word启动时报找不到mathpage.wll错误

    按下面的网址进行操作即可: http://www.mathtype.cn/wenti/word-jianrong.html

  7. USACO 2015 December Contest, Platinum Problem Max Flow【树链剖分】

    题意比较难理解,就是给你n个点的树,然后给你m个修改操作,每一次修改包括一个点对(x, y),意味着将x到y所有的点权值加一,最后问你整个树上的点权最大是多少. 比较裸的树链剖分了,感谢Haild的讲 ...

  8. HTML5离线应用与客户端存储

    序言 本篇文章会详细介绍使用HTML5开发离线应用的步骤,以及本地存储与cookie的一些异同,最后利用上面所学例子来实现一个购物车场景. 使用HTML5离线存储的基本过程如下: 离线检测:首先要对设 ...

  9. BootStrap TreeView使用示例

    <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/ ...

  10. UVa 357 - Let Me Count The Ways

    题目大意:也是硬币兑换问题,与147.674用同样的方法即可解决. #include <cstdio> #include <cstring> #define MAXN 3000 ...