在爬取这个网站之前,试过爬取其他网站的漫画,但是发现有很多反爬虫的限制,有的图片后面加了动态参数,每秒都会更新,所以前一秒爬取的图片链接到一下秒就会失效了,还有的是图片地址不变,但是访问次数频繁的话会返回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,如需转载请自行联系原作者