好久沒更新了…

上一篇(Python爬蟲入門)已經是上個月初的事XD

今天就先來一篇最近學python爬蟲的心得

首先先來個版權聲明:

這篇取自:小白爬蟲第一彈之抓取妹子圖- 靜覓 崔慶才的個人博客

這是我能找到的python爬蟲教學文中,最淺顯易懂的優質好文

版主真是佛心來著!

不過版主使用的爬蟲來源:mzitu.com能正常連線的時間實在太少了

網站都連不上,那還要寫爬蟲程式嗎? XDD

所以我就改用另一個來源:meizitu.com

網站都換另一個了,那爬蟲程式必然要修改

加上原作者一開始的程式碼是平鋪直敘

後來加了函式最後用class

這對python的新手駕駛來說有點一時難以理解

所以我就加以修改了

這一個版本完全沒有函式跟class

完全直述語法,setp by setp,淺進淺出

應該沒有比這更簡單的,可以完成一個真正有用的爬蟲程式



直接看程式碼吧! come some code:
'''
author:smilehsu
requirements:Windows7、python3.52
date:2017/02/12
'''

import os, re, requests, shutil
from bs4 import BeautifulSoup

headers = {'User-Agent':"Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.1 (KHTML, like Gecko) Chrome/22.0.1207.1 Safari/537.1"}
base_url='http://meizitu.com/a/'
dir_path='d:\meizitu'
all_page_link=[]

#列出全部套圖的連結
#num的範圍 1 <= num <= 5481

#先爬50頁試試看
num=50

for i in range(1,num+1):
page=base_url+str(i)+'.html'
all_page_link.append(page)

#print(all_page_link)

error_page=[]

#把頁面連結的list傳進來,逐頁處理
#ll_page_link[30:35] 先丟30~35頁測試用
for get_album in all_page_link[30:35]:
page_html=requests.get(get_album)
page_html.encoding='gb2312'
page_soup=BeautifulSoup(page_html.text,'lxml')
try:
#取得頁面的title跟該頁面的圖片連結
title=page_soup.find('div',{'class':'metaRight'}).find('a')
#取得圖片連結
album_pics=page_soup.find('div',{'class':'postContent'}).find_all('img')
print(get_album)
print(title.text)
#print('目前工作目錄:'+os.getcwd())
dir_name=title.text
isExists = os.path.exists(os.path.join(dir_path, dir_name))
mydir_path=os.path.join(dir_path, dir_name)
if not isExists:
print('建立資料夾:'+mydir_path)
os.makedirs(mydir_path)

else:
print('資料夾已存在'+mydir_path)

except:
print('error: {}'.format(get_album))
error_page.append(get_album)
pass
#開始下載前先切換到要存放圖檔的資料夾
os.chdir(mydir_path)
for pic in album_pics:
#路徑check
#print('目前工作目錄:'+os.getcwd())
#頁面裡的圖片連結
pic_src=pic['src']
print('要下載的圖檔連結'+pic_src)
#下載圖片後要存檔的檔名
pic_name=dir_name+'_'+pic_src.split('/')[-1]
#下載圖片
get_pic=requests.get(pic_src,headers=headers,stream=True)
f=open(pic_name,'wb')
shutil.copyfileobj(get_pic.raw,f)
f.close()
del get_pic





後續:

1.本系列會照著原作:靜覓 崔慶才的個人博客 進行改寫

2.對本篇有問題可以問我(現在還沒有留言功能)(謝謝指教)

 

2018/05/20 新增有class的寫法

code:
'''
author:smilehsu
blog:smilehsu.cc
requirements:Windows7、python3.52
'''

import os, re, requests, shutil
from bs4 import BeautifulSoup

#base_url='http://meizitu.com/a/'

all_link=[]
error_page=[]
dir_path='d:\meizitu'

class meizitu():

def all_url(self,url,maxpage):
for i in range(1,maxpage+1):
page_url=url+str(i)+'.html'
all_link.append(page_url)

for p in all_link:
html=self.request(p)
soup=BeautifulSoup(html.text,'lxml')

try:
#取得頁面的title跟該頁面的圖片連結
title=soup.find('div',{'class':'metaRight'}).find('a')
#取得圖片連結
img_url=soup.find('div',{'class':'postContent'}).find_all('img')
#測試用 印出頁面的title
print(title.text)
#測試用
#print(len(img_url),img_url)
#要存圖片的資料夾檔名就用頁面的title
dirname=title.text
#建立資料夾
self.mkdir(dirname)
#儲存圖檔
self.save(img_url)

except:
print('error: {}'.format(p))
error_page.append(p)
pass

def request(self,url):
headers = {'User-Agent': "Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.1 (KHTML, like Gecko) Chrome/22.0.1207.1 Safari/537.1"}
res = requests.get(url, headers=headers,stream=True)
res.encoding='gb2312'
return res

def mkdir(self, dirname):
dirname=dirname.strip()
isExists = os.path.exists(os.path.join(dir_path, dirname))
mydir_path=os.path.join(dir_path, dirname)


if not isExists:
print('建立資料夾:'+mydir_path)
os.makedirs(mydir_path)
os.chdir(mydir_path)
return True

else:
print('資料夾已存在'+mydir_path)
os.chdir(mydir_path)
return False

def save(self, img_url):
for pic in img_url:
#路徑check
#print('目前工作目錄:'+os.getcwd())
#頁面裡的圖片連結
pic_src=pic['src']
print('要下載的圖檔連結'+pic_src)
#下載圖片後要存檔的檔名
#pic_name=dir_name+'_'+pic_src.split('/')[-1]
pic_name=pic_src.split('/')[-1]
#下載圖片
get_pic=self.request(pic_src)
f=open(pic_name,'wb')
shutil.copyfileobj(get_pic.raw,f)
f.close()
del get_pic

Meizitu=meizitu()
Meizitu.all_url(url='http://meizitu.com/a/',maxpage=5)

 

 
arrow
arrow
    全站熱搜

    正義的胖虎 發表在 痞客邦 留言(0) 人氣()