python應用:爬蟲實例(動態網頁)


以爬取搜狗圖片為例,網頁特點:采用“瀑布流”的方式加載圖片,圖片的真實地址存放在XHR中

 1 #-*-coding:utf8-*-
 2 import requests
 3 import urllib
 4 import json
 5 import math
 6 import os
 7  
 8 class SG:
 9     def __init__(self,pic_num):
10         self.num = pic_num
11         self.user_agent = 'Mozilla/5.0 (Windows NT 6.1; W…) Gecko/20100101 Firefox/61.0'      #請求頭屬性(模擬瀏覽器訪問)
12         self.headers = {'User-Agent' : self.user_agent}
13 
14     def get_img(self):
15         end = int(math.ceil(float(self.num)/48))
16         #print end
17         name = 1
18         #獲取圖片真實地址並保存到本地文件夾
19         for start in range (0,end):
20             url = 'http://pic.sogou.com/pics?query=%B1%DA%D6%BD&mode=1&dm=4&cwidth=1920&cheight=1080&start='+str(start)+'&reqType=ajax&reqFrom=result&tn=0'
21             imgs = requests.get(url,params=self.headers)
22             #print imgs
23             #搜狗圖片真實地址存放在XHR中,訪問發現是json文件,故解析json文件
24             jd = json.loads(imgs.text)
25             jd = jd['items']    #所有圖片的信息都存在item數組中
26             imgs_url = []
27             for j in jd:
28                 if "=" not in j['pic_url']:  #圖片真實地址則存放在item元素中pic_url中
29                     imgs_url.append(j['pic_url'])
30                 else:
31                     print j['pic_url']
32             #print len(imgs_url)
33             
34             for img_url in imgs_url:
35                 #新建文件夾
36                 if not os.path.exists('picture'):
37                     os.makedirs('picture')
38                 print img_url
39 
40                 #保存圖片到本地文件夾
41                 print('**********'+str(name)+'_1.jpg*********'+'      Downloading')
42                 #方法1
43                 urllib.urlretrieve(img_url,'picture\\'+str(name)+'_1.jpg')
44                 
45                 print('**********'+str(name)+'_2.jpg*********'+'      Downloading')
46                 #方法2  'wb'以二進制方式寫數據
47                 with open('picture\\'+str(name)+'_2.jpg','wb') as f:
48                     f.write(requests.get(img_url,params=self.headers,allow_redirects=False).content)
49 
50                 name += 1
51                         
52         print('Download complete!')
53 
54 SG(100).get_img()
55                 
56                 

 使用方法二時,如果使用參數allow_redirects=False,容易導致下載內容為空的情況;如果不使用該參數(默認是True),則容易導致頁面重定向過多的錯誤。具體使用時,根據情況選擇是否使用


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM