python 爬蟲爬取煎蛋網妹子圖
前言
大家好,這裡是「Python知識圈」爬蟲 系列教程。此文首發於「brucepk」公眾號,歡迎大家去關注。此係列教程以例項專案為材料進行分析,從專案中學習 python 爬蟲,跟著我一起學習,每天進步一點點。
煎蛋網站
煎蛋網.png
很多朋友都反應學 python 語言太枯燥,學不進去,其實學語言最好的方法是自己用所學的語言做專案,在專案中學習語言的用法。今天給大家帶來的專案是用 python3 爬取煎蛋網妹子的圖片。圖片質量還不錯,我放兩張圖片大家感受下。
007bk2ovgy1fsy6w0g6x9j30ia0rfjwd.jpg
007bk2ovgy1fsplp6cen2j30i20rwn0j.jpg
這個專案用了 requests + selenium + beautifulsoup 庫對網站的圖片進行抓取。接下來我就,給大家一步步解析一下,怎麼用 python 爬蟲爬取圖片並下載的。
爬取結果
爬取成果.png
以上就是爬取的結果,通過執行 meizi.py 程式碼,就可以把圖片儲存在我指定的目錄下,如果沒有此目錄,就用程式自動建立目錄,爬取的所有圖片都儲存在此目錄下。
程式構造
程式結構.png
程式主要是由 6 個函式組成:
get_html() :利用 webdriver 來請求對應的網站。
get_page():解析面跳轉地址。
mkdir():判斷目錄是否存在,不存在就建立一個。
get_pic():提取圖片連結。
download(allimgs):通過圖片連結下載儲存。
main():程式執行的主函式。
程式思路
- 對目標網站連結進行分析,找出目標網站連結的規律。
- 從目標網站裡面提取圖片連結。
- 將圖片下載並儲存在目錄中。
原始碼分析
我們通過f12除錯頁面,看到圖片的連結,發現此連結並沒有在原始碼中,我們推測,圖片應該是通過 js 載入的,對於需要 js 才能加載出來的網站,我們就可以利用 selenium 的自動化測試請求庫來進行載入。利用 selenium 請求可以模擬真實瀏覽器訪問。
除錯.png
browser = webdriver.Chrome()
wait = WebDriverWait(browser, 3)
需要下載 chrome 驅動放在 python 安裝目錄下。
分頁連結分析
def get_page():
base_url = 'http://jandan.net/ooxx/' #第一次進入的原始地址
soup = BeautifulSoup(get_html(base_url), 'lxml') #解析原始地址
current_pages=soup.select('.cp-pagenavi .current-comment-page')[0].get_text()[1:-1] #取出當前頁面欄位
urllist = []
for page in range(1,int(current_pages)+1):
real_url=base_url+'page-'+str(page)+'#comments' #拼出分頁地址
urllist.append(real_url)
return urllist #返回所有分頁地址列表
原始連結 base_url = 'http://jandan.net/ooxx/',當我們點選下一頁時,發現在原始連結的後面加了一段:
圖5
其中加的數字,就是表示現在所在的頁數,通過 BeautifulSoup 庫對頁面進行解析,用選擇器提取頁數的欄位,加入到連結中進行拼接。
建立目錄
def mkdir():
isExists=os.path.exists('E:\jiandan')
if not isExists:
print('建立目錄')
os.makedirs('E:\\jiandan') #建立目錄
os.chdir('E:\\jiandan') #切換到建立的資料夾
return True
else:
print('目錄已存在,即將儲存!')
return False
用 os.path.exists 方法來個判斷,如果不存在此目錄就建立一個,如果存在就忽略。
提取圖片
def get_pic():
for url in get_page():
mkdir()
html=get_html(url)
soup=BeautifulSoup(html,'lxml')
allimgs=soup.select('div .text p img')
allimgs=re.findall('src="(.*?)"',str(allimgs))
download(allimgs)
print("下載完畢!")
用 BeautifulSoup 解析原始碼,用選擇器迴圈提取圖片的連結,並呼叫 download() 函式下載圖片直至下載所有圖片。
優化改進
在公眾號「Python知識圈」回覆「jiandan」也可以獲取原始碼。
本次的程式還有一些不足的地方,比如利用 selenium 庫在爬取的時候非常的慢,每頁我還設定了 3 秒等待時間,這部分待優化。
這波教程不點個贊,說不過去吧?哈哈。這個網站有很多福利,我只能說大家注意身體啊。
本公眾號專注:
1.python 技術分享
2.python 爬蟲分享
3.資料、工具共享
歡迎關注我們,一起成長!
我建一個技術交流群,群裡有大佬,可以進群一起討論學習,共同進步。進群方式見公眾號聯絡方式處。
群裡我用 python 寫了個微信機器人,歡迎體驗!