Python 1-4

weixin_34249678發表於2016-06-24

注意事項

  • 非同步載入
  • 如何保持檔案
  • 設定代理
import requests
from bs4 import BeautifulSoup
import urllib.request

base_path = '/Users/XXX/python/Swift/'
base_url = 'http://weheartit.com/inspirations/taylorswift?scrolling=true&page='

# 設定代理,網上百度下具體的IP即可。代理不太穩定,測試過程中,換了好幾個代理才成功
proxies = {'http':'http://121.42.178.60:1080'}

# 模擬登入
headers = {
    'User-Agent':'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_11_5) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/50.0.2661.102 Safari/537.36'
}

# 確定要爬取的頁數,並生成對應的url列表
def get_img_url(num):
    # 定義一個空列表,存放要下載照片的url
    img_urls = []
    for page_num in range(1, num+1):
        # 字串連線"+"
        url = base_url + str(page_num)
        web_data = requests.get(url, headers = headers, proxies = proxies)
        if web_data.status_code == 200:
            soup = BeautifulSoup(web_data.text, 'lxml')
            imgs = soup.select('img.entry-thumbnail')
            print(imgs)
            for img in imgs:
                img_urls.append(img.get('src'))
        else:
            print('伺服器異常')
    print(len(img_urls), 'imgs should be downloaded')
    return img_urls


def get_img(url):
    img_name = base_path + url.split('/')[-2] + '.' + url.split('.')[-1]    # split() 函式對url分割,獲取檔名

    # 方法一:通過urllib.request.urlretrieve方式寫資料,失敗
    # urllib.request.urlretrieve(url,img_name) # img_name表示圖片的路徑(資料夾的路徑+圖片的命名)

    # 方法二
    # 獲取到的圖片,如何轉為 二進位制 儲存到本地。content是二進位制格式的資料,text是自動根據 HTTP 響應頭部的編碼型別解碼為 unicode 的結果
    img_data = requests.get(url, headers = headers, proxies = proxies)
    with open(img_name, "wb") as fs:
        fs.write(img_data.content)

for url in get_img_url(6):
    get_img(url)

'''
1、非同步載入
通過 JS 實現動態載入資料,在與當前 HTML 頁面的載入並不一起進行,比如同時進行,或在載入完當前頁面後,在下拉頁面時載入,這是通過 JS 的 XHR 實現。
如果是通過 XHR 在當前頁面載入完後的非同步載入,可以chrome 瀏覽器中,右擊頁面-檢查-network-XHR,然後下拉頁面進行非同步載入,能夠看到載入的請求url、頭部和返回的動態資料。同時,在Elements中可以看到 HTML 元素在動態變化

2、請求的圖片儲存本地
獲取到的圖片,如何轉為 二進位制 儲存到本地。content是二進位制格式的資料,text是自動根據 HTTP 響應頭部的編碼型別解碼為 unicode 的結果
img_data = requests.get(img_url)
with open(str(img_name), 'wb') as f:
    print type(img_data.content)
    f.write(img_data.content)

3、黴黴的網站需要翻牆設定代理
4、關於圖片的格式型別:jpg、webp
WebP格式,谷歌(google)開發的一種旨在加快圖片載入速度的圖片格式。圖片壓縮體積大約只有JPEG的2/3,並能節省大量的伺服器頻寬資源和資料空間。Facebook Ebay等知名網站已經開始測試並使用WebP格式。
但WebP是一種有失真壓縮。相較編碼JPEG檔案,編碼同樣質量的WebP檔案需要佔用更多的計算資源。
桌面版Chrome可開啟WebP格式。
'''

相關文章