找回密码
 注册

QQ登录

只需一步,快速开始

搜索
热搜: 活动 交友 discuz
查看: 1470|回复: 0

Python + pyspider某小说站的爬虫,入数据库,火车头发布,资...

[复制链接]
发表于 2019-6-8 23:06:07 | 显示全部楼层 |阅读模式
Python + pyspider某小说站的爬虫,入数据库,火车头发布,资源下载到本地,另可写爬虫!
1 u" @' `# q5 q; ^
  1. #!/usr/bin/env python
    & d$ n; j2 P1 M% n& {/ F
  2. # -*- encoding: utf-8 -*-
    * r- K# J  k$ T! Z+ t/ c
  3. # Created on 2019-05-05 21:43:11
    ' g6 X4 v# u* @* T
  4. # Project: XiaoShuo7 L: s( M$ n0 Q& n7 t! @5 `4 m

  5. 4 _+ {/ q  ~. z- e1 H
  6. from pyspider.libs.base_handler import *
    : y; F# L9 |% a
  7. import pymysql! A+ l3 D5 z, @" S* M5 ?
  8. import random6 }* ]! [! Y5 m1 i/ |
  9. import datetime; F% P/ j" G4 U2 u
  10. import urllib2,HTMLParser,re8 \: P: @' p* F6 y2 I& [. J
  11. import os+ v$ q- K- v6 q  `4 \2 X
  12. import sys
    ( P' `* U8 U) r" b5 |
  13. import re
    - g( l  k( z9 I- h6 P
  14. import codecs* }* T: ]- u$ I
  15. import requests0 ^9 F' s0 V) D( U- y
  16. import json9 b% S$ W& f6 X: K+ r/ O
  17. . U" m; d. E) w* T2 Y; Q* A5 x
  18. class Handler(BaseHandler):- U  Z! H+ L: e# j8 u
  19.     global Datos
    - [7 X: {2 e* c
  20.     global P_dir   
    * f1 E0 O% B( g- x: }
  21.     P_dir = '/Tools/Debug/'  #采集时候图片保持到本地的路径
    8 _: ]/ Q" j; u
  22.     global Datos1 \6 q+ ~  N+ \1 u; I* _
  23.     Datos = {}- j, k8 J1 D  n. Z, i" k
  24.     headers= {  Y7 A+ Z/ X+ Z) {4 @0 u% d
  25.     'Accept':'text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,*/*;q=0.8',& q# s. N% I  Q# U8 A! z/ T
  26.     'Accept-Encoding':'gzip, deflate, sdch',  n# C( \* c6 t, f8 b
  27.     'Accept-Language':'zh-CN,zh;q=0.8',+ Q- ^9 u. u  t$ m  ^( ^3 R7 y
  28.     'Cache-Control':'max-age=0',
    4 p4 U% `+ I% q3 ?" }
  29.     'Connection':'keep-alive',- S. b. ^) C. K; ]1 ~
  30.     'User-Agent':'Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/41.0.2272.101 Safari/537.36'
    # ^/ ]8 i0 Z' k$ ~0 @6 s9 h2 ^
  31.     }
    . i# L% D. S% N1 J4 N, r3 n
  32.     crawl_config = {* v' a+ G6 y9 T0 z4 p. q: N
  33.         'headers' : headers,
    " M0 h* k( |8 T# E2 b4 K8 z
  34.         'timeout' : 300
    ; s; H  L) m9 f* f. f; V
  35.     }# Q- J% ]. ]2 d- U0 S
  36.     def add_BookFile(self,Bookname, BookIDs, img, Locaimg, Book_Dates):
    ( L$ Y2 }% A2 g- ?- n
  37.         db = pymysql.connect(host="localhost",user="数据库用户名",password="密码",db="数据库名",charset="utf8")
    / j- Y5 d9 N8 u* x9 g+ L( m: y
  38.         try:
    % }- C; B, N- f3 j1 P5 c
  39.             cursor = db.cursor()9 q3 ~0 p5 y5 Q7 z- E0 r* ?
  40.             #注意此处字符串的占位符要加双引号"%s". F  T, K+ ?% s0 G1 _$ |
  41.             sql = 'insert into BookFile(Bookname, BookID, img, Locaimg, Book_Date) values ("%s","%s","%s","%s","%s")' % (Bookname, BookIDs, img, Locaimg, Book_Dates);2 W7 r3 n! }$ Y% z
  42. #            print(sql)7 N$ R2 k; N& A5 D* {+ d
  43.             cursor.execute(sql)
    0 c: [& t, `6 J4 h  j
  44.               q/ b. j, j; I- G# w0 o1 ~( e
  45.             #qid = cursor.lastrowid
    ) {9 G/ N$ T8 }
  46.             #print(qid)
    8 V: r4 ^0 z8 {
  47.             : B+ P( N! s. P7 u  s
  48.             db.commit()
    0 U) H( t! G) T7 j
  49.         except Exception as err:3 {9 U  X6 C( l, N/ p* [
  50.             print("Error %s for execute sql: %s" % (err, sql))
    2 t# }" ?, C- H! q$ {+ r- z
  51.             db.rollback()1 {* d. e1 Z$ p0 k: r
  52.     def add_comment(self,Bookname, Booktitle, BookID, Titleid, Book_Date):, L3 f3 G9 X" i8 f
  53.         db = pymysql.connect(host="localhost",user="数据库用户名",password="密码",db="数据库名",charset="utf8")0 _/ K9 C; t& b0 ?) N- t
  54.         try:% Y* R' C2 |: N  B7 l
  55.             cursor = db.cursor()3 _! x/ x& E( ~2 L, D  o
  56.             #注意此处字符串的占位符要加双引号"%s"
    - U: U- Q# m& ~9 B; `
  57.             sql = 'insert into BookTitle(Bookname, Booktitle, BookID, Titleid, Book_Date) values ("%s","%s","%s","%s","%s")' % (Bookname, Booktitle, BookID, Titleid, Book_Date);$ F5 R% y+ I& q
  58. #            print(sql)
    : |$ \. C" U$ K1 W
  59.             cursor.execute(sql)
    2 |- R. s. C. ^& k
  60.             
    ) Z! p& M. O! W# x5 m, ^
  61.             #qid = cursor.lastrowid
    0 u. C, n: [. A2 ~) p
  62.             #print(qid)
    2 O( v, {" Z* a0 O0 p2 G7 g
  63.             3 E7 n# [2 `& S
  64.             db.commit()
    + q, Y) t7 I/ a; a' m* V
  65.         except Exception as err:: B. A) F9 f  \4 @! d
  66.             print("Error %s for execute sql: %s" % (err, sql))
    6 ^  K6 _2 X+ {4 s
  67.             db.rollback()
    ) \' y# F- V, u2 P1 L
  68.     def add_question(self,Bookname,Cater_Name,Book_author,Book_Introduction,Book_Synopsis,Book_Palabras,Bookurl,Booktitle,BookID,BookConte,Titleid,abover,Book_Date):
    . v1 b' Z) U9 I! U: @' }7 f
  69.         db = pymysql.connect(host="localhost",user="数据库用户名",password="密码",db="数据库名",charset="utf8")0 Y+ Q% s4 D$ S; o9 p, N
  70.         try:9 A8 N$ f) V, b; R0 [2 G
  71.             cursor = db.cursor()
    $ M/ ~: z  b+ W9 w0 j
  72.             #注意此处字符串的占位符要加双引号"%s"
    * \3 M" L4 [( A/ s
  73.             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);' t/ H! G3 P8 |
  74.             print(sql)( F, Y- X4 N+ A- ~+ G  p- N
  75.             cursor.execute(sql)
    . Z! O* h1 Q( B( ^, n
  76.             print(cursor.lastrowid)- T/ q. l9 m- Y* X; N' q3 v
  77.             db.commit()3 o  h( a6 X3 ~. F
  78.         except Exception as err:0 c& K+ O  T: R' L: y5 S4 A
  79. #        except:- x0 q0 K- ], b
  80. #            print('Failed')
    ; W7 d7 |  N/ |
  81.             print("Error %s for execute sql: %s" % (err, sql))
    3 }( T9 r! ?( N6 c
  82.             db.rollback()
    7 F' E- u1 `1 N
  83.         
    , i8 V3 z+ Z; q9 ]. L% T) c6 C
  84.     def add_locoy(self,Bookname,Cater_Name,Book_author,Book_Introduction,Book_Palabras,Book_img,Booktitle,BookConte,abover):
    ; q% E2 S9 \" L& b9 c2 E
  85.             reload(sys)- t& w3 o$ x. {- w% l2 j" j
  86.             sys.setdefaultencoding("gbk")
    " x  y0 b, l5 }2 }
  87.             locoy_url = 'http://www.******.net/locoy/?my=book'  #697火车头发接口地址* w4 F& [. V( b3 x# [8 U7 f  W
  88.             locoy_data = {
    . Q* p4 D' Y9 r0 U
  89.             'my_u':'用户名',   #后台用户名& L3 \+ v; p# r5 t, }
  90.             'my_p':'密码',   #后台密码4 ?8 k2 o. O" `" e5 v( S7 ~
  91.             'subject_669977_net':Bookname.encode('gbk', 'ignore'),9 y0 C1 }2 D9 X7 Q) n8 b0 z: M8 h
  92.             'caid':Cater_Name.encode('gbk', 'ignore'),* i5 C' J) a. j9 Y) e) W. j/ s  S
  93.             'title_669977_net':Booktitle.encode('gbk', 'ignore'),
    9 }% G/ l  }$ [: T3 p4 c: ~
  94.             'article':BookConte.encode('gbk', 'ignore'),' L4 B0 ?% O/ U' B0 S2 w
  95.             'author':Book_author.encode('gbk', 'ignore'),9 n3 c6 t1 O  d, d' s; [4 y* Z2 A6 K- R. v
  96.             'ready_1':Book_Palabras.encode('gbk', 'ignore'),, T% }# s6 P5 \% v* |
  97.             'thumb':Book_img,
    , S) I) c9 p9 d) q9 t5 `# L+ _
  98.             'content':Book_Introduction.encode('gbk', 'ignore'),$ ^+ k6 ~  T% [/ B7 C
  99.             'abover':abover.encode('gbk', 'ignore')           
    0 Y3 P# f3 Y" x, f( \! \
  100.                 }
    5 [$ y5 z) N  D& w
  101.             res = requests.post(locoy_url, data=locoy_data)
    - ~, `1 M$ o/ _8 M$ b
  102.             print res.text  }9 \) S; O! y# n1 g( }& B( H
  103.             print res.content
    7 b% e* d: e6 a' @. ?
  104. #            print Dsd
    - v9 `4 m, s7 x. i
  105.             return res* y& y0 j- ^5 R( [1 u5 y  a
  106.     - u5 W$ M  I7 I5 s  }- g6 s
  107.     def __init__(self):: w( p$ J6 @7 Z3 U6 M2 |
  108.         self.base_url1 = 'https://www.****.cc/'8 [& [; b0 A2 `  @/ c. U* U' o
  109.         self.base_url2 = '/'& G0 ?: b+ w2 e9 @* H( k
  110.         self.CaterId = []: m" v! J% u. H
  111.         self.CaterIds = ['xuanhuan', 'wuxia', 'yanqing', 'lishi', 'kehuan', 'kongbu', 'nvsheng']
    * l* [  j- b+ y0 L0 k
  112.         self.page_num = 1
    - {( t; A2 S6 s9 \7 g1 U
  113.         self.total_num = 200     Q% T# B9 t* w, [, G7 r
  114. 3 x: j$ b' U" [+ r5 y
  115.     @every(minutes=8 * 60)
    $ E2 w  {6 h" f. K# q
  116.     def on_start(self):
    % ~) W3 b% {0 B. l
  117.         global Cater_Name
      \/ a# ~' n; [* q; l, Q8 O
  118.         Cater_Name = []; d/ K/ r4 I0 H9 `! k
  119.         while self.page_num <= self.total_num: ( W( J7 d: W. w! ?
  120.             for self.CaterId in self.CaterIds:6 z2 P7 }8 Q! _
  121.                 if self.CaterId  == 'xuanhuan':: ^5 f* h! _) P1 P, R/ C! ?
  122.                      Cater_Name = '玄幻'- \$ N4 p& b6 A6 j
  123.                 if self.CaterId  == 'wuxia':
    # _7 [: i0 L* f$ D" o5 {% M
  124.                     Cater_Name = '武侠'
    ! u( ^. u4 ^% j2 r$ R% @
  125.                 if self.CaterId  == 'lishi':2 D( _' j) _! k( H) U* Q* h: p
  126.                     Cater_Name = '历史'            
    % G# ?1 q7 m: F8 j9 L$ g
  127.                 if self.CaterId  == 'yanqing':1 g! ?0 R7 {: T- ^8 m
  128.                     Cater_Name = '都市'
    6 B) r3 U3 W8 X9 Q8 w& V8 |' [
  129.                 if self.CaterId  == 'nvsheng':
    7 }: E' }) Q; N; E
  130.                     Cater_Name = '都市'
    . m$ g  V8 V$ N" o
  131.                 if self.CaterId  == 'kehuan':) P. o; m0 {8 F& R, p) V& W* D
  132.                     Cater_Name = '科幻'
    ( v: P* ]0 D- _* ~/ L
  133.                 if self.CaterId  == 'kongbu':
    7 {, d$ |2 O$ g& g" V0 `
  134.                     Cater_Name = '游戏'
    1 ?. J9 K! Q& K" T' h
  135.                 print self.CaterId7 O/ A2 L# o6 j# x
  136.                 url = self.base_url1 + str(self.CaterId) + self.base_url2 + str(self.page_num) + "/"         
    0 D) [1 ^# G; s
  137.                 self.crawl(url, callback=self.list_Caterg,save=Cater_Name)  j4 V% C( b; V9 ~; N8 N3 {9 G
  138.             self.page_num += 1
    * o1 T3 v$ |  _6 \6 E( F# J
  139.             
    & k5 s  W  z; r/ D1 e4 I
  140.     def list_Caterg(self, response):) {" v! t! N/ F# B! q7 |. F; |
  141.         Cater_Name = response.save
    9 [  @' C$ L, z+ `
  142.         for each in response.doc('.pic-list a[href^="http"]').items():
    6 K$ R+ V2 N/ b3 f/ x4 p3 M/ V
  143.             self.crawl(each.attr.href, callback=self.list_Caterg_detail,save=Cater_Name)
    & M2 ]3 E5 l! l5 s5 D8 W1 q( ?. S
  144.             
    # M- z& Z# p% z, _1 F! n: A
  145.     def list_Caterg_detail(self, response):
    ( Y5 I2 s, k0 K
  146.         Cater_Name = response.save9 |3 k/ s: ~8 `; }3 f3 b
  147. #        print Cater_Name- z2 A7 y5 m: j8 l5 U
  148.         Bookname = response.doc('h1').text()) w, i* V# E% @- ]: j
  149.         print Bookname
    . p1 K' ~; e$ t1 b
  150.         Book_author = response.doc('.authorname > a').text()
    5 W1 {! l  B" W5 c7 m1 C; q% `
  151. #        print Book_author+ d8 R3 w9 q: R
  152.         Book_Introduction = response.doc('.book-intro > div').text()  K+ U+ Z- }) j
  153. #        print Book_Introduction
    ; L5 F' y- r0 I" J' L' `2 J( y
  154.         Book_Synopsis = response.doc('b').eq(1).text(). m& c; W9 i6 u7 r1 Q
  155. #        print Book_Synopsis
    9 z2 Y1 @9 e, k6 Y2 X4 _% a
  156.         Book_Palabras = response.doc('.booktitle p').text().split(' ')[1].split('|')[0]
    4 F# }" @% W! S* |! K3 |
  157. #        print Book_Palabras
    0 k& E; w  O5 }8 j+ x' @
  158.         BookIDs = response.url.split("xiaoshuo/")[-1].split("/")[0]   #小说ID
    - T) |; j) Y+ Z9 ~
  159. #        print BookIDs4 ]2 [4 y" |9 d4 s9 O
  160.         Book_Dates = str(datetime.datetime.now())         
    ! T& g0 p: Y7 _
  161.         for imgs in response.doc('.bigpic > img[src^="http"]').items():8 V* I2 D, r+ c2 C6 F
  162.             img = imgs.attr.src# |4 p/ d$ N$ o- Y1 w) N, r. q
  163.             print img5 ^3 a( ~1 U, b' j4 ]$ F
  164.                 #小说封面下载* I, t. p  G7 i1 m* a
  165.             extension = self.getExtension(img)
    0 I+ W' B8 C0 Z4 X+ i7 @
  166.             name = self.getname(img)7 v$ S* ?" h) G, ]; V  K0 X4 {: @
  167.             file_name = name + "." + extension1 o( B8 M4 A; j; [# e% P( ?
  168.             imgDir = P_dir + name7 X  N7 ]- A  L  B5 f2 n+ u
  169.             Locaimg = imgDir + "/" + file_name
    ; I7 u) A$ ~; e: ]. K' L5 c
  170.             print Locaimg  N0 o6 W* E3 W: l/ m! R5 r. m
  171.             if(self.download(P_dir, imgDir, file_name, img)):   #这2行可注译,图片下载到本地. m& x* K3 T+ @6 G0 s
  172.                 print('attachment url is ' + img)               #
    7 y& p* a- o  p' x3 v7 `
  173.             Datos = {* G" c/ i3 t! U! v; P+ S5 }5 W0 D
  174.                     "Cater_Name":Cater_Name,
    . Y# }! g3 }1 l1 y9 W2 d2 Q
  175.                     "Book_author":Book_author,
    / |( }0 L, {% V; E) G
  176.                     "Book_Introduction":Book_Introduction,
    4 q: `: M& ~5 Y4 n# H! r. `
  177.                     "Book_Synopsis":Book_Synopsis,% _' Q, R/ z) p
  178.                     "Book_Palabras":Book_Palabras,4 T( L( C( o* M  V/ h
  179.                     "img":img,, Z# C0 d% M+ Z- k+ p4 _
  180.                 }
    7 h) T( Q. ]+ X- l8 U& q# \- z
  181.             self.add_BookFile(Bookname, BookIDs, img, Locaimg, Book_Dates)  #这行可注译,数据库发布接口,方便其他系统的发布
    5 k1 _# t/ N  `3 P
  182.         for each in response.doc('div[class="bookbtn-txt"]  a[class="catalogbtn"]').items():3 s5 Q# @% n7 _6 U6 @
  183.             self.crawl(each.attr.href, callback=self.index_page,save=Datos): d) J5 I, \0 m1 M( t
  184.             * E3 A6 i, r& x( u4 r
  185.     @config(age=8 * 60 * 60)    & C( `2 {: w/ h  k5 I# i/ n
  186.     def index_page(self, response): * X0 F) H! m; M* |' L2 r7 D
  187.         Datos = {
    ; [0 J; M& @/ x; h1 C, ^% D" \1 u3 @
  188.                   "Cater_Name":response.save['Cater_Name'],+ w$ Z2 Y& f( b. s: C/ _
  189.                    "Book_author":response.save['Book_author'],: V0 e5 X" D, y% n" H5 b$ A7 _
  190.                    "Book_Introduction":response.save['Book_Introduction'],! K. x  B; P! s" c/ q$ {6 u
  191.                    "Book_Synopsis":response.save['Book_Synopsis']," j3 X" s% u0 W4 `
  192.                    "Book_Palabras":response.save['Book_Palabras'],% d# r% \0 a5 l5 q. C5 Z
  193.                    "img":response.save['img']," z+ f1 K+ |' |6 h6 p2 c5 A
  194.                      }8 H0 V; z; |6 T
  195.         for each in response.doc('.chapter-list li:first-child a[href^="http"]').items():5 @3 @8 T7 I8 {/ C' P
  196. #        for each in response.doc('.chapter-list  a[href^="http"]').items():  
    , ^; ]) l9 o. V; i$ ]; B+ f
  197.                     self.crawl(each.attr.href, callback=self.detail_page,save=Datos)3 B! j1 X) i2 N9 G5 o% q1 h
  198.     @config(priority=2)3 t. @. w% @$ i. J- f
  199.     @catch_status_code_error
      L8 K! M, Q* O6 G  t( W2 Z
  200.     def detail_page(self, response):        
    ) S& n' H$ u5 S# d
  201.         NewRe1 = u'哈书'
      K* E$ a* D& N- g7 {8 S7 J+ p
  202.         NewRe2 = u'huhjsd.CC'
    . U2 k* W; [0 p4 Q5 V1 M. @
  203.         NewRe3 = r'^\\n\\n'% q1 n$ W! y- m+ `4 {% a
  204.         NewRe5 = u'小说网'  B0 O$ w6 s6 H6 _' z
  205.         NewRe6 = u'fgdfgf'
    . P# Z8 k# Z$ @2 I$ n  q6 K
  206.         NewRe7 = u'fgfgf'+ z" o  c4 q' d6 b
  207.         NewRe8 = u'ffhgf'2 F" w% G( y0 a# q# K
  208.         NewRe4 = r'[\f\t\v+\.\{\(\)\}\!\/_,$%^*(+"\')]+|[+——()?【】“”!,。?、~@#¥%……&*()]+'5 \. A# U0 L* M2 A
  209.         ReC1 = u'静思'
    " G+ O& f  x: q# k% ?' z
  210.         ReC2 = u'aghgf.com'
    : ]* q" f% {! L4 Y
  211.         ReC3 = u'aghgfh.com'7 W3 _1 |* Q7 J2 P
  212.         ReC4 = u''
    & M% _- z' ]1 s( F' J( H/ ^/ E
  213.         ReC5 = u'文学网'
    4 _9 g2 x" g# M* ?5 c# k: Z' }& F
  214.         ReC6 = r'<BR>'  d! h6 ?. j& c' M3 O$ m
  215.         Bookname = response.doc('.readlocation a').eq(2).text()   #小说名称
    3 U" C2 V+ s5 J( k
  216.         print Bookname* u# p$ B0 m3 b) _0 ?+ [
  217.         Cater_Name = response.save['Cater_Name']   # 小说分类: T0 f7 {& F" q) k% d; h
  218.         Book_author = response.save['Book_author']   #小说作者
    9 D% I( q* I; L3 p0 ^$ r
  219.         Book_Introduction1 = response.save['Book_Introduction']   #小说简介# A7 i+ \: L) Z" _- g6 X/ \+ G
  220.         Book_Synopsis = response.save['Book_Synopsis']   #最近更新
    ! k3 _4 M# L! j: a
  221.         Book_Palabras = response.save['Book_Palabras']   #小说字数
      k2 P2 x% D: J. @
  222.         Bookurl = response.url   #小说网址
    1 p: D2 X0 z' L6 E8 Y5 L* ?
  223.         Booktitle = response.doc('.article-title').text()   #章节名称5 n/ Z  ], _  ^! S, ^- z
  224.         BookID = response.doc('.readset-r span').text()   #小说ID, O! Z1 s) ]  B/ N; q
  225.         BookConte1 = response.doc('.article-con').text()   #小说章节内容
    3 {! E- b0 y1 R' O. w: `
  226.         abover = response.doc('.article-title').text() + response.save['Book_Synopsis'] + response.save['Book_Palabras'] + response.save['Book_Introduction']   #小说状态(连载还是完成)1 F  b7 ^$ A/ N9 Z  \* U
  227.         Book_Date = str(datetime.datetime.now())    # 采集时间
      R4 p0 b) W- q% c
  228.         BookConte2 = BookConte1.replace(NewRe1 , ReC1)
    / C" |2 q& `$ @. L  y) J$ ]
  229.         BookConte3 = BookConte2.replace(NewRe2 , ReC2). T( Q  P: `6 l" A
  230.         BookConte5 = BookConte3.replace(NewRe5 , ReC5)
      k  I8 O$ x# ~+ v
  231.         BookConte6 = BookConte5.replace(NewRe6 , ReC2)
    3 o+ o5 M0 M  j- _
  232.         BookConte7 = BookConte6.replace(NewRe7 , ReC2)
    & `: L/ R9 k0 \. ]
  233.         BookConte8 = BookConte7.replace(NewRe3 , ReC6)
    ; |( X2 i+ X0 j: e+ H
  234.         BookConte4 = re.sub(NewRe4 , ReC4 , BookConte8)$ o7 G1 I- p' V7 P+ n# o8 I
  235.         BookConte = BookConte4.replace("\n\n","<br>")
    " |5 S7 t5 Z4 z% Y! E
  236.         print BookConte
    " ]9 }( t0 r+ L8 K) c
  237.         Book_Introduction2 = Book_Introduction1.replace(NewRe1 , ReC1)
      `2 [0 g( @2 _; c+ r) |1 s& K1 U
  238.         Book_Introduction3 = Book_Introduction2.replace(NewRe2 , ReC2)* ~5 M( e4 W7 z& R
  239.         Book_Introduction4 = Book_Introduction3.replace(NewRe3 , ReC3)  M0 a1 k% N1 P* o4 v* Q
  240.         Book_Introduction = re.sub(NewRe4 , ReC4 , Book_Introduction4)
    + L# J( v3 V! o$ Y
  241.         Titleid = response.url.split(BookID + "/")[-1].split("/")[0]     ! B5 g! U$ M' B- c% S5 ^2 X; m
  242.         Book_img = response.save['img'],  #小说图片
    ' H' u7 N5 }4 N8 e
  243.             
    5 p) C/ b; o/ m0 b
  244.         #insert into MySQL 小说入库$ u, R  d  Z# u3 V
  245.         self.add_question(Bookname,Cater_Name,Book_author,Book_Introduction,Book_Synopsis,Book_Palabras,Bookurl,Booktitle,BookID,BookConte,Titleid,abover,Book_Date)   #这行可注译,数据库发布接口,方便其他系统的发布6 e7 k9 [: v6 h) s1 ~
  246.         self.add_comment(Bookname, Booktitle, BookID, Titleid, Book_Date)   #这行可注译,数据库发布接口,方便其他系统的发布/ M. c4 o& a3 U7 S8 Z7 f6 H$ Z/ H
  247.         #post提交发布4 K8 }" I- o4 K! t# U- D( R
  248.         self.add_locoy(Bookname,Cater_Name,Book_author,Book_Introduction,Book_Palabras,Book_img,Booktitle,BookConte,abover)  #这行可注译,火车头发布接口,不需要可取消4 x+ E$ Z3 Q- N$ W
  249.         Datos = {
    + b. }: n3 |- M0 S7 T0 C" e$ D
  250.                   "Cater_Name":response.save['Cater_Name'],
    ( D$ ]1 ^3 @7 |0 W% h
  251.                    "Book_author":response.save['Book_author'],. W$ F/ W& |7 b0 w& q, n- Q0 R0 u
  252.                    "Book_Introduction":response.save['Book_Introduction'],
      _5 v# w( }* ]. ~# W
  253.                    "Book_Synopsis":response.save['Book_Synopsis'],
    ' A( x- B$ R/ n0 ~, R
  254.                    "Book_Palabras":response.save['Book_Palabras'],; q+ V; |) J  O4 p  ^: u# O2 C
  255.                    "img":response.save['img'],
    ( {; S- j, ~& Z2 F% f" W
  256.                      }* t) M8 e6 q! A# y5 r/ \- M' R
  257.         for each in response.doc('.articlebtn > a:nth-child(4)[href*="/xiaoshuo"]').items():4 e5 n3 z0 @* H
  258.             self.crawl(each.attr.href, callback=self.detail_page,save=Datos) 7 q) [5 x* t! V5 a
  259.         return {
    4 L1 L  u. J7 L# S
  260.             "Cater_Name":Cater_Name,
    1 S/ @+ f8 _  C1 v  Q, O2 O
  261.             "Bookname":Bookname,
    ; m1 b0 H, K1 i, s# k' R5 z+ v: ^
  262.             "Book_author":Book_author,
    - @& g# _$ P9 C( ^. P
  263.             "Book_Introduction":Book_Introduction,
    ; l# Z. w4 l1 R% ^6 u- C4 L: l
  264.             "Book_Synopsis":Book_Synopsis,3 M( E# C  d7 p
  265.             "Book_Palabras":Book_Palabras,/ [) q* W8 v9 I
  266.             "Book_img":Book_img,
    6 M! B3 c! u# W2 D* ~
  267.             "Bookurl": response.url,
    5 m+ r- q1 ^/ z
  268.             "Booktitle": Booktitle,
    3 v# l; }2 a1 {3 `
  269.             "BookID": BookID,5 P& R2 Q/ i6 i$ S' O9 @$ I0 g! G
  270.             "BookConte": BookConte,
    7 Z) X& t1 g6 E' N
  271.             "Titleid": Titleid,: m4 [5 C& K8 ~" r
  272.             "abover":abover,
    ) V0 C4 O1 ?" P9 |% {4 L( x
  273. #            "Book_Date" = str(datetime.datetime.now()),
    ( j/ f. U4 {; O
  274.         }+ l3 i0 y9 r1 R2 O
  275.     def download(self, P_dir, imgDir, file_name, Book_img):
    6 s! d5 n! L: Y  K2 H
  276.         if not os.path.exists(imgDir): 9 ^! r# E5 l; l+ _3 F3 A1 l8 }5 l
  277.             os.makedirs(imgDir)  U0 s( N, X/ O& _( `& X
  278.         file = imgDir + "/" + file_name
    ( _# [0 O7 B& u7 _) F0 H
  279. #        print file. b& c2 c" b0 [3 Y# W$ M
  280.         f = open(file, 'wb+')
    ; y) V2 z0 O& b2 I: E
  281.         imag = requests.get(Book_img)
    0 }% v* N' V- e9 R- K2 e+ J$ q2 _
  282.         f.write(imag.content)
    * U( C1 e6 R4 O( k1 S6 L
  283.         f.close()5 `# l4 p% s  L" N
  284.         #保存图片前* C* c  a" h5 i. t# f
  285.     def save_imgs(self,response):2 j9 N( P3 Y+ F1 L
  286.         content = response.content; C9 I& C: y. p
  287.         file_name = response.save["file_name"]/ x; w) M6 P& ^
  288.         imgDir = response.save["imgDir"]  o7 U3 R! m, g
  289.         file_path = imgDir + file_name
    $ C2 \6 |# w+ ?  k0 z% V! e$ m
  290.         self.save_img(content,imgDir,file_path)
    $ B! K7 y: Y, \9 l0 [9 F
  291.     #保存图片
    5 t+ m: r; I: \1 r/ b
  292.     def save_img(self,content,imgDir,path):- W5 u, q. `8 b3 x8 _
  293.         if not os.path.exists(imgDir):                        
    ( f. j/ ~! S2 ]3 ?# Y+ {4 S
  294.             os.makedirs(imgDir)
    8 A# N# s, P, V' Q& r( S6 K' L
  295.         f = open(path,"wb" )$ i( F  u( N4 D) v
  296.         f.write(content)0 Z4 v* o" V/ N% k. B, v5 H
  297.         f.close()
    6 u: n* Q. g2 v& f0 F/ m1 A
  298.     #获取url后缀名9 b' k& @" z3 g' C- @; W( P5 k
  299.     def getExtension(self,url):                            # F% N1 L2 Q0 m( I  n$ z: p5 ^
  300.         extension = url.split(".")[-1]
    $ @1 W8 ~2 p. K1 u: q
  301.         return extension   L4 |8 U0 i7 n0 j1 W
  302.     * O4 Y/ f! Z6 o6 M
  303.     #获取图片名
    + }- `- I* r1 n7 r  T: V
  304.     def getname(self,url):% @+ U8 L' N$ }3 [6 P; t0 C. m5 _
  305.         name=url.split("/")[-1].split(".")[0]
    9 d9 c, ]; S" k8 ^
  306.         return name
复制代码

0 E4 I" J+ i0 X+ B
$ L$ }/ l* |9 T8 {
您需要登录后才可以回帖 登录 | 注册

本版积分规则

Archiver|手机版|小黑屋|中国飞逸网

GMT+8, 2025-11-9 15:08

Powered by Discuz! X3.5

© 2001-2025 Discuz! Team.

快速回复 返回顶部 返回列表