天天看點

python selenium爬取kuku漫畫

在爬取這個網站之前,試過爬取其他網站的漫畫,但是發現有很多反爬蟲的限制,有的圖檔後面加了動态參數,每秒都會更新,是以前一秒爬取的圖檔連結到一下秒就會失效了,還有的是圖檔位址不變,但是通路次數頻繁的話會傳回403,終于找到一個沒有限制的漫畫網站,示範一下selenium爬蟲

<code># -*- coding:utf-8 -*-</code>

<code># crawl kuku漫畫</code>

<code>__author__</code><code>=</code><code>'fengzhankui'</code>

<code>from</code> <code>selenium </code><code>import</code> <code>webdriver</code>

<code>from</code> <code>selenium.webdriver.common.desired_capabilities </code><code>import</code> <code>DesiredCapabilities</code>

<code>import</code> <code>os</code>

<code>import</code> <code>urllib2</code>

<code>import</code> <code>chrom</code>

<code>class</code> <code>getManhua(</code><code>object</code><code>):</code>

<code>    </code><code>def</code> <code>__init__(</code><code>self</code><code>):</code>

<code>        </code><code>self</code><code>.num</code><code>=</code><code>5</code>

<code>        </code><code>self</code><code>.starturl</code><code>=</code><code>'http://comic.kukudm.com/comiclist/2154/51850/1.htm'</code>

<code>        </code><code>self</code><code>.browser</code><code>=</code><code>self</code><code>.getBrowser()</code>

<code>        </code><code>self</code><code>.getPic(</code><code>self</code><code>.browser)</code>

<code>    </code><code>def</code> <code>getBrowser(</code><code>self</code><code>):</code>

<code>        </code><code>dcap </code><code>=</code> <code>dict</code><code>(DesiredCapabilities.PHANTOMJS)</code>

<code>        </code><code>dcap[</code><code>"phantomjs.page.settings.userAgent"</code><code>] </code><code>=</code> <code>(</code><code>"Mozilla/5.0 (Windows NT 6.1; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/59.0.3071.115 Safari/537.36"</code><code>)</code>

<code>        </code><code>browser</code><code>=</code><code>webdriver.PhantomJS(desired_capabilities</code><code>=</code><code>dcap)</code>

<code>        </code><code>try</code><code>:</code>

<code>            </code><code>browser.get(</code><code>self</code><code>.starturl)</code>

<code>        </code><code>except</code><code>:</code>

<code>            </code><code>print</code> <code>'open url fail'</code>

<code>        </code><code>browser.implicitly_wait(</code><code>20</code><code>)</code>

<code>        </code><code>return</code> <code>browser</code>

<code>    </code><code>def</code> <code>getPic(</code><code>self</code><code>,browser):</code>

<code>        </code><code>cartoonTitle </code><code>=</code> <code>browser.title.split(</code><code>'_'</code><code>)[</code><code>0</code><code>]</code>

<code>        </code><code>self</code><code>.createDir(cartoonTitle)</code>

<code>        </code><code>os.chdir(cartoonTitle)</code>

<code>        </code><code>for</code> <code>i </code><code>in</code> <code>range</code><code>(</code><code>1</code><code>,</code><code>self</code><code>.num):</code>

<code>            </code><code>i</code><code>=</code><code>str</code><code>(i)</code>

<code>            </code><code>imgurl </code><code>=</code> <code>browser.find_element_by_tag_name(</code><code>'img'</code><code>).get_attribute(</code><code>'src'</code><code>)</code>

<code>            </code><code>print</code> <code>imgurl</code>

<code>            </code><code>with </code><code>open</code><code>(</code><code>'page'</code><code>+</code><code>i</code><code>+</code><code>'.jpg'</code><code>,</code><code>'wb'</code><code>) as fp:</code>

<code>                </code><code>agent </code><code>=</code> <code>chrom.pcUserAgent.get(</code><code>'Firefox 4.0.1 - Windows'</code><code>)</code>

<code>                </code><code>request</code><code>=</code><code>urllib2.Request(imgurl)</code>

<code>                </code><code>request.add_header(agent.split(</code><code>':'</code><code>,</code><code>1</code><code>)[</code><code>0</code><code>],agent.split(</code><code>':'</code><code>,</code><code>1</code><code>)[</code><code>0</code><code>])</code>

<code>                </code><code>response</code><code>=</code><code>urllib2.urlopen(request)</code>

<code>                </code><code>fp.write(response.read())</code>

<code>                </code><code>print</code> <code>'page'</code><code>+</code><code>i</code><code>+</code><code>'success'</code>

<code>            </code><code>NextTag </code><code>=</code> <code>browser.find_elements_by_tag_name(</code><code>'a'</code><code>)[</code><code>-</code><code>1</code><code>].get_attribute(</code><code>'href'</code><code>)</code>

<code>            </code><code>browser.get(NextTag)</code>

<code>            </code><code>browser.implicitly_wait(</code><code>20</code><code>)</code>

<code>    </code><code>def</code> <code>createDir(</code><code>self</code><code>,cartoonTitle):</code>

<code>        </code><code>if</code> <code>os.path.exists(cartoonTitle):</code>

<code>            </code><code>print</code> <code>'exists'</code>

<code>        </code><code>else</code><code>:</code>

<code>            </code><code>os.mkdir(cartoonTitle)</code>

<code>if</code> <code>__name__</code><code>=</code><code>=</code><code>'__main__'</code><code>:</code>

<code>    </code><code>getManhua()</code>

對了應對反爬蟲的機制,我在selenium和urllib2分别加了請求參數,反正網站通過過濾請求的方式将爬蟲過濾掉,在這裡僅爬取了開始url往下的5頁,而且為了防止圖檔和網絡延時,設定20秒了等待時間,剛開始運作時間會稍微有點長,需要等待。

運作過程如圖所示

<a href="https://s1.51cto.com/wyfs02/M01/9B/AF/wKiom1ll3wuB477ZAAFK8HMWBlM829.jpg-wh_500x0-wm_3-wmp_4-s_1882870946.jpg" target="_blank"></a>

本文轉自 無心低語 51CTO部落格,原文連結:http://blog.51cto.com/fengzhankui/1946775,如需轉載請自行聯系原作者