所謂圖片爬蟲,就是從互聯網中自動把對方服務器上的圖片爬下來的爬蟲程序。
有些圖片是直接在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)