所謂圖片爬蟲,就是從互聯網中自動把對方伺服器上的圖片爬下來的爬蟲程式。有些圖片是直接在html文件裡面,有些是隱藏在JS文件中,在html文件中只需要我們分析源碼就能得到如果是隱藏在JS文件中,那麼就需要進行抓包分析,這兒先只講分析html源碼得出圖片,註意 這兒我們需要讀取的是高清原圖,不是經過網... ...
所謂圖片爬蟲,就是從互聯網中自動把對方伺服器上的圖片爬下來的爬蟲程式。
有些圖片是直接在html文件裡面,有些是隱藏在JS文件中,在html文件中只需要我們分析源碼就能得到
如果是隱藏在JS文件中,那麼就需要進行抓包分析,這兒先只講分析html源碼得出圖片,
註意 這兒我們需要讀取的是高清原圖,不是經過網站處理過的小圖片。
首先需要根據網址進行分析,分析出每一類商品的第幾頁第幾頁的網址之間的關聯進行自動載入指定頁碼(例如淘寶每下一頁為鏈接中s加44)
然後查看頁面源碼,找到圖片對應的鏈接,分析剔除掉後加修飾過的內容,將關鍵的內容截取在源碼中進行搜索即可找到圖片的原始地址
也就是源碼的地址。根據這個就能得到所要構造的正則表達式。
然後直接上代碼
import urllib.request import re import urllib.error keyname = "短裙" key = urllib.request.quote(keyname) #進行編碼 #偽裝瀏覽器 (因為淘寶能夠識別是否為爬蟲程式) headers = ("User-Agent","Mozilla/5.0 (Windows NT 6.1; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/62.0.3202.94 Safari/537.36") opener = urllib.request.build_opener() opener.addheaders = [headers] #將opener添加為全局 urllib.request.install_opener(opener) #要爬取多少頁那麼進行多少次迴圈 for i in range(0,2): url = "https://s.taobao.com/search?q="+key+"&imgfile=&js=1&stats_click=search_radio_all%3A1&initiative_id=staobaoz_20171209&ie=utf8&bcoffset=4&ntoffset=4&p4ppushleft=1%2C48&s="+str(i * 44) #先對所在的頁面的主頁進行爬取讀取內容,也就是讀取源碼 data = urllib.request.urlopen(url).read().decode("utf-8","ignore") #構造正則表達式 pattern = 'pic_url":"//(.*?)"' #在當前頁根據正則進行查找,查找到的所有連接存儲為一個list imagelist = re.compile(pattern).findall(data) #遍歷列表進行每個圖片的存儲到本地文件夾 for j in range(0,len(imagelist)): thisimg = imagelist[j] thisimageurl = "http://"+thisimg file = "E://pythoncode/taobaoimg1/"+"b"+str(i)+str(j)+".jpg" urllib.request.urlretrieve(thisimageurl,file)
同理進行一個千圖網(http://www.58pic.com/)的高清原圖的爬取
第一步也是分析網站的源碼找到規律實現下一頁的載入,然後進行圖片鏈接的分析得到真實高清原圖的網址鏈接構建正則表達式
先對當前頁進行爬取,從爬取的內容中使用正則進行頁面查找,再對找到的每一個圖片鏈接進行爬取存儲到本地文件夾中。
直接上代碼
import urllib.request import urllib.error import re key = "chengshi" proxy = urllib.request.ProxyHandler({"http":"202.96.142.2:3128"}) opener = urllib.request.build_opener(proxy,urllib.request.HTTPHandler) urllib.request.install_opener(opener) for i in range(1,2): url = "http://www.58pic.com/tupian/"+key+"-0-0-"+str(i)+".html" data = urllib.request.urlopen(url).read().decode("utf-8","ignore") pattern = '"(http://pic.qiantucdn.com/58pic/.*?)!' imagelist = re.compile(pattern).findall(data) # print(imagelist) for j in range(0,len(imagelist)): thisurl = imagelist[j] file = "E:/pythoncode/qiantu/"+str(i)+str(j)+".jpg" urllib.request.urlretrieve(thisurl,file)