Python 爬蟲實戰計劃:第一周第四節作業

第三節:爬取美女圖片
爬取要求:
1. 爬取http://weheartit.com/inspirations/taylorswift網站的所有美女圖片
2.下載圖片到本地文件夾內
重點在于:
1. 異步加載地址鏈接的獲取。
鏈接地址在:瀏覽器 --> F12 --> NetWork --> XHR
向下滑動網頁,使其產生異步通信,獲得異步通信中的真實url地址
before參數沒用,可以刪除。

image.png

2. 圖片的下載:
圖片下載之前,要檢查是否已經下載過了,避免重復的下載
img_list = os.listdir('imgs') if img_name in img_list: print '文件已經下載 {}'.format(url)

代碼如下:

#coding=utf-8
import os
import time
import urllib
import requests
from bs4 import BeautifulSoup

def get_img_links(url):
    """獲取當前頁的所需的所有圖片鏈接url
        返回一個list"""
    time.sleep(1) #延遲1秒
    headers = {
        'User-Agent': ('Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko)'
                       'Chrome/54.0.2840.87 Safari/537.36')
    }
    html = requests.get(url,headers=headers).text
    soup = BeautifulSoup(html,'lxml')
    imgs = soup.select('img.entry-thumbnail')
    img_links = [img.get('src') for img in imgs]

    print '當前頁圖片鏈接個數 {}'.format(len(img_links))
    return img_links

def down_img(urls,file_name):
    """下載圖片,保存到指定文件夾內 以圖片id為文件名
        http://data.whicdn.com/images/115947809/superthumb.jpg
        圖片id為 115947809 """
    if not os.path.exists(file_name): #如果文件夾不存在,則建立一個新的文件夾
        print '文件夾不存在,重新建立 {} 文件夾'.format(file_name)
        os.mkdir(file_name)  #使用os.mkdir建立文件夾,如果需要建立嵌套文件夾 如:/a/b 則需要使用 os.makedirs()

    for url in urls:
        img_suffix = os.path.splitext(url)[1] #圖片文件后綴 .jpg
        img_name = url.split('/')[4] + img_suffix
        img_path = os.path.join(file_name,img_name)

        # 下載文件并保存到文件夾內
        # 如果文件已存在文件夾呢,則跳過,避免重復下載
        img_list = os.listdir('imgs')
        if img_name in img_list:
            print '文件已經下載 {}'.format(url)
        else:
            #urlretrieve(url,filename) 傳入文件url,文件路徑(包括文件名例如/imges/134.jpg),下載文件到本地
            urllib.urlretrieve(url, img_path)
            print '下載圖片 -- {} ,保存路徑 -- {}'.format(url, img_path)
def main():
    """主函數,啟動爬蟲"""
    #拼接前20頁的page_url
    page_url = 'http://weheartit.com/inspirations/taylorswift?scrolling=true&page={}'
    page_url_list = [page_url.format(index) for index in range(1,21)]
    print '總共 {} 頁'.format(len(page_url_list))

    #獲取每一頁中的美女圖片,并保存到文件夾imgs內
    img_urls = []
    for url in page_url_list:
        img_urls.extend(get_img_links(url))
    print '總共 {} 張圖片'.format(len(img_urls))

    down_img(img_urls, 'imgs')
    print '總共下載 {} 張圖片'.format(len(os.listdir('imgs')))


if __name__ == '__main__':
    main()

最后編輯于
?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。

推薦閱讀更多精彩內容

  • Android 自定義View的各種姿勢1 Activity的顯示之ViewRootImpl詳解 Activity...
    passiontim閱讀 173,269評論 25 708
  • 第三節:爬取小豬短租租房信息要求:1. 爬取詳情頁面內的:標題,地址,租金,第一張房源圖片鏈接,房東圖片鏈接,房東...
    4ffde5305e8f閱讀 348評論 0 1
  • 南面的山坡 小時候 爸爸媽媽 上山打柴 采擷野果 夕陽西下 炊煙裊裊 暮色低沉 南面的山坡 萬家燈火 闌珊溫暖 爸...
    澗竹聽雨閱讀 270評論 0 1
  • 先是蔣方舟在微博的推薦,加上經不住幾個損友的輪番轟炸,抱著好奇的心態去點開了奇藝姐,從此一發不可收拾。劇的名字是晝...
    以繪手記閱讀 354評論 0 3
  • 席慕容說:如何讓我遇見你,在我最美麗的時刻,為這,我已在佛前,求了五百年,求它讓我們結一段塵緣。 翻遍所有的古書竹...
    遺落星空的貓閱讀 948評論 25 47