前幾天有位微信讀者問我一個(gè)爬蟲的問題,就是在爬去百度貼吧首頁的熱門動態(tài)下面的圖片的時(shí)候,爬取的圖片總是爬取不完整,比首頁看到的少。原因他也大概分析了下,就是后面的圖片是動態(tài)加載的。他的問題就是這部分動態(tài)加載的圖片該怎么爬取到。
分析
他的代碼比較簡單,主要有以下的步驟:使用BeautifulSoup庫,打開百度貼吧的首頁地址,再解析得到id為new_list標(biāo)簽底下的img標(biāo)簽,最后將img標(biāo)簽的圖片保存下來。
headers = { 'User-Agent':'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/51.0.2704.103 Safari/537.36'}data=requests.get("https://tieba.baidu.com/index.html",headers=headers)html=BeautifulSoup(data.text,'lxml')前面提到過,有部分圖片是動態(tài)加載的,那么首先我們得弄清楚,這部分圖片是怎么動態(tài)加載的。在瀏覽器中打開百度貼吧的首頁,可以明顯的看到,在往下滾動滾動條的時(shí)候,當(dāng)滾動到底部的時(shí)候,滾動條縮短了,并向上移動了一段距離。這個(gè)現(xiàn)象也正是有DOM元素動態(tài)的添加到了html文檔的一個(gè)表現(xiàn)。動態(tài)加載數(shù)據(jù)無非就是ajax請求,而ajax本質(zhì)上就是XMLHttpRequest請求(簡稱xhr)。在谷歌瀏覽器中,我們可以通過開發(fā)者工具的network面板來監(jiān)測xhr請求。
剛打開首頁時(shí)的xhr請求,這里的請求都和要爬取的圖片無關(guān)。

滾動條向下第1次滾動到底部,這里請求的是第20-40條熱門動態(tài),包含要爬取圖片。

滾動條向下第2次滾動到底部,這里請求的是第40-60條熱門動態(tài),包含要爬取圖片。并且返回的的has_more:false表明沒有跟多數(shù)據(jù)了。
新聞熱點(diǎn)
疑難解答
圖片精選