随便写写爬虫

0x00 前言(哦 上面有一首歌 =- =)


想起来,好久都没看漫画了,哎,都养得够肥了,自从高考之后,好像除了神精榜看完了之外,就再也没看过其他漫画,《斗罗大陆》《斗破苍穹》之类,啊,好多都没看。突然想看了,就去网上找了一下。我的天,什么网站,这么多广告,哎,也是,人家凭什么免费给你看,广告在所难免的。算了算了,不想说废话了,最近废话说得也有点多。直接上代码

0x00 代码


哦忘了说  这脚本是基于python 语言的

#-*-coding:utf-8-*- 
__author__ = 'Deen' 


from selenium import webdriver
import os
from os import path as osp
from selenium.common.exceptions import NoSuchElementException
import urllib2
import urllib
import re


#参考的是别的大神的博客
#http://python.jobbole.com/87434/
#我自己写得比较粗糙




# 先获取所有章节的url
# 在章节列表页面,采用正则表达式,获取url


def get_all_chapter(main_chapter_url):
    #设置headers
    user_agent = 'Mozilla/4.0 (compatible; MSIE 5.5; Windows NT)'
    headers = { 'User-Agent' : user_agent }
    request=urllib2.Request(main_chapter_url,headers=headers)
    reponse=urllib2.urlopen(request)
    content=reponse.read().decode('utf-8')
    #写正则表达式
    pattern=re.compile('a\shref="/mh/(.*?)"\starget="_blank',re.S)
    items=re.findall(pattern,content)
    #注意:
    #这里获取的第一个item 并不是我们想要的
    #而且我们获取的并非是一个完整的url 只是网址的一部分 所以还要拼凑
    chapter_nums=len(items)
    chapter_url_list=[]
    #第一项不要
    for i in range(1,chapter_nums):
        url="http://www.tazhe.com/mh/"+items[i]
        chapter_url_list.append(url)
    return chapter_url_list


#在写一个下载器,储存我们保存的漫画
#k为计数器
def download(image_url,k,chapter_num):
    #由于python的文件操作不允许重复创建文件夹 所以我们要加一个判定判定是否是第一次创建文件夹
    if k==1:
        #这是下载的漫画存放的路径
        os.mkdir("E:\\cartoon\\"+str(chapter_num))
        urllib.urlretrieve(image_url,"E:\\cartoon\\"+str(chapter_num)+"\\%s.jpg"%k)
    else:
        urllib.urlretrieve(image_url,"E:\\cartoon\\"+str(chapter_num)+"\\%s.jpg"%k)


def get_image_url(chapter_url,chapter_num):
    broswer=webdriver.PhantomJS()
    broswer.get(chapter_url)
    image_num=1
    #Y用于计数  来给下载的图片命名
    while True:
        #选出网页中image的网址
        image_url_list=broswer.find_elements_by_css_selector('#qTcms_pic')
        for i in image_url_list:
            image_url=i.get_attribute('src')
            download(image_url,image_num,chapter_num)

            broswer.find_element_by_css_selector('a.next').click()
        try:
            #查找页面中是否出现了这个id ,如果出现了 说明页面到了最后一面 结束循环
            broswer.find_element_by_css_selector('#bgDiv')
            break
        except NoSuchElementException:
            image_num=image_num+1
#主函数
if __name__=='__main__':
    #先输入显示所有章节的地址,用一个字符串数组进行储存
    chapter_url_list=get_all_chapter("http://www.tazhe.com/mh/9282/")
    chapter_num=1
    #章节计数器
    for url in chapter_url_list:
        print "正在下载第"+str(chapter_num)+"章"
        #调用函数
        get_image_url(url,chapter_num)
        chapter_num=1+chapter_num

0x02 废话


差不多就是这样  人懒 没怎么优化  要是可以 再用一个正则表达式 把具体的章节内容爬下来 用一个数组对应起来 然后命名

我自己用  能用就行 不管了  爬虫博大精深  真好玩啊

 

这是自己原来博客的,估计那个服务器以后不怎么用,放到这保存一下

 

posted on 2017-07-22 10:59  _Deen  阅读(323)  评论(0编辑  收藏  举报

导航