jsoup集成到app 实现爬取下载小说以及音乐在线播放视频

pc端接口的实现

  1. jsoup的主要使用方式
Connection conn =Jsoup.connect(url).validateTLSCertificates(false)
				.timeout(30000);
		/*设置请求头 为了模拟浏览器顺利爬取 同时忽略tls证书的错误(有些网站检测
			出为爬虫后直接给出证书错误 50开头的服务器错误;同时有些盗版网站服务器连接较慢 设置超时时间
			*/		
		 conn.header("Accept", "text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,*/*;q=0.8");			
		 conn.header("Accept-Encoding", "gzip, deflate, sdch");			
		 conn.header("Accept-Language", "zh-CN,zh;q=0.8");			
		 conn.header("User-Agent", "Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/55.0.2883.87 Safari/537.36");
         Document doc=conn.get();
         //猜测jsoup的链接为httpclient获取的html 并转为string
         Element aim=doc.select("#search-main > div.search-list > ul > li:nth-child(2) > a").first();
         //其中的select的选择器语法可直接从浏览器f12右击获取
         //但如果是动态生产页面 就只能自己写选择语法
         String nexturl=aim.attr("href");

2.遇到的主要问题
大多数网站暴露的接口多为http链接下的; 但是在安卓9及以上版本,默认不支持http这样的不安全链接
遇到很多网页中查询中文的编码问题

String name="text";
//utf-8转为gbk编码
byte[] temp=name.getBytes("utf-8");//这里写原编码方式
String newStr=new String(temp,"gbk");//这里写转换后的编码方式
//url编码
 String newStr=java.net.URLEncoder.encode(name, "UTF-8");//这里写转换后的编码方式

同时在爬取某网站的免费小说遇到很多问题 用了将近12h
首先返回 stl证书错误 validateTLSCertificates(false)
常见的40错误 是在确定url无错误只是单纯被检测为爬虫 ignoreHttpErrors(true)
忽略的http错误不包括50错误 于是直接选出返回码 如果不为200 直接重连
但这样爬去不到100章又被检测 怀疑是浏览时间固定 暴露 遂随机等待时间 终于成功

  if(conn.execute().statusCode()!=200){
            	 Random random = new Random();//默认构造方法
            	 int j=random.nextInt(60);
   				 TimeUnit.SECONDS.sleep(j);
   				 //再次爬取
   				 Find_Txt_BQG(secondurl,name);
   			 }

如果要直接下载 网页中 的 mp3 我没做到 用jsoup的方法实现下载 accept的格式总是出错 即使不出错也无法下载 正确 于是自制一个建议的mp3下载器

       // 获取songURL
	            URL url = new URL(DownUrl);
	            // 获得连接
	            HttpURLConnection connection = (HttpURLConnection) url.openConnection();
	            // 设置10秒的相应时间
	            connection.setConnectTimeout(10 * 1000);
	            connection.setReadTimeout(6000);
	            
	            int code = connection.getResponseCode();
	                     if (code != HttpURLConnection.HTTP_OK) {
	                    throw new Exception("文件读取失败");
	                } 
	            // 获得输入流
	                DataInputStream in = new DataInputStream(connection.getInputStream());
	                DataOutputStream out = new DataOutputStream(new FileOutputStream(Path);//path为地址+要创建的mp3文件
	                //设计缓存区
	         byte[] buffer = new byte[2048];
	         int count = 0;
	           while ((count = in.read(buffer)) > 0) {
              out.write(buffer, 0, count);
          }
	        out.close();
	       in.close();

安卓app的ui部署

1.接触安卓的ui设计的环境创建
开始使用的eclipse结果出现build——tool和tools不匹配
即使我架梯子去科学上网也无法找到匹配的tools
转用as
2.as的主要配置
gradle的下载需要架梯子
不会的程序员不是好程序员
基本都是傻瓜式制作 注意用空白activity会出现app为红×的现象
3安卓的网络访问
自安卓4版本以来网络访问需要设计在 子线程中
由于第一次接触安卓编程 并没有学会bundle的使用
我采用了类的全局变量 来正常爬取进程
4安卓9对于http不在支持
主要解决方法
rec下新建xml文件夹 建立

<?xml version="1.0" encoding="utf-8"?>
<network-security-config>
    <base-config cleartextTrafficPermitted="true" />
</network-security-config>

androidmanifest.xml下的application添加

android:networkSecurityConfig="@xml/network_security_config">

实现的为全部http都可访问 但有更安全的策略 请自行google
本来打算一周实现这个toy程序的 没想到还是用了两周 ui确实没有想象的简单

你可能感兴趣的:(jsoup集成到app 实现爬取下载小说以及音乐在线播放视频)