實戰內容:取得豆瓣TOP250電影的中英文名、港台名、導演、上映年份、電影分類以及評分,將資料存放到資料庫和檔案中。連結為:https://movie.douban.com/top250?start=。
爬取網頁資料的方式我們在前面介紹過多種,以下來進行資料的爬取。
importreimportrequestsfrombs4importBeautifulSoupforiinrange(0,2):headers={#這裡模擬瀏覽器進行訪問'user-agent':'Mozilla/5.0(WindowsNT6.1;Win64;x64)AppleWebKit/537.36(WindowsNT6.1;Win64;x64)AppleWebKit/537.36(WindowsNT6.1;Win64;x64)AppleWebKit/537.36(KHTMLComeGeckGeck. /537.36','Host':'movie.douban.com'}res='https://movie.douban.com/top250?start='+str(25*i)#25次r=requests.get( res,headers=headers,timeout=10)#設定超時時間soup=BeautifulSoup(r.text,html.parser)#設定解析方式,也可以print(soup)
輸出結果為:
<!DOCTYPEhtml><htmlclass=ua-windowsua-webkit><head><metacontent=text/html;charset=utf-8http-equiv=Content-Type/><metacontent=webkitname=renderer/><metacontent=alwaysname=referrer /><metacontent=ok0wCgT20tBBgo9_zat2iAcimtN4Ftf5ccsh092Xeywname=google-site-verification><title>豆瓣電影Top250</title>........</script><!--dae-web-movie--defdefbd-759 b69fc--><script>_SPLITTEST=''</script></link></link></body></html>
這裡我們使用Python中的hashlib模組中的mad5()函數,檢查程式碼如下,如果大家是剛剛爬取到的數據,可以省略這一步驟。
MD5為電腦安全領域常用的一種加密演算法。
importhashlibdefvertifyupdate(html):md5=hashlib.md5()md5.update(html.encode(encoding='utf-8'))md5code=md5.hexdigest()print(md5code)old_html=''htlm_name='md5.hexdigest()print(md5code)old_html=''htlm_name='gp.txt 'ifos.path.exists(htlm_name):withopen(htlm_name,'r',encoding='utf-8')asf:old_html=f.read()ifmd5code==old_html:print('資料未更新')returnFalseelse: withopen(htlm_name,'w',encoding='utf-8')asf:f.write(md5code)print('資料更新了')returnTrue
這個函數需要導入hashlib模組,然後建立一個md5的對象,把目前頁面的資訊傳入,透過使用updata()方法對傳入的資料進行MD5運算。
然後使用if語句判斷檔案是否存在,如果存在就讀取其中的MD5碼,再透過判斷兩次的MD5碼是否相同,如果一樣就表示沒有更新,反之則進行了更新,把新的MD5碼傳到文件中。
爬取數據是我們要做的第一步,如果數據存放了很久再進行使用則需要進行檢測,這都是相對簡單的步驟,比較麻煩的就在於如何去獲取到更精準的數據,下一節我們來數據分析。