24
2019
10

java网页爬虫

由于项目需求,综合了几种考虑方案,准备使用java 爬虫进行数据的获取,不用自己去费劲的想逻辑的实现

使用java爬虫之前,我们必须要掌握的知识:

1、对前端HTML的元素有一定的认识

2、使用httpclient

3、jsoup 工具进行HTML的解析判断

4、能够使用一款网络抓包工具

抓包工具的使用请参考:https://www.cnblogs.com/miantest/p/7289694.html 

 jsoup 的api的地址:http://www.open-open.com/jsoup/attributes-text-html.htm    -->语法规则只要会HTML元素属性,jquery,javascript 就会玩它

介绍几个常用的吧:  

1、将抓取到的html文本转为JSOUP 可操作的Document

Document doc=Jsoup.parse(你的html文本);2.select 元素的使用(有很多哦):注意点是只有属性才会被[]括起来,都可以进行混合使用的如select("div#id")doc.select("a[target][title]")  -------> 匹配 a 标签下的 带有target 和 title  属性的标签doc.select("div")   ------------>标签名查找,匹配所有带div标签的元素doc.select("[title]") --------->属性查找,匹配属性带有title的元素doc.select(".classname")-------->class名称查找,匹配class 名称为classname的元素doc.select("#id")-----------> id查找,匹配id 名为id的元素doc.select("[title=斗图网  RSS Feed]")-------->利用属性值进行查找,匹配title=斗图网  RSS Feed 的元素

3、获取属性值与文本的方法

element.attr("name") ------->获取元素中的name属性值

element.text()

element.html()----------->获取元素的文本内容

4、也有很多我们javascript操作元素的选择器

.getElementById(); -----id 查

.getElementsByClass(); -----class 查

.getElementsByAttribute();------属性查

.getElementsByAttributeValue(key, value) -------属性值查

..........等等,次数省略一万字

pom依赖导入:

是为了让我们方便快捷的操作HTML中的元素

<dependency>

    <groupId>org.jsoup</groupId>

    <artifactId>jsoup</artifactId>

    <version>1.11.2</version>

</dependency>

httpclient :可以让我们便捷的进行post 与get 的请求方式

我们现在进行爬取斗图网的图片数据

1、获取斗图网的整个HTML页面并转换为Document  ,我们需要分析图片是放在那个标签结构下的,需要看HTML代码分析

//jsoup 提供的get请求,底层使用的是java.net包url

Document doc = Jsoup.connect("http://www.bbsnet.com/").get();

//select 选择器组合使用,抓取classname为fixed-height 元素下的带有targer,title属性的a 标签

Elements el=doc.select(".fixed-hight a[target][title]");

结果如下:

我们将它的图片地址以及title取出来进行保存(或者数据库保存),我这里放到list里

Map<String,String>map =new HashMap<>();

        List<Map<String,String>> lis =new ArrayList<Map<String,String>>();

        for(Element ee:el) {

            //有图片的保存

            if(ee.select("img").size()!=0) {

                //System.out.println(ee);

                //放入src属性

                map.put("url", ee.select("img").get(0).attr("src"));

                map.put("title", ee.attr("title"));

                lis.add(map);

            }

        }

结果如下:

