如果說一個人夠無聊的話。。。 就會做一些十分美(wei)麗(suo)的事情啦哈哈哈。。。 好的,話不多說,進入正題。 正如標題所示,我們今天的目標很簡單: 代碼要少,妹子要好。 步驟如下: 1. 首先我們得確定需要用到的庫: 就requests吧,我們首先嘗試向煎蛋(http://jiandan.n ...
如果說一個人夠無聊的話。。。
就會做一些十分美(wei)麗(suo)的事情啦哈哈哈。。。
好的,話不多說,進入正題。
正如標題所示,我們今天的目標很簡單:
代碼要少,妹子要好。
步驟如下:
1. 首先我們得確定需要用到的庫:
就requests吧,我們首先嘗試向煎蛋(http://jiandan.net/ooxx)發起get請求
(當然心裡希望不需要加頭部信息巴拉巴拉一堆東西。。。)
1 import request 2 url = 'http://jandan.net/ooxx' 3 r = request.get(url) 4 5 print r.status_code,r.content
看見200我就很高興,輸出頁面也很正常
沒想到還一步到位了,不需要做任何多餘工作
(內心表示疑惑,煎蛋沒有防爬機制嗎?給面子!)
2. 接下來就要分析html:
其實目的就是img嘛,我發現結構很簡單,正則表達式這麼寫就行了:
1 pic_url = re.findall('<img src="//(.*?)" /></p>',r.content)
(可以print試試,發現並沒有多餘的圖片)
3. 接下來就是分析頁碼:
我發現頁碼也沒做什麼特別的處理,完全是url提交頁碼信息
於是只要寫一個迴圈滿足這個url就行了:
1 for i in range(1,231): 2 url = 'http://jandan.net/ooxx/page-'+str(i)+'#comments'
(一共230頁,應該是刪過了。。。)
4. 接著就把抓圖片url做一個函數,然後進行多線程處理即可:
完整代碼:
1 #coding=utf-8 2 import requests 3 import re 4 import thread 5 import time 6 7 def get_pic_url(url): 8 r = requests.get(url) 9 10 pic_url = re.findall('<img src="//(.*?)" /></p>',r.content) 11 12 for i in pic_url: 13 print i 14 15 16 def main(): 17 18 for i in range(1,231): 19 20 url = 'http://jandan.net/ooxx/page-'+str(i)+'#comments' 21 thread.start_new_thread(get_pic_url,(url,)) 22 time.sleep(0.1) 23 #一定要加上time.sleep()不然不能成功運行!!!!!! 24 25 if __name__ == '__main__': 26 main()
在thread處理多線程的時候,迴圈內一定要加上time.sleep(),不然會很慘,比如停止工作巴拉巴拉。。。
好啦,這樣我們就輕鬆獲得所有妹子圖片url,一共五千張不到,咱就不再urllib下載了,估計也有個幾個g
能這麼少代碼解決也是拖了煎蛋良好的給你爬機制的福,爽!20行代碼!