欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

JSoup爬虫技术

程序员文章站 2022-05-05 14:48:54
...

写的都是自己的心得,转载请标明出处:https://blog.csdn.net/weixin_41156319/article/details/94560767

JSoup是现在比较火的爬取数据的技术,因为其简单有效,对于学习过JS,JQuery的开发人员比较容易。现在爬虫技术一般都是通过HTTPClient进行获取页面源码,然后通过JSoup进行解析HTML页面。下面就我对JSoup的理解,并列举一个小Demo进行说明。

JSoup是什么?

 JSoup是一款Java的HTML解析器,主要用来对HTML解析。

JSoup的特点?

  • JSoup可以对Html页面字符串,文件,URL进行爬取并解析HTML。
  • JSoup可以利用DOM或则CSS选择器来查找标签进行获取数据
  • JSoup可以通过attr进行标签属性的更改
  • JSoup可以通过白名单来清理用户提交的内容,防止XSS攻击

实战-爬取京东商城商品信息

本实战直接采用JSoup进行页面抓取,页面数据爬取。虽然JSoup可以完成页面获取,但有局限性,只能支持HTTP和HTTPS协议。本Demo为了方便直接采用JSoup来开发,建议采用HTTPClient来获取源码。

首先展示一下获取到的数据,演示项目只抓取了一个页面的数据。

