Python + pyspider某小说站的爬虫,入数据库,火车头发布,资源下载到本地,另可写爬虫!
$ n& ^7 Q9 X; `5 T6 Y7 F& b' Z$ l& K- #!/usr/bin/env python) t0 s0 _8 t! X4 B; I" C# a/ g
- # -*- encoding: utf-8 -*-
1 `8 u7 R) c. [. Y$ T - # Created on 2019-05-05 21:43:111 y) G% L f" p& _# t5 ^
- # Project: XiaoShuo6 l' n0 c2 \! F0 V2 K- E, k$ a
- 1 l9 x2 P: Q3 D; i
- from pyspider.libs.base_handler import *# }: ?( {: v) d" w! B
- import pymysql
8 z( F% r# i0 Q0 B4 |0 C1 v - import random1 a g: X7 W C& D7 A3 z
- import datetime7 Y* O% C/ a/ {: t4 I& }( z r2 j
- import urllib2,HTMLParser,re
& ~3 I$ h0 k! `6 L- q* { h - import os
+ X/ H9 {! b! u6 [ - import sys3 A0 R/ \& G% h& j9 w5 B2 d9 C
- import re9 Z7 h+ a8 Z j1 {; x ^
- import codecs
3 o) m+ w0 H9 B( p4 B - import requests
/ Y% U5 T6 e7 b- I3 U - import json2 s x% s; R8 J5 Y. U
-
! P9 Q- ^, L- D: }) N - class Handler(BaseHandler):
# }- }% D' Q! j1 m* E4 E - global Datos
1 ]& h# G# A$ e2 ~ - global P_dir
0 ?% J/ U% D5 { - P_dir = '/Tools/Debug/' #采集时候图片保持到本地的路径" C( m9 c% a' O n' P* S1 O
- global Datos- @ d U. `3 m: e# o) i1 P1 S
- Datos = {}3 V" ?1 O3 c. Y t
- headers= { F5 I" m @8 }9 X- w; I
- 'Accept':'text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,*/*;q=0.8',/ r% {1 W/ g4 i' ?
- 'Accept-Encoding':'gzip, deflate, sdch',
; h0 l; Q6 H. p1 R/ }2 N a' { - 'Accept-Language':'zh-CN,zh;q=0.8',
1 ^8 A, ]( `6 d. @5 y" g - 'Cache-Control':'max-age=0'," @3 o, n1 N q2 e3 s2 y8 t& v8 D
- 'Connection':'keep-alive',, G {4 w0 J& F) v5 | ^4 P
- 'User-Agent':'Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/41.0.2272.101 Safari/537.36'
3 [. z1 \' {+ r; F& w( M - }7 A/ M! E- W. |
- crawl_config = {
0 v- \ U9 r0 K. ~) N) N1 j" p - 'headers' : headers,: \0 I+ }( J! p9 L) x
- 'timeout' : 300( ?( d" _' b* }8 h
- }5 h4 h2 V3 M+ ?% E
- def add_BookFile(self,Bookname, BookIDs, img, Locaimg, Book_Dates):
# S1 @$ N" Z1 \ - db = pymysql.connect(host="localhost",user="数据库用户名",password="密码",db="数据库名",charset="utf8")
* a% @' @! V( C S# m& n - try:* W0 y6 ^9 r o0 M
- cursor = db.cursor()
n" b- @% \2 P6 u" t: ^8 b - #注意此处字符串的占位符要加双引号"%s"
) I& N( t) p4 z/ c& {- [ - sql = 'insert into BookFile(Bookname, BookID, img, Locaimg, Book_Date) values ("%s","%s","%s","%s","%s")' % (Bookname, BookIDs, img, Locaimg, Book_Dates);* W+ c: C1 G2 ~2 n0 o
- # print(sql)
$ [- {6 v) y: S g - cursor.execute(sql)
, f9 Y# h; I4 ] -
5 _2 R1 f, B7 a( ]: _3 V; Y - #qid = cursor.lastrowid: r8 U5 ?; A3 j* U8 j) `' w9 f
- #print(qid)4 w# `" e9 H( U$ v* ~, p7 X
- - `& I# l- x* d
- db.commit()
. f! K2 T3 U- v0 w; `. J! | - except Exception as err:
* j+ a# W; U/ X8 z; q8 z - print("Error %s for execute sql: %s" % (err, sql)): Z' u$ G; V/ `; D
- db.rollback()
& c" I# h; C9 a: C - def add_comment(self,Bookname, Booktitle, BookID, Titleid, Book_Date):
, i" J4 ~& a( A% `: \; g6 P - db = pymysql.connect(host="localhost",user="数据库用户名",password="密码",db="数据库名",charset="utf8")- O; o8 |$ x/ t+ I' l( c( k
- try:1 Z0 w1 N( Z6 F& B0 t4 U
- cursor = db.cursor(), U, S2 E7 ]/ m! J
- #注意此处字符串的占位符要加双引号"%s"2 ^* s2 L# m' [
- sql = 'insert into BookTitle(Bookname, Booktitle, BookID, Titleid, Book_Date) values ("%s","%s","%s","%s","%s")' % (Bookname, Booktitle, BookID, Titleid, Book_Date);3 f& B2 p% Y% d/ x1 h
- # print(sql)1 Q5 y% _2 b: m
- cursor.execute(sql)0 k" u, a' F# c6 s
- ' x# P; X" U @
- #qid = cursor.lastrowid
! I- S' H8 j h o7 _ - #print(qid)
1 M, g5 Z% y& ^" s& n4 L W - 4 V5 X( q: @+ r& I% t+ ]
- db.commit()
$ Y- ]* k7 t( j3 X6 F( ^4 M* J - except Exception as err:4 B8 x( B/ X9 b% _0 S b- I
- print("Error %s for execute sql: %s" % (err, sql))- K7 _! n% J( x' N
- db.rollback()- x, ]- b- Y6 w4 |$ k" w+ o/ z
- def add_question(self,Bookname,Cater_Name,Book_author,Book_Introduction,Book_Synopsis,Book_Palabras,Bookurl,Booktitle,BookID,BookConte,Titleid,abover,Book_Date):
7 H9 f3 w8 g6 N' H* Q+ V" D! R - db = pymysql.connect(host="localhost",user="数据库用户名",password="密码",db="数据库名",charset="utf8")
# v$ k' N- U3 ]- w" a* K$ D/ e1 h - try:8 F0 V* V0 i( t4 C, o9 y
- cursor = db.cursor()/ \8 v7 _' {. n$ A9 F
- #注意此处字符串的占位符要加双引号"%s", P" V% o3 P" S
- sql = ' INSERT INTO BookConte (Bookname,Cater_Name,Book_author,Book_Introduction,Book_Synopsis,Book_Palabras,Bookurl,Booktitle,BookID,BookConte,Titleid,abover,Book_Date) VALUES("%s","%s","%s","%s","%s","%s","%s","%s","%s","%s","%s","%s","%s")' % (Bookname,Cater_Name,Book_author,Book_Introduction,Book_Synopsis,Book_Palabras,Bookurl,Booktitle,BookID,BookConte,Titleid,abover,Book_Date);
' Q( X' E! k. L - print(sql)
# u3 b5 G0 [( S0 n* O3 T& `1 C - cursor.execute(sql); C) R1 J9 o% B* V2 l3 i
- print(cursor.lastrowid)
- T+ Z C- J0 `5 F6 p) U2 i - db.commit()
: |- C- G' b7 x+ @0 Q - except Exception as err:
+ m7 g8 ^0 w; _' c3 S6 L - # except:
6 p8 d% u+ ?0 m0 n' ~. u& L - # print('Failed')' B( m) u0 Y0 y: Z% Z) Q1 t
- print("Error %s for execute sql: %s" % (err, sql))
( V! e& v) Y R( [5 x- A3 C5 ^ - db.rollback()
, ]: M! l; l9 k4 J* G, S- l. \0 I& D -
7 l$ J8 b: }8 R9 e0 |: ^1 n/ ~ o - def add_locoy(self,Bookname,Cater_Name,Book_author,Book_Introduction,Book_Palabras,Book_img,Booktitle,BookConte,abover): " r+ i/ ~* z1 ^2 Y0 n) N, [! a
- reload(sys)+ t# W% t q2 w5 }
- sys.setdefaultencoding("gbk")3 V" |- }% A0 g
- locoy_url = 'http://www.******.net/locoy/?my=book' #697火车头发接口地址2 D, Q, m9 R' z$ B
- locoy_data = {
. d9 P8 q6 O, N. l4 u' j1 v - 'my_u':'用户名', #后台用户名1 g+ x; q+ }9 h: O5 B4 I3 U0 [6 P
- 'my_p':'密码', #后台密码
4 o4 B' C$ n0 F' @. ~- l- R# @ - 'subject_669977_net':Bookname.encode('gbk', 'ignore'),: G( ]) L! P* s& Z! f: _
- 'caid':Cater_Name.encode('gbk', 'ignore'),9 \! j4 ~: s6 N% \
- 'title_669977_net':Booktitle.encode('gbk', 'ignore'),; @; k' o5 f$ n( M: f- y
- 'article':BookConte.encode('gbk', 'ignore'),
- V+ W! k$ t6 ] - 'author':Book_author.encode('gbk', 'ignore'),7 ?! w$ b, [3 V4 v
- 'ready_1':Book_Palabras.encode('gbk', 'ignore'),4 v3 H$ q" V$ ]& P2 r+ l9 d
- 'thumb':Book_img,
# g' [" u! a. g - 'content':Book_Introduction.encode('gbk', 'ignore'),
) } R7 g! g4 Z% _ - 'abover':abover.encode('gbk', 'ignore') ; A; r8 W/ x2 `& }0 z g7 |6 t/ [
- }0 K; Z; G7 c8 t
- res = requests.post(locoy_url, data=locoy_data)
; t+ b( k8 x; Y; _8 W+ g8 z. n - print res.text: e I2 Y3 Z! T. U s
- print res.content
* P) Z3 ]* Z- r, \ - # print Dsd
" |; R) g* [+ l+ f4 {# R! { - return res
+ s" f7 z! U* N3 K" o -
X, O( T7 K& C. ] - def __init__(self):4 K- z$ _+ W, O, Q" C. f& Z l8 E
- self.base_url1 = 'https://www.****.cc/': L4 w) G1 Q5 s- Y
- self.base_url2 = '/'
' C! r. J: ^2 F" J) g - self.CaterId = []7 y$ }0 h. R( g% I0 q1 R
- self.CaterIds = ['xuanhuan', 'wuxia', 'yanqing', 'lishi', 'kehuan', 'kongbu', 'nvsheng'], \& u6 l4 t* o7 k/ ~9 G
- self.page_num = 19 V* ~- a0 Z, o: G8 E' t( r
- self.total_num = 200 # u7 O1 D8 ]" `! B' z, a$ E4 t
-
+ [5 z! W4 L- Y) m - @every(minutes=8 * 60)6 s0 R8 d I3 o
- def on_start(self):2 e& G0 n# J8 [8 j" b' x2 K
- global Cater_Name
- U( u3 |* f$ z - Cater_Name = []* x: }4 R! g) z# T3 {! X
- while self.page_num <= self.total_num:
) t6 m8 @7 X5 }" S5 G0 y - for self.CaterId in self.CaterIds:/ C; |6 m" C _4 w& Q, i0 T
- if self.CaterId == 'xuanhuan':% e: V9 i: }' D1 e
- Cater_Name = '玄幻'
, Y; H3 s. X! ?; @/ C1 y, z - if self.CaterId == 'wuxia':
9 Q0 F$ v8 ^) G! w - Cater_Name = '武侠', T8 F' P1 g5 M' ~7 E
- if self.CaterId == 'lishi':
5 x9 F6 D) K7 m$ ? - Cater_Name = '历史'
1 n3 c9 w7 Y. N n; V - if self.CaterId == 'yanqing':
$ W: c8 N7 I9 D - Cater_Name = '都市' : m% v2 [, o" E3 b6 m8 |
- if self.CaterId == 'nvsheng':
# w$ @ V* r3 X5 S2 f6 G1 e0 J+ t: e - Cater_Name = '都市'
. u9 m* I' j$ L8 N% C% D0 { d/ t - if self.CaterId == 'kehuan':5 V: Y' g# `* H
- Cater_Name = '科幻' * K5 z( a( p9 q: v' y8 f
- if self.CaterId == 'kongbu':# B0 t1 H1 B( M2 j! P
- Cater_Name = '游戏' 2 E+ N& o' e" b* O6 D% h/ B
- print self.CaterId p+ s9 T7 v, Z4 Y" b
- url = self.base_url1 + str(self.CaterId) + self.base_url2 + str(self.page_num) + "/" / R. r; M8 g3 \, \, `
- self.crawl(url, callback=self.list_Caterg,save=Cater_Name)
$ \! ^) v& [! Y" l/ [' t - self.page_num += 1
7 D5 ` l1 Q7 `& B6 S% Z - 9 ]$ X& w# w7 I1 |8 D/ L
- def list_Caterg(self, response):
' Z$ ^* h' C. t5 t- _ - Cater_Name = response.save: _, I5 U9 H, R. {7 G
- for each in response.doc('.pic-list a[href^="http"]').items():$ d G: ^& S# ?1 l ^% l! I9 p- ~
- self.crawl(each.attr.href, callback=self.list_Caterg_detail,save=Cater_Name)
n9 w' a- l1 P) K) D0 G& T; ]; u' w - 3 A4 U# p6 O5 W% Q* m+ i2 f
- def list_Caterg_detail(self, response):
: K7 c/ \! k3 D$ A t - Cater_Name = response.save; S% i4 e$ z% j' E
- # print Cater_Name
* a7 {" C1 N- ]- }) c - Bookname = response.doc('h1').text()
4 C s- b9 O* w - print Bookname
2 B# Y* v V$ r( h1 g; @ - Book_author = response.doc('.authorname > a').text()" [$ o) r- ~6 e$ E+ R( F& ^9 N5 J z4 J
- # print Book_author: u0 P4 N( i; D
- Book_Introduction = response.doc('.book-intro > div').text()
- i1 F. |' ]1 o& |8 u. ? a' [ - # print Book_Introduction
# c% N6 D/ X4 w, I - Book_Synopsis = response.doc('b').eq(1).text()* b; W- k' h( \
- # print Book_Synopsis4 M9 {3 e, L5 G L9 c1 B6 L0 q& a
- Book_Palabras = response.doc('.booktitle p').text().split(' ')[1].split('|')[0]2 j1 U. l" {1 L
- # print Book_Palabras
8 V( [' X7 w4 ] - BookIDs = response.url.split("xiaoshuo/")[-1].split("/")[0] #小说ID8 R: d- q9 v: r+ D
- # print BookIDs
- H/ w; o/ }% [2 X* Y$ O- [ - Book_Dates = str(datetime.datetime.now())
3 g2 M$ ^ g* P) D - for imgs in response.doc('.bigpic > img[src^="http"]').items():* M. e9 \: W0 l$ m7 x# l9 j
- img = imgs.attr.src' Z& \' S5 w+ @
- print img
% S! ? K3 m3 G! ^0 d - #小说封面下载2 O! ~* l6 U G+ z! O
- extension = self.getExtension(img)
, L/ A3 ~. s7 h+ p2 U/ g( \3 | - name = self.getname(img)
) N) k( N. _, S - file_name = name + "." + extension2 \( [) L! V' W1 w& }
- imgDir = P_dir + name
- c6 ?/ N: i# e7 R9 x - Locaimg = imgDir + "/" + file_name. p6 m" x3 N/ s# A" B }1 R; h
- print Locaimg
- b' A; j+ |( s - if(self.download(P_dir, imgDir, file_name, img)): #这2行可注译,图片下载到本地* y# O" }2 j5 C6 u% w
- print('attachment url is ' + img) #2 b* z, p. _( N# ~! z8 f
- Datos = {
' |! z# y) I, o( F. f- f- f7 } - "Cater_Name":Cater_Name,- u: c# O3 [& z$ ]' V
- "Book_author":Book_author,
! l2 E& {7 Q" z8 ` - "Book_Introduction":Book_Introduction,
% Y) r7 r9 a' ~0 z; T8 I - "Book_Synopsis":Book_Synopsis,; s& i- d* I# J' k
- "Book_Palabras":Book_Palabras,, H8 y/ R6 t) V) w
- "img":img,9 o" e7 F6 D' H1 E; A
- }
7 g: _# E6 e# C8 q" V - self.add_BookFile(Bookname, BookIDs, img, Locaimg, Book_Dates) #这行可注译,数据库发布接口,方便其他系统的发布
2 r/ N% ]0 g- _$ n8 Y - for each in response.doc('div[class="bookbtn-txt"] a[class="catalogbtn"]').items():
% p; h# d3 u: l, v - self.crawl(each.attr.href, callback=self.index_page,save=Datos)1 k1 C4 C, n- Y& A. q9 B
-
1 r5 T# b C% y" i" T! h$ o - @config(age=8 * 60 * 60) # \7 `$ @) w/ U; U
- def index_page(self, response):
' F* E% t0 x+ g( B) k( N$ z! \ R - Datos = {
8 V% n* j! z1 _0 F( b% } - "Cater_Name":response.save['Cater_Name'],
. X5 v' k; a8 x3 K9 n M - "Book_author":response.save['Book_author'],
1 K- r" @7 B3 `8 F# U. p4 m7 w* K - "Book_Introduction":response.save['Book_Introduction'],3 {+ s h- Q+ h1 K! Q8 p( V3 l6 R
- "Book_Synopsis":response.save['Book_Synopsis'],
, l6 j4 g9 V5 l9 X- w8 X: z* q% p! A2 q c - "Book_Palabras":response.save['Book_Palabras'],; x1 w( O% r4 R: S. d
- "img":response.save['img'],4 x! C! z2 E& Y% r9 }: Y8 r& u
- }
2 q, A a1 Q3 S5 ~ - for each in response.doc('.chapter-list li:first-child a[href^="http"]').items():
9 F) V# ?, u3 O1 }% ^ - # for each in response.doc('.chapter-list a[href^="http"]').items():
1 i' ]8 h6 W+ z! c9 Y - self.crawl(each.attr.href, callback=self.detail_page,save=Datos)
2 r; }& {+ j# j# O - @config(priority=2)
3 O; Q& A8 k: g9 n - @catch_status_code_error" p' c1 B7 i5 |6 E3 N, }; g
- def detail_page(self, response): 1 ?5 u/ s; ^& r4 O0 j
- NewRe1 = u'哈书'$ q$ b# n! Q$ L6 H
- NewRe2 = u'huhjsd.CC'
; f: _6 t, v; [6 ~& o3 Q - NewRe3 = r'^\\n\\n'& l! q) ] }! F6 F3 M
- NewRe5 = u'小说网'* _9 k" f8 N# i
- NewRe6 = u'fgdfgf'
4 o# \) G/ b. r: x. t$ N/ y8 n# b: Q - NewRe7 = u'fgfgf'% b; }9 B( c/ N: O0 A: f' x0 g
- NewRe8 = u'ffhgf'
# [; P8 V8 _) q* f - NewRe4 = r'[\f\t\v+\.\{\(\)\}\!\/_,$%^*(+"\')]+|[+——()?【】“”!,。?、~@#¥%……&*()]+'
' u- A+ @ t4 g5 K - ReC1 = u'静思'
3 T* F- c) n5 K - ReC2 = u'aghgf.com'
0 D% s2 r0 J/ H; i! v% H8 a - ReC3 = u'aghgfh.com'
) ^5 ^0 |* |5 ~ - ReC4 = u'') K9 C3 ?& q2 T( T$ y0 `, X# V
- ReC5 = u'文学网'' G" K3 @/ Z) L! o- j( p/ F) F6 u
- ReC6 = r'<BR>'( E. B1 s8 E$ x- `% D
- Bookname = response.doc('.readlocation a').eq(2).text() #小说名称% E7 {. [4 Y7 `9 P4 E
- print Bookname
( q0 |. E j# H: X4 t - Cater_Name = response.save['Cater_Name'] # 小说分类
3 R& u3 Z" @* u; f - Book_author = response.save['Book_author'] #小说作者
7 t* u2 N9 i8 B - Book_Introduction1 = response.save['Book_Introduction'] #小说简介2 f5 F5 d' z1 z7 ?
- Book_Synopsis = response.save['Book_Synopsis'] #最近更新4 P. o5 E: L, n3 e6 T4 \
- Book_Palabras = response.save['Book_Palabras'] #小说字数! w( q& l' \% ~
- Bookurl = response.url #小说网址* y0 V9 M5 L- T& [" w. N
- Booktitle = response.doc('.article-title').text() #章节名称$ z) Y; L8 b# s3 E9 X- [# E2 N
- BookID = response.doc('.readset-r span').text() #小说ID
9 s7 q& F! H$ z8 E& U - BookConte1 = response.doc('.article-con').text() #小说章节内容7 K2 {4 Z! q0 E5 w! F
- abover = response.doc('.article-title').text() + response.save['Book_Synopsis'] + response.save['Book_Palabras'] + response.save['Book_Introduction'] #小说状态(连载还是完成)
: Q* [4 b( B7 c' V/ W - Book_Date = str(datetime.datetime.now()) # 采集时间
$ n5 f/ R. s) q9 s - BookConte2 = BookConte1.replace(NewRe1 , ReC1)
1 a* n% p) a1 w9 d& f8 g% p - BookConte3 = BookConte2.replace(NewRe2 , ReC2) t3 z9 V3 O3 Q; c
- BookConte5 = BookConte3.replace(NewRe5 , ReC5)
$ D/ R* j+ b8 g$ E# m% x - BookConte6 = BookConte5.replace(NewRe6 , ReC2)
4 g \, h* k$ Y i - BookConte7 = BookConte6.replace(NewRe7 , ReC2)' U0 B$ L T( h# S$ F$ `
- BookConte8 = BookConte7.replace(NewRe3 , ReC6)1 G: K5 N) f' b' s& U
- BookConte4 = re.sub(NewRe4 , ReC4 , BookConte8)
$ R2 Z+ o E, f( t) X, b - BookConte = BookConte4.replace("\n\n","<br>")
~3 t8 e. y+ H( a; D% O* I4 Q - print BookConte8 l Q9 K V: j) `/ _0 _2 O- x9 a
- Book_Introduction2 = Book_Introduction1.replace(NewRe1 , ReC1)
7 Q: S* h9 _& b6 T - Book_Introduction3 = Book_Introduction2.replace(NewRe2 , ReC2)
. s$ J0 Z9 u, N$ Y0 n5 @1 n7 P - Book_Introduction4 = Book_Introduction3.replace(NewRe3 , ReC3)9 o$ @4 t) Y% n' v
- Book_Introduction = re.sub(NewRe4 , ReC4 , Book_Introduction4)8 C- o" d1 n+ d! [9 {( T0 w8 ~6 r
- Titleid = response.url.split(BookID + "/")[-1].split("/")[0] |0 Z! a3 V! T
- Book_img = response.save['img'], #小说图片
. V; H9 r( H; t - + {4 W" d1 T% m( f$ B
- #insert into MySQL 小说入库' h( y. p. M" `1 a% d, j
- self.add_question(Bookname,Cater_Name,Book_author,Book_Introduction,Book_Synopsis,Book_Palabras,Bookurl,Booktitle,BookID,BookConte,Titleid,abover,Book_Date) #这行可注译,数据库发布接口,方便其他系统的发布+ F* p# ~( l! z2 s4 {$ y c
- self.add_comment(Bookname, Booktitle, BookID, Titleid, Book_Date) #这行可注译,数据库发布接口,方便其他系统的发布
1 V$ ]' x8 \6 n3 {1 j - #post提交发布
6 H' \- ~$ y. y, r0 E& ?$ w" c - self.add_locoy(Bookname,Cater_Name,Book_author,Book_Introduction,Book_Palabras,Book_img,Booktitle,BookConte,abover) #这行可注译,火车头发布接口,不需要可取消
% h: c7 G: m( q' P! ]" \ - Datos = {9 n% U( B. S$ w7 G
- "Cater_Name":response.save['Cater_Name'],
: ~% A1 \! O& T6 B8 u - "Book_author":response.save['Book_author'],- O: ], C4 C( X' ~$ O
- "Book_Introduction":response.save['Book_Introduction'],, m- k5 u h2 c- R
- "Book_Synopsis":response.save['Book_Synopsis'],
8 g# V A; ~9 I( g9 v+ H; P - "Book_Palabras":response.save['Book_Palabras'],
2 n5 V, p5 o; B0 g7 `! ?. A4 b( C" g - "img":response.save['img'],' o I, R$ T. q4 _7 L2 T
- }
- Z( S) j6 t& ?1 T+ G D - for each in response.doc('.articlebtn > a:nth-child(4)[href*="/xiaoshuo"]').items():; k, S6 V: l3 v4 N* N* m" h6 W
- self.crawl(each.attr.href, callback=self.detail_page,save=Datos)
. P$ D% B: E% }1 t( j: q& l - return {# _ m% i8 C U% `' u: Z
- "Cater_Name":Cater_Name,
6 F4 `9 z8 n! B/ g3 n - "Bookname":Bookname,1 Q* S Y$ [4 j; S
- "Book_author":Book_author,. h) b" P/ q( {! V2 b/ y f0 h
- "Book_Introduction":Book_Introduction,! ?$ y. e: Z: G7 I+ { b
- "Book_Synopsis":Book_Synopsis,3 ^9 D4 U9 z2 T" ?
- "Book_Palabras":Book_Palabras,9 a. A8 d5 `' G+ i' w
- "Book_img":Book_img,
4 A- t; R- z8 K' |4 ?$ j - "Bookurl": response.url,$ \6 l4 [! T* \! F' o, D2 x
- "Booktitle": Booktitle,
6 o0 A8 K& }4 S2 T% }# B - "BookID": BookID,# a* e2 E( u/ |; ~( j
- "BookConte": BookConte,
& m. T* [" ~: G - "Titleid": Titleid,
, o7 J$ z' V- r: ~4 E! l6 C w+ ? - "abover":abover,
+ o" ^! N6 Y o; \ - # "Book_Date" = str(datetime.datetime.now()),
/ c7 K2 F0 C* |9 | - }& D# Z$ K) M; q# G* ~; S$ }
- def download(self, P_dir, imgDir, file_name, Book_img):3 M$ p8 s1 F7 X
- if not os.path.exists(imgDir): 2 |# l* G& K# B7 r) ~. {
- os.makedirs(imgDir)
1 Z& H- ~6 X/ H8 U, f - file = imgDir + "/" + file_name D6 y2 S4 v$ l7 t. }; ^$ _/ F
- # print file
* U/ f8 c- C- d @' g - f = open(file, 'wb+'). Z5 }7 l$ u$ S8 h& _
- imag = requests.get(Book_img)
, u( E8 e) a3 Y( {5 Y4 P* d( h - f.write(imag.content)$ J0 X/ |+ H4 P: [6 |% u5 ^3 l0 x
- f.close()
; w9 J0 \6 j) A5 D9 y! J - #保存图片前
9 q* u: u p: X L% S - def save_imgs(self,response):% C8 Z( X6 v0 w* y' i* l* H- U3 k1 E
- content = response.content* P3 U# G$ s% g0 V. F
- file_name = response.save["file_name"]
2 O6 n' n! V& n7 l - imgDir = response.save["imgDir"]
8 m8 [6 F2 z* V( v1 \! V/ I - file_path = imgDir + file_name
( e" G* g# i+ W" I v- X6 Q j - self.save_img(content,imgDir,file_path)5 p) \. q( X3 x( O
- #保存图片
5 B4 A D7 g7 ~1 H+ x6 [+ A8 _ - def save_img(self,content,imgDir,path):4 |6 X8 o) E" z/ S0 M) u2 i6 W; a
- if not os.path.exists(imgDir): : B$ s1 r8 H% X2 g$ g
- os.makedirs(imgDir)
9 r3 T* s$ r. g2 d - f = open(path,"wb" ) \& j2 F" I( Y1 `, l5 S- I; k
- f.write(content)" `$ x. I* P2 \# |" N
- f.close()
$ \/ [) [7 H1 n0 E; n4 x& D$ R - #获取url后缀名
2 @1 ?' Q( {2 x4 Y* B - def getExtension(self,url): 5 y" B8 c. p. z' Y' o5 f
- extension = url.split(".")[-1]
2 p: g: R) @* g( y# o - return extension
/ X2 [8 K: U" V -
! c& w: n. w' ]3 O - #获取图片名3 [" p o1 ~" [6 ?" F$ n
- def getname(self,url):
1 \2 C9 `% \0 f; ^! k: F - name=url.split("/")[-1].split(".")[0]$ { X% X0 j$ o8 D
- return name
复制代码
% s! p. R9 _- }& g' O+ B: B 7 M% E$ T0 p& ?8 {$ C- M
|