1. 程式人生 > >爬蟲實踐---電影排行榜和圖片批量下載

爬蟲實踐---電影排行榜和圖片批量下載

.com sts mat 模式 filename ise 主演 any cto

1.目標網址:http://dianying.2345.com/top/

需要找到的信息:電影的名字,主演,簡介,和標題圖片

2.查看頁面結構:

容易看到,需要的主題部分,都被包裹在‘<ul>“列表標簽裏,

那麽簡單的用bs4庫找到 "<ul>" tag並叠代取出每一條“<li>”tag,

最後再從每個<li>標簽裏找到需要的信息即可。

3.圖片下載:

在電影排行榜爬蟲當中,有一項目標是:爬取每個電影的標題圖,

那麽如何以文本的形式爬下來呢?

在計算機的世界裏,一切的數據歸根到底都是以“0”和“1”的二進制形式存在的。

圖片自然也不例外,任何一張圖片,都是以“字節流 ”的形式,

通過了一定的編碼方式,被計算機排列組合,從而顯示成我們肉眼所看到的圖片。

那麽只要把圖片數據從網上下載下來,然後再以二進制的格式寫入到本地即可。

給出一個圖片下載的通用代碼片段:

 import requests
    
    def get_pic_from_url(url):
        #從url以二進制的格式下載圖片數據
        pic_content = requests.get(url,stream=True).content
        open(filename
,wb).write(pic_content)

4.完整代碼

import requests
from bs4 import BeautifulSoup

def get_html(url):
    try:
        r = requests.get(url,timeout = 30)
        r.raise_for_status
        r.encoding = gb2312
        return r.text
    except:
        return error

def get_content(url):
    html 
= get_html(url) soup = BeautifulSoup(html,lxml) # 找到電影排行榜的ul列表 movie_list = soup.find(ul,class_=picList clearfix) movies = movie_list.find_all(li) for movie in movies: # 找到圖片鏈接,電影名稱 img_url = movie.find(img)[src] name = movie.find(span,class_=sTit).text #這裏做一個異常捕獲,防止沒有上映時間 try: time = movie.find(span,class_=sIntro).text except: time = 暫無上映時間 # 叠代找出“pACtor”的所有子孫節點,解決每一位演員的名字分割問題 try: actors = movie.find(p,class_=pActor).contents actor = ‘‘ for act in actors: actor = actor + act.string + ‘ ‘ except: actor = 暫無主演 # 找到影片簡介 intro = movie.find(p,class_=pTxt pIntroShow).text print("片名:{}\t{}\n{}\n{} \n \n".format(name,time,actor,intro)) # 把圖片下載下來,以二進制讀寫模式打開 with open(C:/Users/Administrator/Desktop/img/+name+.png,wb+) as f: f.write(requests.get(img_url).content) def main(): url = http://dianying.2345.com/top/ get_content(url) if __name__ == __main__: main()

5.輸出結果

技術分享

技術分享

6.註意點

requests的content和text屬性的區別:

從print 結果來看是沒有任何區別的

resp.text返回的是Unicode型的數據。

resp.content返回的是bytes型也就是二進制的數據。

也就是說,如果想獲取文本,可以通過r.text。

如果想取圖片,文件,則可以通過r.content。

爬蟲實踐---電影排行榜和圖片批量下載