Goods{name='六福珠宝 网络专款足金康乃馨黄金珐琅工艺吊坠女款挂坠不含项链女款 计价 GDGTBP0022 2.63克(含工费171元)', price='1236.00', imgUrl='//img10.360buyimg.com/n7/jfs/t1/33090/4/15084/173381/5d195638E6acaf2ac/57963a0dafce6025.jpg', title='六福珠宝 网络专款足金康乃馨黄金珐琅工艺吊坠女款挂坠不含项链女款 计价 GDGTBP0022 2.63克(含工费171元)', href='https://item.jd.com/46526107175.html'}
Goods{name='炫银部落 黄金项链999足金吊坠18K金套链女心形3D硬金生日礼物 999足金心形吊坠+18k金链', price='229.00', imgUrl='//img14.360buyimg.com/n7/jfs/t1/83555/14/1070/87748/5cf48a2cEc3f57365/7a5eff80eb4bb098.jpg', title='炫银部落 黄金项链999足金吊坠18K金套链女心形3D硬金生日礼物 999足金心形吊坠+18k金链', href='//item.jd.com/49209944114.html'}
Goods{name='赛菲尔 黄金项链足金 9999金吊坠花朵锁骨链女款套链 芙蓉 送礼 金重约5.7-5.82克', price='2304.00', imgUrl='//img13.360buyimg.com/n7/jfs/t4726/58/2160648948/195202/7a708868/58f9d0a5N82afe5c7.jpg', title='赛菲尔 黄金项链足金 9999金吊坠花朵锁骨链女款套链 芙蓉 送礼 金重约5.7-5.82克', href='//item.jd.com/3567923.html'}
Goods{name='鸣钻国际 水滴之恋 黄金项链套链女款 足金石榴石吊坠项坠挂坠配金链子 珍贵如你,幸运如我,满1000减100,白条6期免息,好货不贵,立即抢购,猛戳!!', price='3488.00 ', imgUrl='//img10.360buyimg.com/n7/jfs/t1/10512/15/2087/93948/5be00b94Ea54ead1f/66394c64d9dda521.jpg', title='珍贵如你,幸运如我,满1000减100,白条6期免息,好货不贵,立即抢购,猛戳!!', href='//item.jd.com/100000837950.html'}
Goods{name='周大福 礼物 依恋 肖邦链 足金黄金项链(工费:98计价) F172885 足金 45cm 约5.80g 【京东配送,急速送达】6.25-7.3热销商品低至120元,用券更省,立即抢购!', price='2447.00', imgUrl='//img10.360buyimg.com/n7/jfs/t18466/309/585753538/217120/1b00fc3d/5a97c76cNf5b706de.jpg', title='【京东配送,急速送达】6.25-7.3热销商品低至120元,用券更省,立即抢购!', href='//item.jd.com/5712110.html'}
Goods{name='周生生 CHOW SANG SANG 黄金足金万字项链百搭素链 女款 09251N 40厘米 - 2.5克 【京东物流,高效送达】6.30-7.7,热销黄金满2000减80/满3500减200/满5000减350,指定非黄金饰品每满599减60,领券再减!', price='1087.00', imgUrl='//img11.360buyimg.com/n7/jfs/t9781/93/1083934663/62687/2bc1e978/59dc92a7N9f23d3a9.jpg', title='【京东物流,高效送达】6.30-7.7,热销黄金满2000减80/满3500减200/满5000减350,指定非黄金饰品每满599减60,领券再减!', href='//item.jd.com/100001374616.html'}
Goods{name='潮宏基 黄金足金 精灵宝可梦-皮卡丘欢呼 黄金吊坠女款 定价 S 预售约7月中旬发货', price='1580.00', imgUrl='//img13.360buyimg.com/n7/jfs/t1/64860/15/2538/167601/5d0c814bEee3e7dc8/2b79a0a9a845111d.jpg', title='潮宏基 黄金足金 精灵宝可梦-皮卡丘欢呼 黄金吊坠女款 定价 S 预售约7月中旬发货', href='https://item.jd.com/29658717493.html'}
Goods{name='周生生CHOW SANG SANG 18K金黄色黄金项链百搭素链女款 04800N18KY 45厘米 【京东物流,高效送达】6.30-7.7,热销黄金满2000减80/满3500减200/满5000减350,指定非黄金饰品每满599减60,领券再减!', price='660.00', imgUrl='//img10.360buyimg.com/n7/jfs/t10525/321/1105962847/56507/60dc5a34/59dc91dbN68f6127c.jpg', title='【京东物流,高效送达】6.30-7.7,热销黄金满2000减80/满3500减200/满5000减350,指定非黄金饰品每满599减60,领券再减!', href='//item.jd.com/5483710.html'}
Goods{name='周大福(CHOW TAI FOOK)礼物 简约 足金黄金项链 F159797 68 45cm 约3.7克 【京东配送,急速送达】6.25-7.3热销商品低至120元,用券更省,立即抢购!', price='1566.50', imgUrl='//img10.360buyimg.com/n7/jfs/t16270/65/1937678174/69336/cd9050b4/5a6ec510N93c19094.jpg', title='【京东配送,急速送达】6.25-7.3热销商品低至120元,用券更省,立即抢购!', href='//item.jd.com/6308550.html'}
Goods{name='周六福 珠宝女款黄18K金项链时尚肖邦链锁骨链 KH050484 42cm 【京东配送,高效送达】7.1-7.9周六福珠宝周年店庆,指定款每满1000减60,立即抢购', price='436.00', imgUrl='//img12.360buyimg.com/n7/jfs/t21529/11/2105069081/101544/63f5552c/5b45f4e7N9de5fef5.jpg', title='【京东配送,高效送达】7.1-7.9周六福珠宝周年店庆,指定款每满1000减60,立即抢购', href='//item.jd.com/8347787.html'}
Goods{name='欧弗莱 黄金项链足金999女款镶嵌时尚心形吊坠套链锁骨链浪漫求爱生日礼物送女友送老婆 心心相印吊坠+足金项链(现货立发) 【买即送检查证书,假一罚三】【免费刻字,代写贺卡】【品质保障,放心购】', price='2315.00', imgUrl='//img13.360buyimg.com/n7/jfs/t1/58433/19/3099/110834/5d103c20E0a56630c/4df63c869a17c6c1.jpg', title='【买即送检查证书,假一罚三】【免费刻字,代写贺卡】【品质保障,放心购】', href='//item.jd.com/42971379848.html'}
Goods{name='周大福(CHOW TAI FOOK)礼物 百搭简约 足金黄金项链 F183782 48 40cm 约3.4克 【京东配送,急速送达】6.25-7.3热销商品低至120元,用券更省,立即抢购!', price='1425.00', imgUrl='//img13.360buyimg.com/n7/jfs/t16108/18/1722972571/181934/3a69828f/5a6ed044N8f161127.jpg', title='【京东配送,急速送达】6.25-7.3热销商品低至120元,用券更省,立即抢购!', href='//item.jd.com/6925068.html'}
Goods{name='鸣钻国际 倾世之恋1 黄金项链 足金吊坠套链锁骨链女款 送女友生日礼物', price='5999.00', imgUrl='//img14.360buyimg.com/n7/jfs/t1/20698/23/3221/103934/5c2595b5Ef44f73d8/fdf3fa4b93009a1b.jpg', title='鸣钻国际 倾世之恋1 黄金项链 足金吊坠套链锁骨链女款 送女友生日礼物', href='https://item.jd.com/100001626274.html'}
Goods{name='周大福(CHOW TAI FOOK)爱恋 足金黄金项链 F188335 58 约3克 45cm 【京东配送,急速送达】6.25-7.3热销商品低至120元,用券更省,立即抢购!', price='1273.00', imgUrl='//img13.360buyimg.com/n7/jfs/t18061/122/1446734739/98751/a477e3f4/5acc3ce1N21bf1d5c.jpg', title='【京东配送,急速送达】6.25-7.3热销商品低至120元,用券更省,立即抢购!', href='//item.jd.com/100002329283.html'}
Goods{name='米芙诺 黄金项链心语吊坠18K黄金套链love项链女锁骨链生日礼物订婚送女友 心语套链 长40厘米 爱的心语,闪闪亮。送玫瑰礼盒,带证书!', price='739.00', imgUrl='//img13.360buyimg.com/n7/jfs/t23458/33/578117647/325664/cd69009e/5b35cbdeNb66dbc81.jpg', title='爱的心语,闪闪亮。送玫瑰礼盒,带证书!', href='//item.jd.com/29776595913.html'}
Goods{name='周大福 礼物 ing系列 爱圆满 足金黄金项链/吊坠(工费:238计价) F206704 足金 45cm 约7.50g 【京东配送,急速送达】6.25-7.3热销商品低至120元,用券更省,立即抢购!', price='3275.50', imgUrl='//img14.360buyimg.com/n7/jfs/t18172/190/647596835/62304/71aca859/5a9cbf8aNc83f18d6.jpg', title='【京东配送,急速送达】6.25-7.3热销商品低至120元,用券更省,立即抢购!', href='//item.jd.com/5563119.html'}
Goods{name='周大福(CHOW TAI FOOK)礼物 相恋 足金黄金项链 F173873 68 45cm 约3.9克 【京东配送,急速送达】6.25-7.3热销商品低至120元,用券更省,立即抢购!', price='1647.50', imgUrl='//img11.360buyimg.com/n7/jfs/t19066/149/337920283/195653/6800409e/5a6eb93eN022cc074.jpg', title='【京东配送,急速送达】6.25-7.3热销商品低至120元,用券更省,立即抢购!', href='//item.jd.com/100000480751.html'}
Goods{name='周生生 CHOW SANG SANG 黄金足金Amore心心相印项链女款 78039N 42厘米 4.14克 【京东物流,高效送达】6.30-7.7,热销黄金满2000减80/满3500减200/满5000减350,指定非黄金饰品每满599减60,领券再减!', price='1784.00', imgUrl='//img11.360buyimg.com/n7/jfs/t9829/15/1088569000/146286/84dda978/59dc944cN654da58a.jpg', title='【京东物流,高效送达】6.30-7.7,热销黄金满2000减80/满3500减200/满5000减350,指定非黄金饰品每满599减60,领券再减!', href='//item.jd.com/5113221.html'}
Goods{name='花好玉缘 蝶恋花 18K黄金项链 金吊坠项坠套链锁骨链女款 送女友生日礼物 KJD161', price='2899.00', imgUrl='//img12.360buyimg.com/n7/jfs/t28960/135/290527453/95658/7bf5468c/5bee6661N7ec03adf.jpg', title='花好玉缘 蝶恋花 18K黄金项链 金吊坠项坠套链锁骨链女款 送女友生日礼物 KJD161', href='https://item.jd.com/100001949482.html'}
Goods{name='赛菲尔 18k金项链 女款O字十字K金项链 锁骨链女 金链子', price='347.00', imgUrl='//img10.360buyimg.com/n7/jfs/t5473/195/650144607/76431/c1c13bae/5904431fN59293854.jpg', title='赛菲尔 18k金项链 女款O字十字K金项链 锁骨链女 金链子', href='//item.jd.com/4030285.html'}
Goods{name='CEMNI千年珠宝 黄金项链 全橄榄足金999土豪项链 金链子显粗男女款 父亲节礼物 约15.12g 长约45cm 多退少补', price='5156.00', imgUrl='//img11.360buyimg.com/n7/jfs/t3193/11/4946545803/318543/7968dbd2/585a447eN62fde79c.jpg', title='CEMNI千年珠宝 黄金项链 全橄榄足金999土豪项链 金链子显粗男女款 父亲节礼物 约15.12g  长约45cm 多退少补', href='//item.jd.com/31043961616.html'}
Goods{name='晴爱 黄金项链 999足金吊坠女款双心锁骨链套链 生日礼物送女友 双心套链 约4.3-4.4g 节日礼物送女友送老婆,支持七天无理由退换货', price='1859.00', imgUrl='//img11.360buyimg.com/n7/jfs/t24391/202/1322725541/141853/32101489/5b5ac38eN2a15039a.jpg', title='节日礼物送女友送老婆,支持七天无理由退换货', href='//item.jd.com/14990255991.html'}
Goods{name='御龙金翠 黄金项链 心心相印黄金吊坠套链 足金黄金首饰 金项链女款链长42cm+3cm 黄金心心相印(光砂升级版)约5.1克 顺丰发货,免费刻字请联系客服,或者直接留言', price='1868.00', imgUrl='//img10.360buyimg.com/n7/jfs/t1/27857/3/10711/63399/5c88d6abE150b76bb/6664e32cdea7e6e4.jpg', title='顺丰发货,免费刻字请联系客服,或者直接留言', href='//item.jd.com/1647784205.html'}
Goods{name='周大福(CHOW TAI FOOK)礼物 时尚水波链 18K金项链 E121035 980 45cm 【京东配送,急速送达】6.25-7.3热销商品低至120元,用券更省,立即抢购!', price='931.00', imgUrl='//img10.360buyimg.com/n7/jfs/t19720/73/584000607/178264/935d52d/5a97c5c5N10c1d476.jpg', title='【京东配送,急速送达】6.25-7.3热销商品低至120元,用券更省,立即抢购!', href='//item.jd.com/5264080.html'}
Goods{name='先恩尼 黄金丘比特吊坠 女款足金项链 小天使黄金吊坠 足金吊坠 黄金项链 黄金饰品 爱情礼物', price='1560.00', imgUrl='//img13.360buyimg.com/n7/jfs/t1/57930/27/2179/60013/5cff2b95E48155a1f/70623432f4d8b8f3.jpg', title='先恩尼 黄金丘比特吊坠 女款足金项链 小天使黄金吊坠 足金吊坠 黄金项链 黄金饰品 爱情礼物', href='https://item.jd.com/1017375403.html'}
Goods{name='周大福(CHOW TAI FOOK)因你而幸lucky字母足金黄金项链 吊坠 F217504 108 45cm 约6克 【京东配送,急速送达】6.25-7.3热销商品低至120元,用券更省,立即抢购!', price='2538.00', imgUrl='//img10.360buyimg.com/n7/jfs/t17158/131/1487123533/124382/aba706ab/5acc37dcNa396117d.jpg', title='【京东配送,急速送达】6.25-7.3热销商品低至120元,用券更省,立即抢购!', href='//item.jd.com/7135715.html'}
Goods{name='周大福(CHOW TAI FOOK)简约 足金黄金项链 F132516 108 45cm 约9.0克 【京东配送,急速送达】6.25-7.3热销商品低至120元,用券更省,立即抢购!', price='3753.00', imgUrl='//img12.360buyimg.com/n7/jfs/t17683/296/1440839068/189380/cdd6356c/5acc37c4N09effc41.jpg', title='【京东配送,急速送达】6.25-7.3热销商品低至120元,用券更省,立即抢购!', href='//item.jd.com/7135717.html'}
Goods{name='周大福 简约 足金黄金项链(工费:168计价) F178119 足金 45cm 约9.00g 6.28-7.3日追逐群星,黄金低至238元,用券更省猛戳', price='3813.00', imgUrl='//img12.360buyimg.com/n7/jfs/t3121/176/2913518645/237322/cc8627a0/57e8bbe7Na2e6e439.jpg', title='6.28-7.3日追逐群星,黄金低至238元,用券更省猛戳', href='//item.jd.com/13020508772.html'}
Goods{name='赛菲尔 黄金项链足金 9999金吊坠双心扉锁骨链女款套链 新品送礼', price='1651.00', imgUrl='//img12.360buyimg.com/n7/jfs/t1/59718/17/3388/83792/5d197805E0680247d/74cb083f4a414aee.jpg', title='赛菲尔 黄金项链足金 9999金吊坠双心扉锁骨链女款套链 新品送礼', href='//item.jd.com/3998872.html'}
Goods{name='翠广源 黄金项链女款999足金吊坠女士爱心形锁骨链套链 送女友、老婆礼物 慕心足金吊坠+黄金项链(总金重约2.4g) 顺丰航空1-2天达、六期免息、支持京东物流货到付款,一对一配送证书、假一罚十、七天无理由退换', price='1190.00', imgUrl='//img12.360buyimg.com/n7/jfs/t1/35170/18/4424/100884/5cbbe4b4E133c1fda/72384c26d068e50c.jpg', title='顺丰航空1-2天达、六期免息、支持京东物流货到付款,一对一配送证书、假一罚十、七天无理由退换', href='//item.jd.com/45919300547.html'}

