爬取漫畫網站並進行圖片拼接

一切都要從一隻蝙蝠提及。。css

由於疫情緣由,這個月遠程辦公(摸魚),看漫畫花了1000多大洋,看着本身的支付寶餘額,起了白嫖的邪念。。html

網上有些漫畫網站,點擊下一頁的時候,會跳出某些網站,十分不便,並且每次換頁都須要點擊,因此我決定把漫畫全都爬下來,每章拼接成一張長圖,能夠看得舒服一些python

工具:pycharm app

工具包:scrapy,re,urllib,osdom

一.建立爬蟲程序:

1.scrapy startproject manhua2curl

2.cd 到目錄內scrapy

3.scrapy genspider manhua fzdm.com             /漫畫爲spider名稱 ,後面的爲漫畫網站網址ide

 

二.修改配置和創建啓動文件工具

setting頁面裏面修改:網站

 

ROBOTSTXT_OBEY = False

DOWNLOAD_DELAY = 1

DEFAULT_REQUEST_HEADERS = {
'Accept': 'text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8',
'Accept-Language': 'en',
'User-Agent': 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_7_0) AppleWebKit/535.11 (KHTML, like Gecko) Chrome/17.0.963.56 Safari/535.11'
}

 

啓動文件:

 

 

 

from scrapy import cmdline
cmdline.execute("scrapy crawl manhua".split())

  

三.寫spider

 

 

打開這個py文件

打開我想看的漫畫地址,填入start_urls

我是從126話開始看的,因此初始地址爲126

分析一下頁面:

 

 

 

 

 

 

整頁的漫畫都是一個jpg,那就好辦了,只要找到這個圖片的src就好了,並且這個元素還有ID,很容易找

在打印的response.body裏面,找到該元素

 

 

 

 

 

 

 明顯返回的數據和咱們在頁面本身看見的src不同,既然不直接給,就本身拼接好了,由圖可知,知道mhpicurl就能拼出src

因此咱們要找出來mhpicurl的賦值在哪裏,在結果裏面搜索mhpicurl,找到賦值公式發現還要找到mhss和mhurl

 

繼續找mhss和mhurl

mhss:

 

 

mhurl:

 

因此本身拼接一下獲得的就是http://p2.manhuapan.com/2014/12/071250072.jpg,也就是漫畫圖片的地址

後來我發現,我看的這本漫畫的圖片地址只有mhurl不同,因此我只須要找到mhurl,就能獲得圖片的src

 

mhurl = re.findall('mhurl="(.*?)\.jpg"', str(response.body))[0]
   img_scr = 'http://p2.manhuapan.com/' + mhurl + ".jpg"

 

 

 找到這章漫畫以後,咱們須要獲取下一話的信息

在不是最後一頁的狀況下:

 

 

 在是最後一頁的狀況下;

也就是說,咱們只須要獲取div裏面的最後一個a標籤便可

next_page = response.css(".navigation a::attr(href)").extract()[-1]

 

而後就是下載圖片連接了,這裏我比較懶,直接用的

urllib.request.urlretrieve(圖片連接, 圖片位置)

 

下面是spider下的完整代碼 (寫的比較匆忙,有些地方不是很嚴謹)

# -*- coding: utf-8 -*-
import scrapy import re import urllib.request import os class ManhuaSpider(scrapy.Spider): name = 'manhua' allowed_domains = ['fzdm.com'] start_urls = ['https://www.fzdm.com/manhua/42/126/index_0.html'] def parse(self, response): print(response.body) mhurl = re.findall('mhurl="(.*?)\.jpg"', str(response.body))[0] img_scr = 'http://p2.manhuapan.com/' + mhurl + ".jpg"
        print(img_scr) count=re.findall('https://www.fzdm.com/manhua/42/(.*?)/index_(.*?).html',response.url)[0] index=count[1] count=count[0] isExists = os.path.exists(r"C:\Users\rtdr\Desktop\test\%s" % count) if not isExists: os.makedirs(r"C:\Users\rtdr\Desktop\test\%s" % count) pic_name = r"C:\Users\rtdr\Desktop\test\%s\%s.jpg" %(count,index) urllib.request.urlretrieve(img_scr, pic_name) next_page = response.css(".navigation a::attr(href)").extract()[-1] # next_page=re.findall('href="(.*?)"',str(next_page))[0]
        if next_page is not None: next_page = response.urljoin(next_page) if not str(next_page).endswith(".html"): print(next_page) next_page=next_page+'/index_0.html'
            yield scrapy.Request(next_page, callback=self.parse)
完整代碼

 

四.拼接圖片

爬取完成以後,文件夾應該以下圖所示

 

 裏面的圖片應該爲一張一張的小圖片:

 

咱們用PIL模塊將圖片拼接,這個過程很簡單,我就直接放代碼了:

import os import PIL.Image as Image for i in range(172,191): path=r'C:\Users\rtdr\Desktop\test\%s' %i dirs=os.listdir(path) width=0 high=0 li=[0] for k in range(len(dirs)): pic_path = path + '\\%s.jpg' % k fromImage = Image.open(pic_path) tem_w,tem_y=fromImage.size if tem_w>width: width=tem_w high+=tem_y li.append(high) toImage = Image.new('RGB', (width, high)) for k in range(len(dirs)): pic_path=path+'\\%s.jpg' %k print(pic_path) fromImage = Image.open(pic_path) toImage.paste(fromImage,(0, li[k])) toImage.save(r'C:\Users\rtdr\Desktop\test\拼接後圖片\%s.jpg' %i)

運行後效果以下:

 

 而後我打包發到QQ看下效果

 

 

拼接正常,全程長圖,右劃下一章,完成。

 

ps:等我發工資會補票的,你們最好仍是支持正版啊。。我作這個是出於技術o( ̄▽ ̄)d 

 

原文出處:https://www.cnblogs.com/98WDJ/p/12396383.html

相關文章
相關標籤/搜索