python第一個項目:爬取一個網站的所有圖片


目的:爬取一個網站的所有圖片
調用庫:requests庫,BeautifulSoup庫
程序設計:
1.函數getHTML():用於獲取url的html文本
代碼如下

def getHTML(url):
    try:
        r=requests.get(url,headers={'user-agent':'Mozilla/5.0'})
        r.raise_for_status()
        r.encoding=r.apparent_encoding
        return r.text
    except:
        print('Fail')

該函數的注意事項是記得利用try except 的處理異常操作的方法來返回一個r.text
2.函數geturl():用於獲得圖片格式的url,在此處調用BeautifulSoup庫
代碼如下

def geturl(html,ulist):
    soup=BeautifulSoup(html,'html.parser')
    alist=soup.find_all('img')
    for i in range(len(alist)):
        ulist.append(alist[i].attrs['src'])
    print(ulist)

該段函數的注意事項是利用soup的find_all()方法來返回一個包含圖片鏈接的所有標簽列表,值得注意的是返回的這個列表的每個元素都是BF庫解析過的html文件,所以不需要再次調用BF函數解析,我自己調了好久才發現》》》,最后將列表每個標簽元素的attrs[’src‘]添加到ulist這個結果列表中
3.函數download(),再次利用requests庫的get方法,以及os庫來保存文件
代碼如下

def download(url):
    root='D:/pics/'
    path=root+url.split("/")[-1]
    print(path)
    try:
        if not os.path.exists(root):    
            os.mkdir(root)
        if not os.path.exists(path):            
            r=requests.get(url)
            r.raise_for_status()
            with open(path,'wb') as k:
                k.write(r.content)
                k.close()
                print("文件保存成功")
        else:
            print("文件已存在")
    except:
        print("失敗")

該段函數的注意事項是1.在這段函數中對程序進行了兼容性優化,那就是調用了os庫來檢查該電腦有沒有root這個根目錄,如果沒有就利用os.mkdir()方法創建這個root目錄,再將圖片文件寫入
4.最后使用一個主函數main()來調用以上三個函數來達到目的的實現
代碼如下

def main():
    ulist=[]
    url=str(input('輸入網址'))
    html=getHTML(url)
    geturl(html,ulist)
    for k in ulist:
        download(k)
        print('finish')

該段代碼的注意事項是注意到用一個for循環來調用download函數從而寫入所有圖片文件,在這里我遇到一點小麻煩,一開始我是直接將for循環加到download函數中,但是運行就會一直報錯,這里我還沒有想通第一次方法為什么不可行

這個程序對於部分網址無法進行有效的爬取,這個坑可以以后學了更深的爬蟲知識再來解決。


免責聲明!

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



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