项目代码如下:

public static void main(String[] args) throws IOException {
        String url = "https://search.jd.com/Search?keyword=%E9%BB%84%E9%87%91%E9%A1%B9%E9%93%BE&enc=utf-8";
        //商品集合
        List<Goods> goods = Lists.newArrayList();
        //获取Dom并解析
        Connection conn = Jsoup.connect(url);
        // 修改http包中的header,伪装成浏览器进行抓取
        conn.header("User-Agent",user-agent);
        Document doc = conn.get();
        Elements liElements = doc.getElementsByClass("gl-item");
        for(Element e : liElements) {
            Goods good = new Goods();
            Elements e1 = e.children();
            String title = e1.get(0).getElementsByTag("div").get(0).getElementsByTag("a").attr("title");
            String href = e1.get(0).getElementsByTag("div").get(0).getElementsByTag("a").attr("href");
            String imgUrl = e1.get(0).getElementsByTag("div").get(0).getElementsByTag("img").attr("source-data-lazy-img");

            String price = e.getElementsByClass("p-price").get(0).getElementsByTag("i").text();
            String name = e.getElementsByClass("p-name").get(0).getElementsByTag("a").text();
            good.setHref(href);
            good.setImgUrl(imgUrl);
            good.setName(name);
            good.setPrice(price);
            good.setTitle(title);
            goods.add(good);
        }
        for (Goods goods : goodsInfos){
                System.out.println(goods);
            }
    }
代码中url含带中文直接进行转码

代码中conn.header()方法中设置的User-Agent是为了让服务器伪装成浏览器进行访问。可以使用JS代码来查看自己浏览器user-agent

通过javascript:alert(navigator.userAgent)来查看。

在爬取数据时查看待爬取数据源码规律,进行查看找到最佳爬取数据使用的获取标签内容方法。

上面的代码是自己习惯所向,每个人获取标签属性都不一样。比如我们获取界面的title时可以直接使用doc.title()。使用HTTPClient可以通过传输页面访问条件进行多页面爬取。爬取任务一般时间较长,可以放在线程中执行,为了演示方便没有写在线程中。方法多种多样。JSoup最重要的三个类就是:JSoup,Document,Element类,三者方法的具体API下面我已展示出来:

JSOUP类API    Document类API  Element类API

有需要的读者可以进入官网API查看,进行更细致的学习。本人程序员小白,欢迎各位朋友进行指点讨论。