[{title=往后余生表情包 [往后余生 做饭是你 黄脸婆也是你 生娃是你...], url=http://wx4.sinaimg.cn/mw690/6a04b428gy1fuqhu4jf1bg206y06yt90.gif}, {title=莲花表情包 [心如止水 大彻大悟 说你妈呢?], url=http://wx4.sinaimg.cn/mw690/6a04b428gy1fuqhwl9remg205k05k0t3.gif}, {title=熊猫人敷面膜表情包 [玻尿酸、火山泥、水密码、膜法世家????], url=http://wx4.sinaimg.cn/mw690/6a04b428gy1fuqjcir4l3g202s02yglm.gif}, {title=国宝大熊猫表情包 [老板,拿瓶阔落 要冰镇的], url=http://wx4.sinaimg.cn/mw690/6a04b428gy1fuqhv5owxxg206o06oq3t.gif}, {title=采访宋民国表情包 [当事人:现在就是后悔,非常后悔], url=http://wx4.sinaimg.cn/mw690/6a04b428gy1fukscrhp0dg209q07wdgz.gif}, {title=精神病表情包 [我是精神病三号], url=http://wx4.sinaimg.cn/mw690/6a04b428gy1fuksdeqi1fg20b30dvq3v.gif}, {title=派大星表情包 [一套迷你版GIF派大星和海绵宝宝], url=http://wx4.sinaimg.cn/mw690/006HJgYYgy1fth9h9lymxg302i02igm8.gif}, {title=狗子表情包 [表面稳如狗 内心慌得一批], url=http://wx4.sinaimg.cn/mw690/6a04b428gy1fuksdtw524g209q09qabw.gif}, {title=金馆长小猪表情包 [简直跟猪一样 大蠢猪!], url=http://wx4.sinaimg.cn/mw690/6a04b428gy1fukror6ntlg208c086t9q.gif}, {title=海绵宝宝和派大星表情包 [交个朋友 谈个恋爱], url=http://wx4.sinaimg.cn/mw690/6a04b428gy1fuflfxcks4g20ci099k14.gif}, {title=小坏坏表情包[带字和不带字小坏坏]全套200张, url=http://wx4.sinaimg.cn/mw690/6a04b428gy1fufjp85a5bg201o01o3ya.gif}, {title=唯美的表情包 [蝉鸣整个夏天,你只用了一句再见], url=http://wx4.sinaimg.cn/mw690/6a04b428gy1fuflgkntv0g20cq076qp2.gif}, {title=表示很穷的表情包 [规则长方体固体物质空间移动工程师], url=http://wx4.sinaimg.cn/mw690/006HJgYYgy1fu95ht8wicg30g40lp10u.gif}, {title=跳钢管舞表情包 [小兔子、小猫、黄狗、doge一起跳起来!], url=http://wx4.sinaimg.cn/mw690/006HJgYYgy1fu95igkfklg304w040ton.gif}, {title=粉红猪猪拿枪表情包 [我是一个没有感情的杀手 我也是], url=http://wx4.sinaimg.cn/mw690/006HJgYYgy1fu95hgp1j9g308c07edgm.gif}, {title=权律二文字表情包 [今天除了皮 又啥也没干], url=http://wx4.sinaimg.cn/mw690/006HJgYYgy1fu95g0xu1kg30c80c80us.gif}, {title=敷面膜表情包 [我是一个没有感情的骚货], url=http://wx4.sinaimg.cn/mw690/006HJgYYgy1fu539p3tcbg309q09qdhg.gif}, {title=可爱小脚转动表情包 [看我抖jio的姿势 就知道我多社会], url=http://wx4.sinaimg.cn/mw690/006HJgYYgy1fu539htqd1g306o06on5e.gif}, {title=脱发表情包 [没见过空气刘海吗?], url=http://wx4.sinaimg.cn/mw690/006HJgYYgy1fu539c7pj4g306o06ot8w.gif}, {title=布朗熊三连表情包 [我 去你 妈的 摔个兔子], url=http://wx4.sinaimg.cn/mw690/006HJgYYgy1ftxx6puoe3g30qo0pidpq.gif}, {title=跳舞小表情包 [一个网友收藏了多年的萌系刷屏小表情], url=http://wx4.sinaimg.cn/mw690/6a04b428gy1ftvzlqo580g201e01eaa5.gif}, {title=单身表情包带字 [谈什么恋爱 是零食不好吃吗?], url=http://wx4.sinaimg.cn/mw690/6a04b428gy1ftvzlssmo4g209q09bwfi.gif}, {title=熊猫吃薯片表情包 [吃着薯片喝着老干妈、可乐、奶茶...], url=http://wx4.sinaimg.cn/mw690/6a04b428gy1ftvzlm18dtg204g03h3yn.gif}, {title=旭旭宝宝表情包GIF[套你猴子 装逼王我当定了]全套120张, url=http://wx4.sinaimg.cn/mw690/6a04b428gy1ftvz8jh0apg20g40g4aem.gif}, {title=跳动小人表情包 [一组萌萌哒的蹦跶动态表情包], url=http://wx4.sinaimg.cn/mw690/6a04b428gy1ftu1voty1vg2020020t8t.gif}, {title=水果流泪表情包 [今天我是臭屁慢狗,我不流泪只是骂人], url=http://wx4.sinaimg.cn/mw690/6a04b428gy1ftu24u4xnng209q09qgmg.gif}, {title=哈士奇emmm表情包 [二哈emmm...... prprpr......原图系列], url=http://wx4.sinaimg.cn/mw690/6a04b428gy1ftu1vwz8ogg205u072gys.gif}, {title=gavin thomas表情包 [被安排的明明白白], url=http://wx4.sinaimg.cn/mw690/6a04b428gy1fts9nsppo8g209p09qgns.gif}, {title=呐给你表情包 [呐~给你根香蕉], url=http://wx4.sinaimg.cn/mw690/6a04b428gy1fts9hto1vdg202i02imx0.gif}, {title=吃鸡表情包 [大哥快递不?], url=http://wx4.sinaimg.cn/mw690/6a04b428gy1fts9fc8mgbg20br0bhq4f.gif}]

总之,很简单,只要懂HTML中的元素就可以很轻松的使用jsoup抓取数据、因为jsoup 的语法也是遵守MTML中的语法的。下一节,我将通过爬虫进行模拟网站登录---

jsoup  连接的常用操作

Connection con2 = Jsoup

                .connect("https://passport.csdn.net/account/login");

        con2.header("User-Agent",

                "Mozilla/5.0 (Windows NT 6.1; WOW64; rv:29.0) Gecko/20100101 Firefox/29.0");

        

        // 设置cookie和post上面的map数据

        Response login = con2.ignoreContentType(true).method(Method.POST)

                .header("Referer","https://www.csdn.net/ ")

                .data(datas)//传入提交的数据    我们form表单的数据

                .cookies(rs.cookies())//传入的cookie

                .execute();

原文链接:https://www.qiquanji.com/post/8411.html

本站声明:网站内容来源于网络,如有侵权,请联系我们,我们将及时处理。

gzh

微信扫码关注

更新实时通知

« 上一篇 下一篇 »

发表评论:

◎欢迎参与讨论,请在这里发表您的看法、交流您的观点。