Python + pyspider某小说站的爬虫,入数据库,火车头发布,资源下载到本地,另可写爬虫!& E1 r& ]- x; |3 k @ G8 A K
- #!/usr/bin/env python3 o5 W- t1 I9 \* y' h
- # -*- encoding: utf-8 -*-
! N) _, b) ?1 D5 h5 d, d# E - # Created on 2019-05-05 21:43:11( c7 H! x* @; l+ O# b4 {
- # Project: XiaoShuo
1 l: I( G h: O4 w - ( y, s! m3 d9 M+ W$ k' y r
- from pyspider.libs.base_handler import *
' v! c* e! a+ }. t2 Z1 A* x - import pymysql
) p+ O8 N0 B: Y& Z0 K7 ] - import random
* j7 E' h# q0 Y2 r7 A( O, J7 a - import datetime
" k2 l6 r0 ^( ^" I: F - import urllib2,HTMLParser,re
7 F" f# k6 S1 q& N- ~ - import os9 }7 c9 Q3 |% k% L
- import sys9 J. U6 [* X" U# p) A& v' M% e: a
- import re
% Q2 v7 d9 @6 u7 ] - import codecs
! @4 B9 i, V2 z! F9 s - import requests
7 x' x1 |; p- A. f) a* w - import json' }9 Y' L% W, [
-
4 p% F/ X+ p6 V% G2 M8 V( b8 Y$ n - class Handler(BaseHandler):
; {6 `# }) B2 h; M, X9 s! x/ h - global Datos1 C. u% B9 R5 {! |) ^& v' I/ z' y
- global P_dir 8 \6 ?' _; k+ B. z' R
- P_dir = '/Tools/Debug/' #采集时候图片保持到本地的路径* H7 p$ _. i+ \8 \# D& k0 H) [
- global Datos
( i; Y/ w& p. F. j V7 e - Datos = {}
8 |: d+ x( Z8 m+ C0 M3 c - headers= {/ Y% F* P. x! i, _) c9 [" I, b4 G, w, {- H
- 'Accept':'text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,*/*;q=0.8',% V# J/ }7 L- m' b; V
- 'Accept-Encoding':'gzip, deflate, sdch',+ h; T6 \7 ]& V! p! y
- 'Accept-Language':'zh-CN,zh;q=0.8',. C" {- \9 h& H2 P$ S
- 'Cache-Control':'max-age=0',: r6 I/ Z0 r4 ]' j8 E* S
- 'Connection':'keep-alive'," y( o0 \" `" t4 B
- 'User-Agent':'Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/41.0.2272.101 Safari/537.36'
! c U8 q: L: B6 y. B; e+ G' b - }$ |3 ~& \ p. k+ J/ E+ _
- crawl_config = {
" x! D! ~" v, T% k - 'headers' : headers,
5 X* f) ~7 O4 \% y9 n0 {; j - 'timeout' : 300
$ r- g) T- j! x: s6 ~% Z - }
+ T4 ~% L/ j% K' k3 p - def add_BookFile(self,Bookname, BookIDs, img, Locaimg, Book_Dates):
% _ T5 n0 {9 c - db = pymysql.connect(host="localhost",user="数据库用户名",password="密码",db="数据库名",charset="utf8"): L& W2 P% J9 n4 u
- try:3 z G6 j" G! a+ c9 i
- cursor = db.cursor()* X* r7 @& ?2 N1 R! q9 Z) ~
- #注意此处字符串的占位符要加双引号"%s"
! }; q, k) G4 e - sql = 'insert into BookFile(Bookname, BookID, img, Locaimg, Book_Date) values ("%s","%s","%s","%s","%s")' % (Bookname, BookIDs, img, Locaimg, Book_Dates);
2 h+ A5 P6 C d x5 s - # print(sql)
5 A" B: \3 y+ E. \( ^' v, E - cursor.execute(sql) c7 K" ]' ~& {4 n% S: z
-
! h' G& K6 v5 h% f% q - #qid = cursor.lastrowid
. e" D7 T8 S, Z4 C: Q1 ]# M3 q - #print(qid)
. e/ K4 n1 x4 ^+ d - ) a- z5 F+ }- l/ L7 u F# o% w8 c
- db.commit()5 L4 \' s, L5 R+ @/ b
- except Exception as err:
& o) E0 O2 H6 C- a1 k - print("Error %s for execute sql: %s" % (err, sql))& j- x9 W4 a# l3 q
- db.rollback()6 H: o C2 V- y
- def add_comment(self,Bookname, Booktitle, BookID, Titleid, Book_Date):2 A; Q1 v" t; k8 d) K
- db = pymysql.connect(host="localhost",user="数据库用户名",password="密码",db="数据库名",charset="utf8")3 h4 C/ S. h3 a; P" g
- try:
5 D7 Y/ n7 {4 _) K3 t6 D - cursor = db.cursor()
/ Y, ]1 o" p" C' Z4 z - #注意此处字符串的占位符要加双引号"%s"
' y8 U% Y# W- l7 G/ {! n) ?3 \/ P0 Z - sql = 'insert into BookTitle(Bookname, Booktitle, BookID, Titleid, Book_Date) values ("%s","%s","%s","%s","%s")' % (Bookname, Booktitle, BookID, Titleid, Book_Date);7 b. y0 ]8 M$ q: X
- # print(sql)
. l, d0 f) e1 P' E% V1 @ - cursor.execute(sql)# A0 n; u% w3 F; v! [9 T# D1 {
- " J' R. D3 }4 Z$ E/ e
- #qid = cursor.lastrowid! @2 n$ j/ M8 {
- #print(qid)- [4 R# I, X$ @6 Q F
- $ a& w* S2 H; M0 \' G
- db.commit()/ Y4 { Y; ?- O% V1 |7 t: h! P
- except Exception as err:8 i% u! |2 y- X. r' w- C
- print("Error %s for execute sql: %s" % (err, sql)), ^/ k. _$ ^7 h6 q( p/ N
- db.rollback()6 X3 F- Z+ T$ t# c8 i2 z
- def add_question(self,Bookname,Cater_Name,Book_author,Book_Introduction,Book_Synopsis,Book_Palabras,Bookurl,Booktitle,BookID,BookConte,Titleid,abover,Book_Date):
2 Z S( W. W4 t% m - db = pymysql.connect(host="localhost",user="数据库用户名",password="密码",db="数据库名",charset="utf8")
$ ^, n, S$ i! B% t8 [ - try:0 i$ d8 x; }2 I0 h- k
- cursor = db.cursor()8 S3 _) R+ j1 \; w0 b
- #注意此处字符串的占位符要加双引号"%s"
6 j; O0 G$ W3 u7 n- M - 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);
+ I( b4 G9 T* m$ ~/ } u% b1 p; v, P - print(sql)1 _: s" x5 L+ C" ?
- cursor.execute(sql)
) v: G; h+ j/ c& Y& a: o/ i - print(cursor.lastrowid)
7 { C% j9 x1 a c - db.commit()8 J9 V/ l1 o) U! g
- except Exception as err:4 Y4 _5 p J! W; R
- # except:
" K2 `8 B! k' _+ U% E4 |3 M - # print('Failed')
$ T- l; c3 T& x6 K2 J2 Q - print("Error %s for execute sql: %s" % (err, sql))
4 H; r' n* B B. ^( U5 V - db.rollback()
9 P6 ~7 }: ?% a& b& r. a - $ d" b5 ?. X B7 F
- def add_locoy(self,Bookname,Cater_Name,Book_author,Book_Introduction,Book_Palabras,Book_img,Booktitle,BookConte,abover): - q Y ^! v: M, ?
- reload(sys)
3 ~2 }0 J$ F( w) A - sys.setdefaultencoding("gbk")
6 {' v0 v% N$ i ~4 x2 k( }( l - locoy_url = 'http://www.******.net/locoy/?my=book' #697火车头发接口地址, |" s0 R. b( t5 B- K/ x" x
- locoy_data = {
: e7 V. J: \$ l) N( [( Q( E - 'my_u':'用户名', #后台用户名
& W8 } Y) r" f, j# ~, r - 'my_p':'密码', #后台密码! ~2 ?, X( D" O
- 'subject_669977_net':Bookname.encode('gbk', 'ignore'),) M2 S/ y) A$ }9 l; L/ V
- 'caid':Cater_Name.encode('gbk', 'ignore'),2 q# X W7 Y& T4 z) ~# D
- 'title_669977_net':Booktitle.encode('gbk', 'ignore'),
& V' o( J7 d5 s- s* m/ Y9 I - 'article':BookConte.encode('gbk', 'ignore'), Y- v8 k* |$ e$ j' E
- 'author':Book_author.encode('gbk', 'ignore'),
+ U% n- w- S4 W - 'ready_1':Book_Palabras.encode('gbk', 'ignore'),2 i$ }$ o4 _. h, z) E! d
- 'thumb':Book_img,2 X: b7 J0 o5 K# n
- 'content':Book_Introduction.encode('gbk', 'ignore'),
8 o% n* E" R- P7 B, n% `' N - 'abover':abover.encode('gbk', 'ignore')
' r! j! D Q, w3 @: k% x3 w - }
N# U! I }1 C; i' Q; s, U - res = requests.post(locoy_url, data=locoy_data)
% C W3 H3 L/ L" o2 l8 r" W! l - print res.text7 h. g6 K( I' }- [: |7 g8 f
- print res.content
7 A& _; f" f3 y - # print Dsd! a9 w' \4 F8 ]+ i
- return res
, R. l/ X1 r* Q/ j -
" ]9 u. m4 V6 [2 P$ |" a% l - def __init__(self):
4 H8 C( O, E* W5 b5 O - self.base_url1 = 'https://www.****.cc/'
1 @( u. k6 h( O# z9 p$ y& _ - self.base_url2 = '/'
1 f6 i+ G. \$ \- v* f - self.CaterId = []- v& E6 L# Q9 {$ N$ J+ x' s
- self.CaterIds = ['xuanhuan', 'wuxia', 'yanqing', 'lishi', 'kehuan', 'kongbu', 'nvsheng']7 G4 z/ n6 b" h1 r9 F
- self.page_num = 13 E; W P) @6 _8 G4 e+ e% ?- r
- self.total_num = 200 6 U4 i3 [, p2 ]
- % W( f0 b- W6 W) X }
- @every(minutes=8 * 60)
1 s2 S% N6 h" z$ A# l - def on_start(self):
. M% ~1 L1 \: |$ h! S - global Cater_Name- V( R' l* x6 A/ D! ^8 P- O! i/ @# m
- Cater_Name = []
0 M/ {: u0 ~; F" F$ P f/ \ - while self.page_num <= self.total_num:
; U9 C4 ]3 ]6 ~" \1 N% Z7 G" I( G7 [ [ - for self.CaterId in self.CaterIds:9 b4 X* k6 k3 A! O: g; ]
- if self.CaterId == 'xuanhuan':7 L5 D1 P' _5 ^$ e: [$ V% Q9 v
- Cater_Name = '玄幻'
! q; t- X+ q& u( K- L* f6 B" ` - if self.CaterId == 'wuxia':1 O2 }6 t L9 k! B! [
- Cater_Name = '武侠'
- E5 \& B# h: W# E - if self.CaterId == 'lishi':
% t9 F. z# T4 W% J0 y7 J( _8 g3 b - Cater_Name = '历史'
. ]8 g" D/ W5 y9 m0 N+ g6 F - if self.CaterId == 'yanqing':" K. Q- j' G2 o5 l& [) U8 e2 W
- Cater_Name = '都市' 8 g3 r7 c. l' o$ `# Z a* N
- if self.CaterId == 'nvsheng':
; V( J# q% h; m5 S: k+ E9 u2 ^& A - Cater_Name = '都市' + n# C' N8 v6 p2 D7 S
- if self.CaterId == 'kehuan':
' B' x+ f" Q7 o3 i8 N - Cater_Name = '科幻' # |1 @7 G( c0 y
- if self.CaterId == 'kongbu':
D1 z4 @/ x" X1 O( j4 c2 O' C - Cater_Name = '游戏' + V2 M% t) t9 V1 [% {
- print self.CaterId
3 `4 k- }+ R/ O# A - url = self.base_url1 + str(self.CaterId) + self.base_url2 + str(self.page_num) + "/" 0 i1 n' P) \1 }
- self.crawl(url, callback=self.list_Caterg,save=Cater_Name)8 E( N C% |1 r: [6 G
- self.page_num += 1 $ l. n# x$ I0 } [2 D- _. G
- & K/ n& U- Y! T2 c' r' E) y
- def list_Caterg(self, response):1 s; p: j' g$ }9 T
- Cater_Name = response.save
$ v4 {# S& L0 M" B% b - for each in response.doc('.pic-list a[href^="http"]').items():
$ l }: A2 Z/ t - self.crawl(each.attr.href, callback=self.list_Caterg_detail,save=Cater_Name)2 L s+ e8 b5 Y5 i6 E0 M
- ; O, u! k$ p7 N2 H9 j2 q9 O
- def list_Caterg_detail(self, response):0 [% g1 J) I: X/ B
- Cater_Name = response.save
r$ A( u' f! R4 o - # print Cater_Name
8 ]/ i S4 Y! T# U2 m) j - Bookname = response.doc('h1').text()
' z; v* l1 l0 S1 ?/ ] - print Bookname! U1 e& e; S+ ^8 j8 t9 S
- Book_author = response.doc('.authorname > a').text()6 V& i1 I2 \/ O- f7 {
- # print Book_author2 x* X8 A; U P3 f. C
- Book_Introduction = response.doc('.book-intro > div').text()
* o* l2 ~/ K \/ n% \0 i - # print Book_Introduction
' \7 }0 @+ ]0 j5 u4 y+ [$ G6 q" H - Book_Synopsis = response.doc('b').eq(1).text()
- {* X0 v9 l7 ~9 K& | - # print Book_Synopsis
$ \1 x; D5 @0 I' l - Book_Palabras = response.doc('.booktitle p').text().split(' ')[1].split('|')[0]
( ^! X3 l R9 I6 G - # print Book_Palabras
5 ?& v2 W% T+ G+ G7 g8 J/ C - BookIDs = response.url.split("xiaoshuo/")[-1].split("/")[0] #小说ID
9 K- @$ \! @" z7 y( z - # print BookIDs
, `# O8 C/ A% F. @/ ^. t, ` - Book_Dates = str(datetime.datetime.now()) / N5 z8 Y" E9 l5 G3 M& G) h9 p$ c
- for imgs in response.doc('.bigpic > img[src^="http"]').items():
* V5 z" R5 I1 [/ q9 f - img = imgs.attr.src
4 p% G4 O+ s$ Y; _1 H - print img
% ~6 I6 p) d. H3 N& g - #小说封面下载" X$ y9 ~# f' l4 c1 D; W
- extension = self.getExtension(img)
7 V! y3 O4 b7 | - name = self.getname(img)
$ Q6 i$ A1 N* u! t6 y$ } - file_name = name + "." + extension$ C& \% b" S& P' Q {# u
- imgDir = P_dir + name
/ \! I4 \' c" A6 E7 j' T: C - Locaimg = imgDir + "/" + file_name& Z4 _) g, g; w* r. [
- print Locaimg
0 a+ [/ t( [" X - if(self.download(P_dir, imgDir, file_name, img)): #这2行可注译,图片下载到本地
: H2 V C1 P% _2 e; |* V4 Q4 _( J - print('attachment url is ' + img) #
8 f1 M" q+ n* r# t0 c - Datos = {
5 S7 r. ^) A3 J - "Cater_Name":Cater_Name,2 [( x1 X [; ~- N, O% W2 s
- "Book_author":Book_author,$ f7 h2 q- { M7 [1 T2 m" [6 G. u
- "Book_Introduction":Book_Introduction,
7 I& T; I) B; k - "Book_Synopsis":Book_Synopsis,4 s% f1 [/ X& z5 l) t
- "Book_Palabras":Book_Palabras,$ H6 _ L$ G. A; k4 W1 `
- "img":img,
3 P8 |7 E& U! P/ ~" S6 y - }# C0 {" M& r/ t6 Q) i8 f
- self.add_BookFile(Bookname, BookIDs, img, Locaimg, Book_Dates) #这行可注译,数据库发布接口,方便其他系统的发布
7 F2 M( @+ h. R2 D- A3 Z7 @ - for each in response.doc('div[class="bookbtn-txt"] a[class="catalogbtn"]').items():
! V: @! A8 |$ {9 z - self.crawl(each.attr.href, callback=self.index_page,save=Datos)7 R3 n; H# o# y1 p2 {
-
: n+ i6 d4 w2 N: X; s - @config(age=8 * 60 * 60)
4 t5 S/ Y% K- e T# q2 m - def index_page(self, response):
+ J) C2 s0 U( u) U9 Z - Datos = {: g7 O- }6 @" V* c3 }* ?
- "Cater_Name":response.save['Cater_Name'],; M& a. q" s# V6 j
- "Book_author":response.save['Book_author'],: y/ k3 ^: S# p
- "Book_Introduction":response.save['Book_Introduction'],
( V$ ]$ b" ^+ U" X3 b - "Book_Synopsis":response.save['Book_Synopsis'],
8 E u |6 i0 s! x; h - "Book_Palabras":response.save['Book_Palabras'],# {) X7 _5 _& w$ Y7 K3 q# I
- "img":response.save['img']," v7 F! g- d; V$ S8 z' p
- }
~1 k3 W( s1 @( M' d5 l4 @7 g - for each in response.doc('.chapter-list li:first-child a[href^="http"]').items():
' q7 {7 @* y3 _9 a0 \0 P4 w8 y - # for each in response.doc('.chapter-list a[href^="http"]').items():
. E' k; N8 T8 Q! W5 f7 }; W - self.crawl(each.attr.href, callback=self.detail_page,save=Datos)0 h& a- i d! }0 K! \ z2 u! E
- @config(priority=2)* L3 O% a4 z0 R5 |& ~
- @catch_status_code_error
! ]) S: a2 v! Y9 V" f - def detail_page(self, response): # d: ~% `8 E0 p
- NewRe1 = u'哈书'
3 K# c/ ~. A0 c - NewRe2 = u'huhjsd.CC'
9 Z; _7 T0 f3 {: W7 e6 c4 j - NewRe3 = r'^\\n\\n'
3 {% i1 M; H3 X3 E0 c6 K - NewRe5 = u'小说网'
% t5 V; r! X* |& `7 l- v - NewRe6 = u'fgdfgf'+ v7 l7 e$ L& ~: |: u9 {: R/ l
- NewRe7 = u'fgfgf'
! [7 _0 V! G+ l4 ? - NewRe8 = u'ffhgf'
7 F& x" s7 _( ~9 h* |6 | - NewRe4 = r'[\f\t\v+\.\{\(\)\}\!\/_,$%^*(+"\')]+|[+——()?【】“”!,。?、~@#¥%……&*()]+'
* S8 q$ q" b7 ?2 }& {3 W5 J - ReC1 = u'静思'" a A \' R9 I/ D. _
- ReC2 = u'aghgf.com'& V7 j) i, c: @3 S4 J& M
- ReC3 = u'aghgfh.com'
8 ?+ ^ M1 u: _- W - ReC4 = u''
+ j' K& e$ Y0 @" L8 C" q - ReC5 = u'文学网') L" u1 U/ U. M
- ReC6 = r'<BR>'
6 u+ x: e" Y0 d7 z: U, i7 n6 x - Bookname = response.doc('.readlocation a').eq(2).text() #小说名称& x% i' x8 F2 c3 u ]& t
- print Bookname
3 y6 }! B1 I0 G# R1 P - Cater_Name = response.save['Cater_Name'] # 小说分类. F2 ^3 f6 T; D, S
- Book_author = response.save['Book_author'] #小说作者6 G C% m }3 j7 n* {7 Z7 H
- Book_Introduction1 = response.save['Book_Introduction'] #小说简介
7 C$ q3 ]* N9 k' J% N - Book_Synopsis = response.save['Book_Synopsis'] #最近更新
2 S* M' C4 F' J" e: C1 M9 K. E - Book_Palabras = response.save['Book_Palabras'] #小说字数
Y: }& i( G, h1 }# ]9 F - Bookurl = response.url #小说网址
' E5 \( m6 @' j) b' @9 r - Booktitle = response.doc('.article-title').text() #章节名称
& Z, f3 G5 a7 j% Y9 O - BookID = response.doc('.readset-r span').text() #小说ID
4 p8 K! d) e! F - BookConte1 = response.doc('.article-con').text() #小说章节内容
5 u( [" t/ [3 J1 D# O1 h - abover = response.doc('.article-title').text() + response.save['Book_Synopsis'] + response.save['Book_Palabras'] + response.save['Book_Introduction'] #小说状态(连载还是完成)3 e2 p0 l' {2 W
- Book_Date = str(datetime.datetime.now()) # 采集时间& l7 W- W i$ b6 Y! L* d& j5 [
- BookConte2 = BookConte1.replace(NewRe1 , ReC1)- W& i* a$ h% y" W2 ?! |
- BookConte3 = BookConte2.replace(NewRe2 , ReC2)+ G: ^$ a9 @; d% O- d
- BookConte5 = BookConte3.replace(NewRe5 , ReC5)
1 X+ Y x' N- C0 m' L8 s1 K0 I+ G - BookConte6 = BookConte5.replace(NewRe6 , ReC2)/ j0 ^0 j7 z0 m' i; Z. m6 e6 A' H
- BookConte7 = BookConte6.replace(NewRe7 , ReC2)
z' ^) m$ `3 S8 i9 m" ? - BookConte8 = BookConte7.replace(NewRe3 , ReC6)+ D& v5 Y. M* Z2 K- P1 P: G
- BookConte4 = re.sub(NewRe4 , ReC4 , BookConte8)- w! z/ M$ W8 `9 A/ m0 t1 D2 G
- BookConte = BookConte4.replace("\n\n","<br>")2 A% L' G, |0 [' O7 z
- print BookConte
, w1 ]4 F6 Y! ] L6 v% P - Book_Introduction2 = Book_Introduction1.replace(NewRe1 , ReC1)
$ Q5 R+ O' Y4 u& X8 N. w" E - Book_Introduction3 = Book_Introduction2.replace(NewRe2 , ReC2)+ ? w0 L z: ]$ T
- Book_Introduction4 = Book_Introduction3.replace(NewRe3 , ReC3)
}* M! V; B2 |0 W/ d3 p2 b# m* g - Book_Introduction = re.sub(NewRe4 , ReC4 , Book_Introduction4)
7 m! D! C: F8 l - Titleid = response.url.split(BookID + "/")[-1].split("/")[0]
! T1 F( a- l8 i- o3 E - Book_img = response.save['img'], #小说图片7 Z5 e1 v- \. B# s3 p* H4 m) X7 j- W4 V
- * c" D. _. Y( H6 W" X+ D3 X- [! m
- #insert into MySQL 小说入库/ B/ G2 b8 q0 @) i* G
- self.add_question(Bookname,Cater_Name,Book_author,Book_Introduction,Book_Synopsis,Book_Palabras,Bookurl,Booktitle,BookID,BookConte,Titleid,abover,Book_Date) #这行可注译,数据库发布接口,方便其他系统的发布- v; T5 L3 W: W. P7 c% _
- self.add_comment(Bookname, Booktitle, BookID, Titleid, Book_Date) #这行可注译,数据库发布接口,方便其他系统的发布
! h4 ?3 k. N& K( x! G( Z6 }! K# A - #post提交发布
. j. J( v* g" s) Y4 k0 w/ n - self.add_locoy(Bookname,Cater_Name,Book_author,Book_Introduction,Book_Palabras,Book_img,Booktitle,BookConte,abover) #这行可注译,火车头发布接口,不需要可取消
9 t: Z4 w# [9 g+ @ - Datos = {- l' A# R7 B9 m4 c# v/ }" F- o) j5 \
- "Cater_Name":response.save['Cater_Name'], ]) o% G- F# m, G) w7 F7 G
- "Book_author":response.save['Book_author'],
1 c& f/ ], O; O - "Book_Introduction":response.save['Book_Introduction'],! G. G8 V. _# [% }' U( s+ W
- "Book_Synopsis":response.save['Book_Synopsis'],3 k3 l; j1 l& x/ e w' q0 _
- "Book_Palabras":response.save['Book_Palabras'],
+ m% y! @+ C, I3 o - "img":response.save['img'],
7 j- e4 n. @) V: Z) O( o/ h- t - }3 k0 A+ E0 e: C* e) N
- for each in response.doc('.articlebtn > a:nth-child(4)[href*="/xiaoshuo"]').items():. Z% G: I1 Y0 Z
- self.crawl(each.attr.href, callback=self.detail_page,save=Datos)
' u l/ k* P2 B# q \/ [6 K - return {. G' N' i0 u% }2 e7 U
- "Cater_Name":Cater_Name,
% m- I) ^2 b! ~/ O; p: h1 B* ~/ \6 n - "Bookname":Bookname,* s1 k T0 `) `& k( y" r, `
- "Book_author":Book_author,; g V3 V9 }8 g) e4 |
- "Book_Introduction":Book_Introduction,# ]2 h8 x2 o! e: a, e
- "Book_Synopsis":Book_Synopsis,6 M. U8 F+ X/ _% v) @8 B. N
- "Book_Palabras":Book_Palabras,) F* i1 O! @% U' m3 E# r
- "Book_img":Book_img,# e, F2 a4 f1 l$ p4 f1 R# E
- "Bookurl": response.url,) l- r4 y( P" q& F" i
- "Booktitle": Booktitle,
2 K! ?6 h1 e" ~7 P/ M5 Z - "BookID": BookID,* `9 E% i0 n! W4 s# s
- "BookConte": BookConte,$ @" \% N- m" g8 R; p2 f% v5 E0 @
- "Titleid": Titleid,
5 t5 ], h. a: e/ [0 W- Y - "abover":abover,
- Z$ b) N; v0 j8 E, g' U9 o - # "Book_Date" = str(datetime.datetime.now()),
5 ] H! U3 i0 U0 D# K- d, U P9 d$ r n - }$ l+ ]( a& z& U( d5 r/ c3 J& n
- def download(self, P_dir, imgDir, file_name, Book_img):
* W2 q# K+ b# ? - if not os.path.exists(imgDir): 0 z3 R! d4 U! j# M
- os.makedirs(imgDir)
& V$ E3 D) T: x* W$ q( c - file = imgDir + "/" + file_name9 e1 W) [* G. d+ z& M" y5 v
- # print file
$ B& b# g1 c/ Q$ ] - f = open(file, 'wb+')8 Y" g3 m1 B7 m
- imag = requests.get(Book_img)
5 l& n* f* c9 t) g5 ^+ [ - f.write(imag.content)
, j) y6 M; D( {( X0 V" g( W - f.close()1 y' ^$ X' Y( @ G3 c
- #保存图片前
' c$ V1 ?1 ^; T0 t& f3 ^ - def save_imgs(self,response):( X7 \- a& E7 c9 e0 w( O
- content = response.content- b1 v, I/ k v- l; g; x% }( Z
- file_name = response.save["file_name"]$ E# Q l" s ~; @
- imgDir = response.save["imgDir"]
8 s1 k8 R9 E$ f& Y) \" Q$ k1 f - file_path = imgDir + file_name( x y8 a1 N6 d) s9 Q
- self.save_img(content,imgDir,file_path)
" ~3 I+ `! w9 c) \7 I - #保存图片5 }- ?5 v# i" M; V* r1 @5 M, x
- def save_img(self,content,imgDir,path):2 ^- u" Z* n! Y: t- U* h( ^
- if not os.path.exists(imgDir):
+ U( g( C2 q- g% `' J2 M" m/ W' Y! n - os.makedirs(imgDir)
% o% I' x2 s- H# g& \* Z% U - f = open(path,"wb" )) n2 T# g5 \8 l* B" U+ L0 U- a3 Z' F% a
- f.write(content)
. T1 Y5 z S8 U4 L) n+ c! g- d - f.close()% \( o$ l7 h1 n2 v) k9 y( R- _4 \% c
- #获取url后缀名' }$ {1 C- W* T/ m8 F$ G. S
- def getExtension(self,url): " n& ^ S% R! K- O) j
- extension = url.split(".")[-1] i* r7 |7 Z" v9 o6 R. K# a" ~, f
- return extension
9 J$ Q2 t2 U' d3 A7 b L) u. L -
! E. V3 h% L" Q7 } - #获取图片名5 T8 k" ?! B8 t3 q$ V
- def getname(self,url):9 k9 n% e; @, c9 \
- name=url.split("/")[-1].split(".")[0]
( v" X( A u) K: s0 h1 H) y- S Q - return name
复制代码
b' m, Y$ W0 e3 F! y& W. f * U7 d: h! ^. M% |5 o; |) a1 Z
|