javascript
JSoup爬虫技术
寫的都是自己的心得,轉載請標明出處: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查看,進行更細致的學習。本人程序員小白,歡迎各位朋友進行指點討論。
總結
- 上一篇: 【架构精品】阿里P9出品,必属精品
- 下一篇: python条件表达式三门课至少有一门及