我們在瀏覽百度貼吧時,會看到許多“神圖”,我們想要保存,這個時候我們就會下載到本地,當我們學習了爬蟲之后,就沒有必要一個一個下載了,可以使用爬蟲自動下載全部圖片。
下面隨便指定一個貼吧頁:http://tieba.baidu.com/p/3242594565,爬取頁面上的圖片。首先對這個帖子進行觀察,我們會發現這個帖子有許多頁,所以就可以使用pn=%d的方法來爬取后面頁數的帖子,然后想到爬取圖片需要機芯進行命名,並把它們保存在本地
查看一下要爬取的網址信息:http://tieba.baidu.com/p/3242594565
看下界面,發現有14頁
然后找到要爬取的圖片,查看圖片的地址信息。
這里可以看到圖片地址為:https://imgsa.baidu.com/forum/w%3D580/sign=998a3367c98065387beaa41ba7dca115/6c751b0fd9f9d72a6ac0a634d72a2834349bbb28.jpg
可以使用正則表達式進行爬取 ,可以使用https://imgsa.*?\.jpg的格式。
然后就是編寫代碼進行爬取了,這里的思路是:
先獲得網頁的代碼,然后通過網頁代碼獲取圖片,再將圖片命名保存就可以了。
代碼如下:
import re import urllib.request #獲取網址信息 def getHtml(url): page = urllib.request.urlopen(url) html = page.read() return html #爬取圖片 def getImg(html): reg = r'src="(https://imgsa.*?\.jpg)"' imgre = re.compile(reg) imList = re.findall(reg, html.decode('utf-8')) #爬取圖片命名 x=0 for i in imList: print(i) print(x) urllib.request.urlretrieve(i, '%s.jpg' % x) x += 1 #爬取的貼吧網址 url = "http://tieba.baidu.com/p/3242594565?pn=" #由於貼吧有14頁,爬取的圖片較多,這里先爬取一個網址的圖片,圖片保存在當前文件夾里 for k in range(1, 2): ul = url+str(k) print(ul) html = getHtml(ul) getImg(html)
在Pycharm上運行代碼:
查看文件夾,發現新增了下載的圖片,並且都已經命名:
這樣就成功爬取了貼吧上的圖片。