zoukankan      html  css  js  c++  java
  • 随便写写爬虫

    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('ashref="/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 废话


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

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

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

  • 相关阅读:
    java设计模式之适配器模式
    在Eclipse中建立Maven Web项目
    java设计模式之原型模式
    java设计模式之建造者模式
    java设计模式之工厂模式
    java设计模式之单例模式
    C# 前端多次上传文件
    C# async 和 await
    .NET 4.0 任务(Task)
    C# 5.0
  • 原文地址:https://www.cnblogs.com/deen-/p/7220626.html
Copyright © 2011-2022 走看看