Python爬蟲實戰:一行代碼教你輕鬆爬取“百度貼吧圖片”

分享一個比較核心的技術問題;爬蟲!今天分享的是我朋友最近公眾號書寫的一篇內容之一,希望你喜歡。就從今天的分享教大家怎麼爬取百度貼吧,爬取自己想要的。快來吧!

Python爬蟲實戰:一行代碼教你輕鬆爬取“百度貼吧圖片”

1、目標:

  • 爬取貼吧每一貼,樓主圖,並保存。
  • 由於圖片大多是樓主發的,如果全部查找會浪費很多時間。

2、分析

我選擇爬取的貼吧為圖吧,你們可以選擇自己想要爬取的貼吧。

3、獲取頁面

我們將爬取頁面的代碼寫成一個get_html()方法,給他傳入url參數

代碼如截圖所示:

Python爬蟲實戰:一行代碼教你輕鬆爬取“百度貼吧圖片”

獲取正常,沒問題。

我們用chrome的開發者模式來分析每個貼的連接,用定位定位一個帖子,這樣方便我們快速的去查找我們想要的信息。

Python爬蟲實戰:一行代碼教你輕鬆爬取“百度貼吧圖片”


4、利用正則表達式找出我們想要的連接

  • 通過查找,我們發現每個貼都是在class=“col2_right j_threalist_li/_right”下
  • 我們可以讓他成為一個標誌位,通過它繼續往下找,他有兩個類名,我們選擇後者即可。

.*?(.*?)

返回的是一個數組,為了好看我們以字典的方式返回,用yield我們可以理解為返回值,在python基礎裡會講,我們將獲取的頁面作為參數傳進去,實現get_url方法。

如圖所示:

Python爬蟲實戰:一行代碼教你輕鬆爬取“百度貼吧圖片”

我們來打印一下,看一下獲取的是什麼?

結果如圖:

Python爬蟲實戰:一行代碼教你輕鬆爬取“百度貼吧圖片”

很明顯,我們需要來拼接一下,獲取完整的url。

點擊一個進入,可以發現,url是這樣的:https://tieba.baidu.com/p/5768252315

我們得到了後半部分,那就容易了,只需要拼接一下,得到的結果就變成了:

Python爬蟲實戰:一行代碼教你輕鬆爬取“百度貼吧圖片”

得到鏈接後,我們需要再次發送請求,獲取到每個貼的內容,即調用我們上面寫好的get_html()方法即可。


5、找到每個帖子樓主發的圖片鏈接

同樣的方式,打開開發者模式,找的圖片,找出標誌位,寫出正則,這裡就不詳細說了,正則為:

實現get_img_url()方法:

Python爬蟲實戰:一行代碼教你輕鬆爬取“百度貼吧圖片”

結果圖為:

Python爬蟲實戰:一行代碼教你輕鬆爬取“百度貼吧圖片”

6、獲取到圖片地址後,自然是要下載下來實現write_to_file()方法

下載圖片,在上篇文章上已經有實例,

連接:python第二大神器requests

這裡直接上代碼圖:

Python爬蟲實戰:一行代碼教你輕鬆爬取“百度貼吧圖片”

裡面的正則是用來作為圖片名字的,time.sleep(2)是為了爬取慢點

太快會無響應或者報錯。

我們來修改一下,來爬取第一頁貼中的所有貼,獲取樓主貼的總頁數

和上面同樣的方式找到總頁數,並寫出獲取總頁數的正則:

實現get_ye方法,同時點擊只看樓主,url會多出see_lz=1

如圖:


Python爬蟲實戰:一行代碼教你輕鬆爬取“百度貼吧圖片”

7、由於有些貼吧的貼子很多,我們就選擇獲取前十頁內容,當然你也可以寫個方法換取所有頁

這裡就不實例了,在貼吧裡點擊下一頁我們發現url多出pn=50,由此我們知道50為偏移量,即一頁有50個帖子pn=n 是n+1到n+50帖子。

8、整合一下代碼,我們用main()方法來調用上面的方法。

如圖:

Python爬蟲實戰:一行代碼教你輕鬆爬取“百度貼吧圖片”

Python爬蟲實戰:一行代碼教你輕鬆爬取“百度貼吧圖片”

爬取百度貼吧圖片的源碼已經放在雲盤,如果需要源碼請私信我,領取源碼資料;


Python爬蟲實戰:一行代碼教你輕鬆爬取“百度貼吧圖片”

如果你覺得我分享的還可以,可以私信我,關注我,私信可以領取python相關學習資料哦:例如“人工智能”、“爬蟲”、“數據庫”、“web開發”等類似學習參考資料書籍。關注小編,私信即可。

1、如何獲取

2、關注小編

私信小編:回覆 “學習資料” 即可領取資料

頭條怎麼私信

點擊頭條,點擊右下角“我的”

在個人界面點擊關注,如果你關注了,點擊“小杆貨”就可以了

私信回覆:“學習資料”就可以了 但是你要先關注我哦~





分享到:


相關文章: