吾爱破解 - LCG - LSG |安卓破解|病毒分析|www.52pojie.cn

 找回密码
 注册[Register]

QQ登录

只需一步,快速开始

查看: 2050|回复: 8
收起左侧

[Java 转载] 简单的静态页面java爬虫

[复制链接]
HK仅輝 发表于 2020-11-20 12:15
本帖最后由 HK仅輝 于 2020-11-20 12:43 编辑

[Java] 纯文本查看 复制代码
import org.jsoup.Connection;
import org.jsoup.Jsoup;
import org.jsoup.nodes.Document;
import org.jsoup.nodes.Element;
import org.jsoup.select.Elements;

import com.gargoylesoftware.htmlunit.WebClient;
import com.gargoylesoftware.htmlunit.html.HtmlPage;

import java.io.*;
import java.net.URL;

public class pc {

        public static void main(String[] args) throws IOException {
                // TODO Auto-generated method stub
                long t1=System.currentTimeMillis();
                //访问目标网址
                Connection connection1=Jsoup.connect("https://desk.3gbizhi.com/");
                //连接成功后获取Document对象
                Document document1= connection1.get();
                Element elementDiv=document1.selectFirst("[class=menuw mtm]");
                Element elementDiv1=elementDiv.selectFirst("[class=cl r]");//搜索class=cl r   标签
                Element elementUL=elementDiv1.selectFirst("[class=cl]");
                Elements elementLis=elementUL.select("li");//通过找到的ul 搜索ul里面的所有li标签
                for(Element elementLi:elementLis) {//遍历所有找到的li
                        Element elementA=elementLi.selectFirst("a");//搜索li里的a标签                
                        String herURL=elementA.attr("href");//把a标签中的 href属性的值获取到
                        //System.out.println(herURL);
                        Element elementADiv=elementA.selectFirst("div");//把a标签里的标签找到
                        String innerName= elementADiv.text();//把标签里的文字获取到
                        
                        
                        
                        System.out.println("创建"+innerName+"文件夹");
                        File file=new File("E://桌面//img//"+innerName);
                        if(!file.exists()){//如果文件夹不存在
                                file.mkdir();//创建文件夹
                        }
                        
                        Connection connection2=Jsoup.connect(herURL);//访问新的小图连接
                        Document document2=connection2.get();//
                        Element elementDiv2=document2.selectFirst("[class=contlistw mtw]");
                        Element elementUl=elementDiv2.selectFirst("[class=cl]");
                        Elements elementLI=elementUl.select("li");//搜索ul里的li标签
                        for(Element elementLIS:elementLI) {
                                Element elementDivName=elementLIS.selectFirst("[class=tips]");
                                String divName= elementDivName.text();
                                System.out.println("下载"+divName);

                                Element elementAA=elementLIS.selectFirst("a");//搜索li里的a标签        
                                String herURLA=elementAA.attr("href");//把a标签中的 href属性的值获取到
                                //System.out.println(herURLA);
                                
                                Connection connection3=Jsoup.connect(herURLA);//访问图片下载的连接   showcontw mtw
                                Document document3=connection3.get();        
                                Element elementDiv3=document3.selectFirst("[class=showcontw mtw]");

                                Element elementAa=elementDiv3.selectFirst("[class=bz_size_show]");//搜索li里的a标签
                                String xiaURL=elementAa.attr("href");
                                //System.out.println(xiaURL);
                                
                                
                                URL url=new URL(xiaURL);
                                InputStream is=url.openStream();
                                FileOutputStream fos=new FileOutputStream("E://桌面//img//"+innerName+"//"+divName+".jpg");
                                byte[] b=new byte[2048]; 
                                int count=is.read(b);
                                while(count!=-1) {
                                        fos.write(b,0,count);
                                        fos.flush();
                                        count=is.read(b);        
                             }                        
                                fos.close();
                                is.close();        
                        }
                }
                
                long t2=System.currentTimeMillis();
                double a=(t2-t1)/1000;
                System.out.println("下载完毕"+"用时:"+a+"s");
        }
}

免费评分

参与人数 1吾爱币 +1 热心值 +1 收起 理由
350627392 + 1 + 1 我很赞同!

查看全部评分

发帖前要善用论坛搜索功能,那里可能会有你要找的答案或者已经有人发布过相同内容了,请勿重复发帖。

BaconOle 发表于 2020-11-20 12:28
原来用c++也写过一个爬虫,加了一个用哈希表和布隆过滤器配合来防止重复抓去相同的页面,这东西得多线程,不然效率很慢。
shr123 发表于 2020-11-20 12:36
HK仅輝 发表于 2020-11-20 12:33
怎么编辑,多加些注释?
小白,没发过多少帖子

你要学会怎么插入代码而不是把代码直接搞上来
就比如这样
[Java] 纯文本查看 复制代码
.annotation system Ldalvik/annotation/InnerClass;
    accessFlags = 0x609
    name = "AnimationListener"
.end annotation
shr123 发表于 2020-11-20 12:22
 楼主| HK仅輝 发表于 2020-11-20 12:29
BaconOle 发表于 2020-11-20 12:28
原来用c++也写过一个爬虫,加了一个用哈希表和布隆过滤器配合来防止重复抓去相同的页面,这东西得多线程, ...

刚开始学着写,就懂个爬取静态页面
 楼主| HK仅輝 发表于 2020-11-20 12:33
shr123 发表于 2020-11-20 12:22
楼主重新编辑一下吧

怎么编辑,多加些注释?
小白,没发过多少帖子
头像被屏蔽
52pojie666z 发表于 2020-11-20 13:26
提示: 作者被禁止或删除 内容自动屏蔽
BaconOle 发表于 2020-11-20 19:45
HK仅輝 发表于 2020-11-20 12:29
刚开始学着写,就懂个爬取静态页面

可以从页面中用匹配字符串的方式抽取url,用url获取ip地址,向这个ip发送get请求,他又会给你返回个页面,循环往复,只要根页面选的好,理论上能爬去所有网页。
songjing 发表于 2021-9-27 17:57
感谢大哥,刚在你的基础上爬了一下我想要的素材
您需要登录后才可以回帖 登录 | 注册[Register]

本版积分规则 警告:本版块禁止灌水或回复与主题无关内容,违者重罚!

快速回复 收藏帖子 返回列表 搜索

RSS订阅|小黑屋|处罚记录|联系我们|吾爱破解 - LCG - LSG ( 京ICP备16042023号 | 京公网安备 11010502030087号 )

GMT+8, 2024-5-8 02:10

Powered by Discuz!

Copyright © 2001-2020, Tencent Cloud.

快速回复 返回顶部 返回列表