1. 程式人生 > >隨便寫寫爬蟲

隨便寫寫爬蟲

css_ 查找 get att range () 第一個 輸入 保存

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 廢話


差不多就是這樣 人懶 沒怎麽優化 要是可以 再用一個正則表達式 把具體的章節內容爬下來 用一個數組對應起來 然後命名

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

這是自己原來博客的,估計那個服務器以後不怎麽用,放到這保存一下

隨便寫寫爬蟲