精华内容
下载资源
问答
  • java爬虫,爬取网址、爬取视频、爬取图片
    2021-02-12 09:50:35

    importjava.io.BufferedReader;importjava.io.File;importjava.io.FileOutputStream;importjava.io.IOException;importjava.io.InputStream;importjava.io.InputStreamReader;importjava.net.URL;importjava.util.HashMap;importjava.util.Map;importjava.util.regex.Matcher;importjava.util.regex.Pattern;/*** 功能:爬取某姐的小视频

    *@authorcxd

    **/

    public classWebSpiderDemo1 {public static void main(String[] args) throwsException {

    String source= "http://www.budejie.com/video/";

    String destDir= "C:/rob/";

    Map urlMap =getUrlInSource(source);for (Map.Entryentry : urlMap.entrySet()) {

    String title= entry.getKey();//视频名称

    String url = entry.getValue();//视频url

    File destFile = new File(destDir + title + ".mp4");

    download(url, destFile);

    }

    }/*** 通过视频的URL下载该视频并存入本地

    *

    *@paramurl 视频的URL

    *@paramdestFile 视频存入的位置

    *@throwsIOException*/

    public static void download(String url, File destFile) throwsIOException {

    URL videoUrl= newURL(url);

    InputStream is=videoUrl.openStream();

    FileOutputStream fos= newFileOutputStream(destFile);int len = 0;byte[] buffer = new byte[1024];while ((-1) != (len =is.read(buffer))) {

    fos.write(buffer,0, len);

    }

    fos.flush();if (null !=fos) {

    fos.close();

    }if (null !=is) {

    is.close();

    }

    }/*** 获取视频的URL地址和视频名称存入hashMap

    *

    *@paramsource

    *@return*@throwsIOException*/

    public static Map getUrlInSource(String source) throwsIOException {

    Map hashMap = new HashMap<>();for (int index = 1; index <= 1; index++) { //页数最大为50,自己玩嘛,就只爬取了一页。

    String pageUrl = source +index;

    URL url= newURL(pageUrl);

    InputStream is=url.openStream();//若遇到反爬机制则使用该方法将程序伪装为浏览器进行访问//HttpURLConnection conn = (HttpURLConnection) url.openConnection();//conn.setRequestMethod("GET");//conn.setRequestProperty("user-agent",//"Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/70.0.3538.77 Safari/537.36");//BufferedReader br = new BufferedReader(new InputStreamReader(conn.getInputStream(), "UTF-8"));

    BufferedReader br= new BufferedReader(new InputStreamReader(is, "UTF-8"));

    String info= null;

    String title= null;//此处不要用==null进行判断,因为网页中有很多行都是null,否则会报java.lang.NullPointerException。

    for (int i = 0; i < 10000; i++) {

    info=br.readLine();if (null !=info) {

    String urlRegex= "data-mp4=\"(.*?\\.mp4)";if (info.contains("data-title")) {

    title=info;

    }

    Pattern pattern=Pattern.compile(urlRegex);

    Matcher matcher=pattern.matcher(info);if(matcher.find()) {for (int j = 0; j <= matcher.groupCount(); j++) {

    String tmp=matcher.group(j);if (!tmp.startsWith("data-mp4=")) {

    String videoTitle=getTitle(title.trim());

    hashMap.put(videoTitle, tmp);

    }

    }

    }

    }

    }

    }returnhashMap;

    }/*** 清洗整理titile字符串,

    *

    *@paraminfo

    *@return

    */

    private staticString getTitle(String info) {int len =info.length();

    String title= info.substring(12, len - 1);returntitle;

    }

    }

    更多相关内容
  • java爬虫视频爬虫工具

    2019-03-07 11:46:26
    java爬虫视频爬虫源码);可以支持各大视频网站;支持:优酷、土豆、酷6、6间房、搜狐、新浪 等视频网站的 视屏提取;只需要输入网站的URL 即可提取当前页面的所有视频
  • 本文是通过JAVA获取优酷、土豆、酷6、6间房等视频,小编觉得挺不错的,现在就分享给大家,也给大家做个参考。一起跟随小编过来看看吧
  • java爬虫的讲解以及对工具框架的应用 对java爬虫的讲解以及对工具框架的应用
  • Java爬虫视频

    2017-08-15 10:39:38
    各种Java爬虫视频(全)
  • 一个Java实现的爬虫工具。 用到的技术:网络编程、数据库技术、自动化、通用编程。 想要共同学习的朋友可以使用资源中附有的源码和流程图,这样可以帮助你快速理解代码。 代码也许并不是最优化的,但十分易于理解...
  • 视频爬虫源码

    2018-06-29 16:27:11
    java爬虫源码 java爬虫源码 java爬虫源码 java爬虫源码 java爬虫源码 java爬虫源码
  • ┃ ┣━网络爬虫JAVA ┃ ┃ ┃ ┃ ┣━开源系统-教学视频 ┃ ┃ ┃ ┃ ┃ ┣━微博爬虫-博主、博文、关注列表抓取更新.zip ┃ ┃ ┃ ┃ ┃ ┣━微博爬虫_导入与布署视频.zip ┃ ┃ ┃ ┃ ┃ ┣━漫型网络爬虫_导入...
  • Java搜索及网页爬虫视频教程.zip
  • Java爬虫从入门到精通

    2021-06-13 06:26:54
    本课程是java大数据系列课程的数据采集部分,通过java爬虫技术从互联网进行在线数据采集,存储。对于本课程学习要求具有一定的java编程基础。通过本课的学习,能够掌握爬虫技术原理,数据采集的原则,数据采集的方式...
  • JAVA爬虫第一视频网站

    千次阅读 2018-06-05 15:18:56
    需求:获取第一视频网搞笑栏目的视频信息,以及视频源地址 思路:获得网站内容,再从内容中筛选出所需内容 1.如何获得网站所有内容 import java.io.BufferedReader; import java.io.InputStream; import java.io...

    需求:获取第一视频网搞笑栏目的视频信息,以及视频源地址

    思路:获得网站内容,再从内容中筛选出所需内容

    1.如何获得网站所有内容

    import java.io.BufferedReader;
    import java.io.InputStream;
    import java.io.InputStreamReader;
    import java.net.HttpURLConnection;
    import java.net.URL;
    public class DVideo {
    
    	public static String getPageContent(String url){
    		StringBuffer sb = new StringBuffer();
    		try {
    			// 建立连接
    			URL u = new URL(url);
    			HttpURLConnection httpUrlConn = (HttpURLConnection) u.openConnection();
    			httpUrlConn.setDoInput(true);  
                httpUrlConn.setRequestMethod("GET");  
                httpUrlConn.setRequestProperty("User-Agent", "Mozilla/4.0 (compatible; MSIE 5.0; Windows NT; DigExt)");
    			// 获取输入流
    			InputStream is = httpUrlConn.getInputStream();
    			// 将字节输入流转换为字符输入流
    			InputStreamReader isr = new InputStreamReader(is, "utf-8");
    			// 为字符输入流添加缓冲
    			BufferedReader br = new BufferedReader(isr);
    			// 读取返回结果
    			String data = null;
    			while ((data = br.readLine()) != null) {
    				sb.append(data);
    				//System.out.println(data);
    			}
    			// 释放资源
    			br.close();
    			isr.close();
    			is.close();
    			httpUrlConn.disconnect();
    		} catch (Exception e) {
    			e.printStackTrace();
    		}
    		return sb.toString();
    	}
    }

     

    2.如何获得需要内容

     

            String web = DVideo.getPageContent("http://www.v1.cn/gaoxiao/");
    		Pattern pattern = Pattern.compile("<div class=\"pic\">.*?<div class=\"uploadUser\">");
    		Matcher matcher = pattern.matcher(web);
    		Integer count = 0;
    		while(matcher.find()){
    			if(c>=40){
    				break;
    			}
    			String group = matcher.group();
    			//System.out.println(group);
    			//视频源地址
    			String videoUrl = "http://f04.v1.cn/transcode" + group.substring(group.indexOf("href")+12,group.indexOf(".shtml"))+"MOBILET2.mp4";
    			Boolean flag = videoService.findByVideoUrl(videoUrl);
    			if(flag == false){
    				count++;
    				continue;
    			}
    			//System.out.println(videoUrl);
    			//视频时长
    			String tipTime = group.substring(group.indexOf("tipTime\">")+9,group.indexOf("</span>"));
    			//System.out.println(tipTime);
    			//视频封面图片地址
    			String imgUrl = group.substring(group.indexOf("http"),group.indexOf("\" >"));
    			//System.out.println(imgUrl);
    			//视频标题
    			String videoTitle = group.substring(group.lastIndexOf("shtml\">")+7,group.lastIndexOf("</a>"));
    			//System.out.println(videoTitle);
    			count++;
    		}
    	}

    第一视频网爬虫结束,对正则表达式不是很熟练,用的字符串截取较多,有什么不足的地方请留言,共同学习,共同进步。

     

    最后给各位看官来波福利

    阿里云服务器2000元代金券和折扣免费领:https://promotion.aliyun.com/ntms/yunparter/invite.html?userCode=ypbt9nme

    性能级主机2-5折:https://promotion.aliyun.com/ntms/act/enterprise-discount.html?userCode=ypbt9nme

    新用户云通讯专享8折:https://www.aliyun.com/acts/alicomcloud/new-discount?userCode=ypbt9nme

    新老用户云主机低4折专项地址:https://promotion.aliyun.com/ntms/act/qwbk.html?userCode=ypbt9nme

    680元即可注册商标专项地址:https://tm.aliyun.com/?userCode=ypbt9nme

    17元/月云主机:https://promotion.aliyun.com/ntms/act/qwbk.html?spm=5176.11533447.1097531.13.22805cfaiTv7SN&userCode=ypbt9nme

     

    展开全文
  • 最新Java WebMagic爬虫教程(包括:HttClient/Jsoup的使用教程)、爬虫案例项目
  • java版网络爬虫视频教程分享
  • 有不少人都不知道 Java 可以做网络爬虫,其实 Java做网络爬虫而且还做的非常好,在开源社区中有不少优秀的 Java 网络爬虫框架,例如 webmagic 。我的第一份正式工作就是使用 webmagic 编写数据采集程序,当时...

    说起网络爬虫,大家想起的估计都是 Python ,诚然爬虫已经是 Python 的代名词之一,相比 Java 来说就要逊色不少。有不少人都不知道 Java 可以做网络爬虫,其实 Java 也能做网络爬虫而且还能做的非常好,在开源社区中有不少优秀的 Java 网络爬虫框架,例如 webmagic 。我的第一份正式工作就是使用 webmagic 编写数据采集程序,当时参与了一个舆情分析系统的开发,这里面涉及到了大量网站的新闻采集,我们就使用了 webmagic 进行采集程序的编写,由于当时不知道其设计原理,使用起来还是走了不少弯路,其实 webmagic 的设计借鉴了 Scrapy ,所以它也能像 Scrapy 一样强大,关于 webmagic 框架我们将在后续展开详细的讨论。
    在后面的几年工作中,也参与了好几个爬虫项目,但是大多数都是使用 Python ,抛开语言不谈,爬虫也是有一套思想的。这些年写爬虫程序,对我个人的技术成长帮助非常大,因为在爬虫的过程中,会遇到各种各样的问题,其实做网络爬虫还是非常考验技术的,除了保证自己的采集程序可用之外,还会遇到被爬网站各种奇奇怪怪的问题,比如整个 HTML 页面有没一个 class 或者 id 属性,你要在这种页面提取表格数据,并且做到优雅的提取,这就是非常考验你的想象力以及技术啦。非常有幸在刚入行的时候就接触到了网络爬虫这一块,它加快了我对互联网的理解和认知,扩宽了我的视野。

    这几年来网络爬虫比较火,如果你想学习 Java 网络爬虫,我根据我自己的经验总结了一下,想入门学习 Java 网络爬虫需要知道的四点基础知识。

    1、有 “道德” 的爬虫
    我为什么会把这一点放在最前面呢?因为我觉得这一点比较重要,什么叫有 “道德” 的爬虫呢?就是遵循被爬服务器的规则,不去影响被爬服务器的正常运行,不把被爬服务搞垮,这就是有 “道德” 的爬虫。

    经常有人讨论的一个问题就是爬虫合法吗?知乎一下你看到的将是这样的

    答案千千万,在这众多答案中,我个人比较赞同下面的这个回答

    爬虫作为一种计算机技术就决定了它的中立性,因此爬虫本身在法律上并不被禁止,但是利用爬虫技术获取数据这一行为是具有违法甚至是犯罪的风险的。所谓具体问题具体分析,正如水果刀本身在法律上并不被禁止使用,但是用来捅人,就不被法律所容忍了。

    爬虫违不违法?取决于你做的事情违不违法,网络爬虫的本质是什么?网络爬虫的本质是用机器代替人工去访问页面。我查看公开的新闻肯定不犯法,所以我去采集公开在互联网上的新闻也不犯法,就像各大搜索引擎网站一样,别的网站巴不得别搜索引擎的蜘蛛抓取到。另一种恰恰相反的情况是去采集别人隐私的数据,你自己去查看别人的隐私信息这就是一种违法的行为,所以用程序去采集也是违法的,这就像答案中所说的水果刀本身不违法,但是用来捅人就违法啦。

    要做到有 “道德” 的爬虫,Robots 协议是你必须需要了解的,下面是 Robots 协议的百度百科

    在很多网站中会申明 Robots 协议告诉你哪些页面是可以抓取的,哪些页面是不能抓取的,当然 Robots 协议只是一种约定,就像公交车上的座位一样标明着老弱病残专座,你去坐了也不违法。

    除了协议之外,我们在采集行为上也需要克制,在 『数据安全管理办法(征求意见稿)』的第二章第十六条指出:

    网络运营者采取自动化手段访问收集网站数据,不得妨碍网站正常运行;此类行为严重影响网站运行,如自动化访问收集流量超过网站日均流量三分之一,网站要求停止自动化访问收集时,应当停止。

    这条规定指出了爬虫程序不得妨碍网站正常运行,如果你使用爬虫程序把网站搞垮了,真正的访问者就不能访问该网站了,这是一种非常不道德的行为。应该杜绝这种行为。

    除了数据的采集,在数据的使用上同样需要注意,我们即使在得到授权的情况下采集了个人信息数据,也千万不要去出卖个人数据,这个是法律特别指出禁止的,参见:

    根据《最高人民法院 最高人民检察院关于办理侵犯公民个人信息刑事案件适用法律若干问题的解释》第五条规定,对“情节严重”的解释:

    (1)非法获取、出售或者提供行踪轨迹信息、通信内容、征信信息、财产信息五十条以上的;
    (2)非法获取、出售或者提供住宿信息、通信记录、健康生理信息、交易信息等其他可能影响人身、财产安全的公民个人信息五百条以上的;
    (3)非法获取、出售或者提供第三项、第四项规定以外的公民个人信息五千条以上的便构成“侵犯公民个人信息罪”所要求的“情节严重”。
    此外,未经被收集者同意,即使是将合法收集的公民个人信息向他人提供的,也属于刑法第二百五十三条之一规定的“提供公民个人信息”,可能构成犯罪。
    这里推荐一个免费仅供学习的爬虫网站科技新闻
    2、学会分析 Http 请求
    我们每一次与服务端的交互都是通过 Http 协议,当然也有不是 Http 协议的,这个能不能采集我就不知道啦,没有采集过,所以我们只谈论 Http 协议,在 Web 网页中分析 Http 协议还是比较简单,我们以百度检索一条新闻为例

    我们打开 F12 调试工具,点击 NetWork 查看版能查看到所有的请求,找到我们地址栏中的链接,主链接一般存在 NetWork 最上面一条链接

    在右边headers查看栏中,我们能够看到这次请求所需要的参数,在这里我们需要特别注意 Request Headers 和 Query String Parameters 这两个选项栏。

    Request Headers 表示的是该次 Http 请求所需要的请求头的参数,有一些网站会根据请求头来屏蔽爬虫,所以里面的参数还是需要了解一下的,请求头参数中大部分参数都是公用的, User-Agent 和 Cookie 这两个参数使用比较频繁, User-Agent 标识浏览器请求头,Cookie 存放的是用户登录凭证。

    Query String Parameters 表示该次 Http 请求的请求参数,对于post 请求来说这个还是非常重要的,因为在这里可以查看到请求参数,对我们模拟登陆等 Post 请求非常有用。

    上面是网页版的 HTTP 请求的链接分析,如果需要采集 APP 里面的数据就需要借助模拟器了,因为 APP 里没有调试工具,所以只能借助模拟器,使用较多的模拟器工具有如下两种,有兴趣的可以执行研究。

    fiddler
    wireshark
    3、学会 HTML 页面解析
    我们采集的页面都是 HTML 页面,我们需要在 HTML 页面中获取我们需要的信息,这里面就涉及到了 HTML 页面解析,也就是 DOM 节点解析,这一点是重中之重,如果你不会这一点就像魔术师没有道具一样,只能干瞪眼啦。例如下面这个 HTML 页面

    我们需要获取标题 “java user-agent 判断是否电脑访问” ,我们先通过 F12 检查元素

    标题所在的 span 标签我已经在图中框出来啦,我们该如何解析这个节点信息呢?方法有千千万万,经常使用的选择器应该是 CSS 选择器 和 XPath ,如果你还不知道这两种选择器,可以点击下方链接学习了解一下:

    CSS 选择器参考手册:https://www.w3school.com.cn/cssref/css_selectors.asp

    XPath 教程:https://www.w3school.com.cn/xpath/xpath_syntax.asp

    使用 CSS 选择器解析的写法为:#wgt-ask > h1 > span

    使用 XPath 解析的写法为://span[@class=“wgt-ask”]

    这样就获取到了 span 的节点,值需要取出 text 就好了,对于 CSS 选择器 和 XPath 除了自己编写之外,我们还可以借助浏览器来帮我们完成,例如 chrome 浏览器

    只需要选中对应的节点,右键找到 Copy ,它提供了几种获取该节点的解析方式,具体的如上图所示,Copy selector 对应的就是 Css 选择器,Copy XPath 对应的是 XPath,这个功能还是非常有用的。

    4、了解反爬虫策略
    因为现在爬虫非常泛滥,很多网站都会有反爬虫机制,来过滤掉爬虫程序,以便保证网站的可以用,这也是非常有必要的手段,毕竟如果网站不能使用了,就没有利益可谈啦。反爬虫的手段非常多,我们来看看几种常见的反爬虫手段。

    基于 Headers 的反爬虫机制
    这是一种比较常见的反爬虫机制,网站通过检查 Request Headers 中的 User-Agent 、Referer 参数,来判断该程序是不是爬虫程序。要绕过这种机制就比较简单,我们只需要在网页中先查看该网站所需要的 User-Agent 、Referer 参数的值,然后在爬虫程序的 Request Headers 设置好这些参数就好啦。

    基于用户行为的反爬虫机制
    这也是一种常见的反爬虫机制,最常用的就是 IP 访问限制,一个 IP 在一段时间内只被允许访问多少次,如果超过这个频次的话就会被认为是爬虫程序,比如豆瓣电影就会通过 IP 限制。

    对于这种机制的话,我们可以通过设置代理 IP 来解决这个问题,我们只需要从代理ip网站上获取一批代理ip,在请求的时候通过设置代理 IP 即可。

    除了 IP 限制之外,还会有基于你每次的访问时间间隔,如果你每次访问的时间间隔都是固定的,也可能会被认为是爬虫程序。要绕过这个限制就是在请求的时候,时间间隔设置不一样,比例这次休眠 1 分钟,下次 30 秒。

    基于动态页面的反爬虫机制
    有很多网站,我们需要采集的数据是通过 Ajax 请求的或者通过 JavaScript生成的,对于这种网站是比较蛋疼的,绕过这种机制,我们有两种办法,一种是借助辅助工具,例如 Selenium 等工具获取渲染完成的页面。第二种方式就是反向思维法,我们通过获取到请求数据的 AJAX 链接,直接访问该链接获取数据。

    以上就是爬虫的一些基本知识,主要介绍了网络爬虫的使用工具和反爬虫策略,这些东西在后续对我们的爬虫学习会有所帮助,由于这几年断断续续的写过几个爬虫项目,使用 Java 爬虫也是在前期,后期都是用 Python,最近突然间对 Java 爬虫又感兴趣了,所以准备写一个爬虫系列博文,重新梳理一下 Java 网络爬虫,算是对 Java 爬虫的一个总结,如果能帮助到想利用 Java 做网络爬虫的小伙伴,那就更棒啦。Java 网络爬虫预计会有六篇文章的篇幅,从简单到复杂,一步一步深入,内容涉及到了我这些年爬虫所遇到的所有问题。下面是模拟的六篇文章介绍。

    1、网络爬虫,原来这么简单
    这一篇是网络爬虫的入门,会使用 Jsoup 和 HttpClient 两种方式获取到页面,然后利用选择器解析得到数据。最后你会收获到爬虫就是一条 http 请求,就是这么简单。

    2、网页采集遇到登录问题,我该怎么办?
    这一章节简单的聊一聊获取需要登录的数据,以获取豆瓣个人信息为例,从手动设置 cookies 和模拟登陆这两种方式简单的聊一聊这类问题。

    3、网页采集遇到数据 Ajax 异步加载,我该怎么办?
    这一章节简单的聊一聊异步数据的问题,以网易新闻为例,从利用 htmlunit 工具获取渲染完页面和反向思维直接获取到 Ajax 请求连接获取数据两种方式,简单的聊一下这类问题的处理方式。

    4、网页采集 IP 被封,我该怎么办?
    IP 访问被限制这应该是常见的事情,以豆瓣电影为例,主要以设置代理IP为中心,简单的聊一聊 IP 被限制的解决办法,还会简单的聊一下如何搭建自己的ip代理服务。

    5、网络采集性能太差,我该怎么办?
    有时候对爬虫程序的性能有要求,这种单线程的方式可能就行不通了,我们可能就需要多线程甚至是分布式的爬虫程序啦,所以这一篇主要聊一聊多线程爬虫以及分布式爬虫架构方案。

    6、开源爬虫框架 webmagic 使用案例解析
    以前用 webmagic 做过一次爬虫,但是那个时候我似懂非懂的,没有很好的理解 webmagic 框架,经过这几年的经历,我现在对这个框架有了全新的认识,所以想按照 webmagic 的规范搭建一个简单的 demo来体验 webmagic 的强大之处。说起网络爬虫,大家想起的估计都是 Python ,诚然爬虫已经是 Python 的代名词之一,相比 Java 来说就要逊色不少。有不少人都不知道 Java 可以做网络爬虫,其实 Java 也能做网络爬虫而且还能做的非常好,在开源社区中有不少优秀的 Java 网络爬虫框架,例如 webmagic 。我的第一份正式工作就是使用 webmagic 编写数据采集程序,当时参与了一个舆情分析系统的开发,这里面涉及到了大量网站的新闻采集,我们就使用了 webmagic 进行采集程序的编写,由于当时不知道其设计原理,使用起来还是走了不少弯路,其实 webmagic 的设计借鉴了 Scrapy ,所以它也能像 Scrapy 一样强大,关于 webmagic 框架我们将在后续展开详细的讨论。
    在后面的几年工作中,也参与了好几个爬虫项目,但是大多数都是使用 Python ,抛开语言不谈,爬虫也是有一套思想的。这些年写爬虫程序,对我个人的技术成长帮助非常大,因为在爬虫的过程中,会遇到各种各样的问题,其实做网络爬虫还是非常考验技术的,除了保证自己的采集程序可用之外,还会遇到被爬网站各种奇奇怪怪的问题,比如整个 HTML 页面有没一个 class 或者 id 属性,你要在这种页面提取表格数据,并且做到优雅的提取,这就是非常考验你的想象力以及技术啦。非常有幸在刚入行的时候就接触到了网络爬虫这一块,它加快了我对互联网的理解和认知,扩宽了我的视野。

    展开全文
  • java爬虫资料 pdf 文档 视频 源码 都有爬虫
  • Java爬虫技术,无视频,图文教程,黑马的
  • 1,获得要的网站主页url 2,对于分页的网站(视频网站一般都会分页的啦)分析url分页的方法,找规律 3,在视频页面,分析url,找出视频的实际下载地址,找到规律 4,开始下载 上代码! public static void main...

    环境:jdk1.8、win10、科学上网、eclipse

    一直想学下写爬虫,满足一下自己的小愿望。正好过年有时间,就研究了一下,网上的资料良莠不齐,于是我决定自己整理一份,按照我的步骤做,一定是可以的,成功了记得回来点赞。

    案例里爬了一个小型视频网站,最终的效果可以达到自动下载该网站的全部视频,且每个视频都有他该有的名字。
    如果你要用来爬其他网站,代码里很多地方(比如url,url的解析,字符串的截取,下载的位置)是需要根据具体页面进行修改的,我只能提供一个思路而已,当然要爬我爬的这个网站的话当然就不需要改了。

    一、思路:

    1,获得要爬的网站主页url

    2,对于分页的网站(视频网站一般都会分页的啦)分析url分页的方法,找规律

    3,在每个分页上找出视频页面的url,找规律

    4,在视频页面,分析url,找出视频的实际下载地址,找到规律

    5,开始下载

    6,开始happy!!!

    二、步骤:

    1,mian函数,没什么好说的

    	public static void main(String[] args) throws Exception {
    		final String SCORE_URL = "https://www.xxxx/xxx";// 主页(手工打码)
    		final String DOWNLOAD_DIR = "F:/video/";// 下载目录
    		
    		System.setProperty("https.protocols", "TLSv1,TLSv1.1,TLSv1.2,SSLv3");
    		System.err.println("爬取子页面...");
    		List<String> allArticle = getAllVideoPage(SCORE_URL);
    		System.err.println("爬取视频...");
    		Map<String, String> urlMap = getUrlInSource(allArticle);
    		System.err.println("本次下载文件数量:" + urlMap.size());
    		System.err.println("开始下载...");
    		downloadMovie(DOWNLOAD_DIR, urlMap);
    	}
    

    2,这里网站的视频一般不会放在首页上,且视频网站一般都会分页的。所以需要先分析分页的url,然后分析进入视频页面的url,然后保存所有视频页url到一个列表里。难点在于对页面的url分析

    例如这是分页的url,这个就有明显的规律了。我们只需要修改 page= 后面的数字就可以获得每个分页的url
    在这里插入图片描述
    然后就要分析进入每个视频页面的url,chrome F12 好我们来看
    在这里插入图片描述
    标出的这行就是进入视频页面的url,这个相信大家都会找,我就不细说了。
    然后我们需要将href=后面的双引号里的东西截取出来,然后拼接成视频页面的完整url,具体看我代码
    最后把所有视频页的url存入一个list,下一步

    	/**
    	 * 爬所有视频页 存入一个list
    	 * 
    	 * @param source 主页
    	 * @return 视频页 列表
    	 * @throws Exception
    	 */
    	private static List<String> getAllVideoPage(String source) throws Exception {
    		List<String> urls = new ArrayList<>();
    		for (int j = 1; j < 5; j++) { // 要爬哪些页数
    			String pageUrl = source;
    			// 拼接子页url
    			pageUrl = pageUrl + "?sort=new&page=" + j;
    			URL url = new URL(pageUrl);
    			// 连接url
    			BufferedReader br = connectURL(url);
    			String info = null;
    			for (int i = 0; i < 10000; i++) {
    				info = br.readLine();
    				if (info != null) {// 这里开始根据实际页面上的url进行字符串截取
    					if (info.contains("target=\"_self\"")) {
    						int start = info.indexOf("href") + 6;
    						int end = start + 6;
    						String substring = "https://www.xxx.xxx" + info.substring(start, end);
    						urls.add(substring);
    					}
    				}
    			}
    		}
    		return urls;
    	}
    

    3,现在,我们拥有了一个视频页面url的列表,下面只需要找出每一个视频页面中视频的实际下载地址即可。

    依旧,分析页面。很幸运,视频页面就有下载按钮。
    在这里插入图片描述
    我们直接分析页面代码。找到了!!!这个带xxx.mp4的就是下载连接了,我们可以试试看,一点这个链接,浏览器就会开启下载。嗯,没错,就是他。
    在这里插入图片描述
    只有视频下载地址其实我们已经可以开始下载视频,但是这不完美,没有视频的名字怎么行!开始找名字
    在这里插入图片描述
    涂掉的部分就是名字啦,具体截取方法见代码

    	/**
    	 * 获取视频的URL地址和视频名称存入hashMap
    	 * 
    	 * @param source 视频页 列表
    	 * @return 视频名称=下载url
    	 * @throws IOException
    	 */
    	private static Map<String, String> getUrlInSource(List<String> source) throws IOException {
    
    		Map<String, String> hashMap = new HashMap<>();
    		for (int j = 0; j < source.size(); j++) {
    			String pageUrl = source.get(j);
    			URL url = new URL(pageUrl);
    			// 连接url
    			BufferedReader br = connectURL(url);
    			String info = null;
    			String title = null;
    			// 此处不要==null进行判断,因为网页中有很多行都是null,否则会报java.lang.NullPointerException?
    			for (int i = 0; i < 10000; i++) {
    				info = br.readLine();
    				if (null != info) {// 这里截取视频名称,也是根据页面实际情况
    					if (info.contains("h1 class=\"text-truncate\"")) {
    						int st = info.indexOf("truncate") + 10;
    						int ed = info.lastIndexOf("h1") - 2;
    						title = info.substring(st, ed);
    					}
    					if (info.contains("https://xxx.xxx.xxx/download/mp4")) {// 这里截取视频实际下载url,也是根据页面实际情况
    						int start = info.indexOf("http");
    						int end = info.lastIndexOf("mp4") + 3;
    						String substring = info.substring(start, end);
    						hashMap.put(title, substring);
    					}
    				}
    			}
    		}
    		return hashMap;
    	}
    

    4,现在我们有了一个map,里面是视频的名字和下载地址,接下来就简单啦。下载就完事了。

    	/**
    	 * 开启多线程下载
    	 * 
    	 * @param DOWNLOAD_DIR
    	 * @param urlMap
    	 */
    	private static void downloadMovie(final String DOWNLOAD_DIR, Map<String, String> urlMap) {
    		ExecutorService es = Executors.newFixedThreadPool(8);
    		for (Map.Entry<String, String> entry : urlMap.entrySet()) {
    			final String title = entry.getKey();// 视频名称
    			final String url = entry.getValue();// 视频url
    
    			es.execute(new Runnable() {
    
    				@Override
    				public void run() {
    					try {
    						System.out.println("正在下载:    " + title + ".......");
    						File destFile = new File(DOWNLOAD_DIR + title + ".mp4");
    
    						download(url, destFile);
    						System.out.println("=========> " + title + " 下载完毕!");
    
    					} catch (IOException e) {
    						// TODO Auto-generated catch block
    						e.printStackTrace();
    					}
    				}
    			});
    		}
    	}
    
    	/**
    	 * 通过视频的URL下载该视频并存入本地
    	 * 
    	 * @param url      视频的URL
    	 * @param destFile 视频存入的文件夹
    	 * @throws IOException
    	 */
    	private static void download(String url, File destFile) throws IOException {
    		URL videoUrl = new URL(url);
    
    		InputStream is = videoUrl.openStream();
    		FileOutputStream fos = new FileOutputStream(destFile);
    
    		int len = 0;
    		byte[] buffer = new byte[1024];
    		while ((-1) != (len = is.read(buffer))) {
    			fos.write(buffer, 0, len);
    		}
    		fos.flush();
    
    		if (null != fos) {
    			fos.close();
    		}
    
    		if (null != is) {
    			is.close();
    		}
    	}
    
    	/**
    	 * 链接url 返回字节流
    	 * 
    	 * @param url
    	 * @return
    	 * @throws IOException
    	 * @throws ProtocolException
    	 * @throws UnsupportedEncodingException
    	 */
    	private static BufferedReader connectURL(URL url)
    			throws IOException, ProtocolException, UnsupportedEncodingException {
    		// 这里的代理服务器端口号 需要自己配置
    		Proxy proxy = new Proxy(Proxy.Type.HTTP, new InetSocketAddress("127.0.0.1", 7959));
    		HttpURLConnection conn = (HttpURLConnection) url.openConnection(proxy);
    		// 若遇到反爬机制则使用该方法将程序伪装为浏览器进行访问
    		conn.setRequestMethod("GET");
    		conn.setRequestProperty("user-agent",
    				"Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/70.0.3538.77 Safari/537.36");
    		BufferedReader br = new BufferedReader(new InputStreamReader(conn.getInputStream(), "UTF-8"));
    		return br;
    	}
    

    这里有一些需要说明的,由于很多网站需要科学上网,直接这样连是连不上的,所以我们需要让程序开启代理模式。
    看上方代码的最后几行
    Proxy proxy = new Proxy(Proxy.Type.HTTP, new InetSocketAddress("127.0.0.1", 7959));
    这行代码就是设置代理的,当然前提是你得有代理。参数自然是ip和port啦,那怎么看自己代理的ip和port呢。
    以著名的x灯为例:
    在这里插入图片描述
    就是这个了,其他也应该大同小异。

    5,最终效果

    在这里插入图片描述
    欢迎留言讨论。
    项目完整代码:(稍后添加)

    展开全文
  • java爬虫 新浪微博

    2021-02-12 17:17:58
    ViewCodepackagecom.sreach.spider;importjava.io.BufferedWriter;importjava.io.File;importjava.io.FileOutputStream;importjava.io.IOException;importjava.io.OutputStreamWriter;importjava.util.regex...
  • java爬虫,多线程爬取小说资源的全套视频及源代码。。。 java爬虫,多线程爬取小说资源的全套视频及源代码。。。 java爬虫,多线程爬取小说资源的全套视频及源代码。。。
  • java实现微信公众号源码 AppiumWeChatAuto 1、如果要实现微信公众号文章的自动采集就必须实现微信公众号文章的自动浏览操作; 2、此工程是基于Appium和Java来实现的Android微信客户端自动化浏览的操作,基于微信...
  • Java爬虫。。。。。

    2018-05-21 17:08:18
    Java爬虫视频有源码 Java爬虫视频有源码 Java爬虫视频有源码 Java爬虫视频有源码 Java爬虫视频有源码
  • 最全的网页爬虫程序。包括POST和GET提交页面列表两种方式。包括多线程处理与数据库
  • Java爬虫

    千次阅读 2020-08-27 01:30:28
    网络爬虫 概念 网络爬虫(Web crawler),是一种按照一定的规则,自动地抓取万维网信息的程序或者脚本。 简单的小程序 创建依赖 <dependencies> <!-- HttpClient --> <dependency> <...
  • 爬虫视频教程

    2018-09-14 18:59:36
    基础爬虫视频教程,带领大家学习如何利用JAVA做网络爬虫,以及一些网络编程知识。主要利用到了Jsoup框架。
  • Java 爬虫简单实现多线程爬取视频

    千次阅读 2019-10-10 10:26:41
    Java 爬虫简单实现多线程爬取视频 一 引言 什么是网络爬虫? 个人简单理解: 根据特定规则从指定web开放内容中抓取希望获取的数据,如视频,图片,小说等 官方权威解释(wiki): 网络爬虫(英语:),也叫网络蜘蛛...
  • Java-爬虫工具类

    2021-05-28 14:18:53
    (jsoup解析网页 , 不解析视频 , 音乐 ) <dependency> <groupId>org.jsoup</groupId> <artifactId>jsoup</artifactId> <version>1.10.2</version> </dependency&...
  • 前戏:因为作者喜欢爬虫,所以总结了一下自己爬虫时一般遇到的难处,所以这些难处就是防...首先我们看看这个网页:普通.png其次看看页面的源码:页面源码.png一般爬虫遇到这种网页,肯定偷偷开心,因为只要整个...
  • 如何使用Java爬虫来获取网页视频 方法1对于没有反爬虫机制(不多说直接上代码) @SuppressWarnings(“all”) public String getVideo() { try { String pageUrl="要爬取的网址"; URL url=new URL(pageUrl); ...
  • Java实现网络爬虫1.URL类和URLConnection扩展1.1URL学习1.2URL的基本使用 案例1.3URL的应用举例1.4. URLConnection使用方法(通过URL进而获取到 选讲)使用方法使用URLConnection对象一般分为以下7步1.5....
  • 需求:自己开发的一个视频网站不想把自己上传视频和封面图片,...当然如果您是要爬取后把视频文件也下载到自己电脑的话,也可以用java代码实现的哦。 实际操作: 1、先用浏览器打开b站,开发者模式(浏览器开发者模式

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 17,006
精华内容 6,802
关键字:

java爬虫能爬视频吗

java 订阅