京东简单爬虫

先找到视频的请求url,发现url中vid(猜测是视频参数)是要进行传参的,
在代码检查中查找vid,找到参数vid。
提取参数vid,拼接url,然后模拟请求。
即可进行视频下载

package com.example.shares.utils;

import com.gargoylesoftware.htmlunit.WebClient;
import com.gargoylesoftware.htmlunit.html.HtmlPage;
import org.apache.commons.io.FileUtils;

import java.io.*;
import java.net.URL;
import java.net.URLConnection;
import java.util.ArrayList;
import java.util.List;
import java.util.regex.Matcher;
import java.util.regex.Pattern;

public class CrawlingJinDong {
    //获取String类型页面
    public static String getHtmlStr(String url) throws IOException {
        WebClient webClient = new WebClient();
        webClient.getOptions().setCssEnabled(false);
        webClient.getOptions().setJavaScriptEnabled(false);
        webClient.getOptions().setUseInsecureSSL(true);
        HtmlPage htmlPage = webClient.getPage(url);
        String html =htmlPage.asXml();
        webClient.close();
        return html;
    }

    //写入文件
    public static void writerIntoFile(String html,String path) throws IOException {
       //新建文件,并放入文件写入流中
        File  file = new File(path);
        FileWriter fileWriter = new FileWriter(file);
        //把String类型的html写入文件写入流中
        fileWriter.write(html);
        fileWriter.close();
    }

    //读出文件
    public static String readFile(String html,String path) throws IOException {
        //通过缓冲取读取文件读入流中的文件
        BufferedReader bufferedReader = new BufferedReader(new FileReader(path));
        StringBuffer sb = new StringBuffer();
        //将缓冲区的文件读出到字符串中
        String contentLine = bufferedReader.readLine();
        while(contentLine!=null){
            sb.append(contentLine);
            sb.append("\r\n");
            contentLine=bufferedReader.readLine();
        }
        bufferedReader.close();
        return sb.toString();//转为字符串输出
    }


    public static void main(String args[]) throws IOException {
        String url="https://item.jd.com/100003311437.html";
        String htmlFilePath = "D:/picture/jidong/taideng.html";
        String resourcesFile = "D:/picture/jidong/";
        String html = getHtmlStr(url);
        writerIntoFile(html,htmlFilePath);
        String html1 = readFile(html,htmlFilePath);

        System.out.println("======================  开始爬取  ========================");

        //获取页面标题
        String str1="<div class=\"sku-name\">(.+?)</div>";//正则表达式
        Pattern pattern = Pattern.compile(str1,Pattern.DOTALL);
        Matcher matcher = pattern.matcher(html1);
        while(matcher.find()){
            System.out.println(matcher.group(1).replaceFirst("<img .+?>","").trim());
        }

        //获取视频
        //"infoVideoId":"126016285","mainVideoId":"99177800"
        //先查找请求中的响应VideoId
        String str2 ="infoVideoId\":\"(\\d+?)\",\"mainVideoId\":\"(\\d+?)\"";
        Pattern pattern1 = Pattern.compile(str2);
        Matcher matcher1 = pattern1.matcher(html1);
        String infoVideoId=null,mainVideoId=null;
        while(matcher1.find()) {
            infoVideoId = matcher1.group(1);
            mainVideoId = matcher1.group(2);
        }
        System.out.println("infoVideoId:"+infoVideoId+"  \nmainVideoId:"+mainVideoId);

        //进行请求模拟,获取请求响应头
        String infoStr=HttpClientUtil.get("https://cd.jd.com/tencent/video_v2?vid="+infoVideoId,"utf-8");
        String mainStr=HttpClientUtil.get("https://cd.jd.com/tencent/video_v3?vid="+mainVideoId,"utf-8");
        System.out.println("请求响应:"+"infoStr"+infoStr+"\n"+mainStr);

        //在请求响应头中查找MP4对应的url,并存入list中
        String str3="\"playUrl\":\"(.+?)\"";
        Pattern pattern2 = Pattern.compile(str3);
        Matcher matcher2 = pattern2.matcher(infoStr);
        Matcher matcher3 = pattern2.matcher(mainStr);
        List<String> list = new ArrayList<>();
        while(matcher2.find()) {
            list.add(matcher2.group(1));
            System.out.println("matcher2"+matcher2.group(1));
        }
        while(matcher3.find()) {
            list.add(matcher3.group(1));
            System.out.println("matcher3"+matcher3.group(1));
        }

        //开始准备视频下载
        System.out.println("------------------------开始准备下载----------------------");
        for(int i=0;i<list.size();i++){
            System.out.print("正在下载  ====="+list.get(i));
            URL urlMp4 = new URL(list.get(i));
            URLConnection con = urlMp4.openConnection();
            con.setConnectTimeout(10*1000);
            InputStream inputStream = con.getInputStream();
            FileUtils.copyInputStreamToFile(inputStream, new File(resourcesFile + i + ".mp4"));
        }

    }
}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
爬虫(Web Crawler)是一种自动化程序,用于从互联网上收集信息。其主要功能是访问网页、提取数据并存储,以便后续分析或展示。爬虫通常由搜索引擎、数据挖掘工具、监测系统等应用于网络数据抓取的场景。 爬虫的工作流程包括以下几个关键步骤: URL收集: 爬虫从一个或多个初始URL开始,递归或迭代地发现新的URL,构建一个URL队列。这些URL可以通过链接分析、站点地图、搜索引擎等方式获取。 请求网页: 爬虫使用HTTP或其他协议向目标URL发起请求,获取网页的HTML内容。这通常通过HTTP请求库实现,如Python中的Requests库。 解析内容: 爬虫对获取的HTML进行解析,提取有用的信息。常用的解析工具有正则表达式、XPath、Beautiful Soup等。这些工具帮助爬虫定位和提取目标数据,如文本、图片、链接等。 数据存储: 爬虫将提取的数据存储到数据库、文件或其他存储介质中,以备后续分析或展示。常用的存储形式包括关系型数据库、NoSQL数据库、JSON文件等。 遵守规则: 为避免对网站造成过大负担或触发反爬虫机制,爬虫需要遵守网站的robots.txt协议,限制访问频率和深度,并模拟人类访问行为,如设置User-Agent。 反爬虫应对: 由于爬虫的存在,一些网站采取了反爬虫措施,如验证码、IP封锁等。爬虫工程师需要设计相应的策略来应对这些挑战。 爬虫在各个领域都有广泛的应用,包括搜索引擎索引、数据挖掘、价格监测、新闻聚合等。然而,使用爬虫需要遵守法律和伦理规范,尊重网站的使用政策,并确保对被访问网站的服务器负责。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值