飞逸社区

 找回密码
 注册

QQ登录

只需一步,快速开始

搜索
热搜: 活动 交友 discuz
飞逸社区 飞逸网博客 转贴专家 PHP在线代理
查看: 392|回复: 0

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

[复制链接]
发表于 2019-6-8 23:06:07 | 显示全部楼层 |阅读模式
Python + pyspider某小说站的爬虫,入数据库,火车头发布,资源下载到本地,另可写爬虫!
! H) p- N( C7 Q( Z# q- u
  1. #!/usr/bin/env python$ L1 O$ m  i5 T; k
  2. # -*- encoding: utf-8 -*-: S' N! e  y7 M# M
  3. # Created on 2019-05-05 21:43:11$ M' c- d7 P  I: N  }
  4. # Project: XiaoShuo( l1 n3 c7 h3 F. n

  5. . g( D& R) H3 B0 d
  6. from pyspider.libs.base_handler import *! T+ h! ~7 q9 n3 I7 N
  7. import pymysql8 W7 J4 q* \% G
  8. import random9 ~4 l8 ~5 G6 E+ w
  9. import datetime
    ; x+ c, a1 [7 P$ n& ?
  10. import urllib2,HTMLParser,re. w  k: s" q. I! \/ k1 d
  11. import os- J' H" @- `& L9 E% w  @; I
  12. import sys
    ' U6 F: J  E2 M- u6 A
  13. import re
    ( Z% X; o* H( W8 C) @- Z: F
  14. import codecs
    ; ^0 P' f- b8 {2 e
  15. import requests
    6 x3 j$ Y! ?2 q4 T/ n
  16. import json
    2 I( O; z# o1 R- W+ Y2 y

  17. ' |- o/ h+ }. X9 f8 g
  18. class Handler(BaseHandler):
    * Z. t5 r8 u0 Z$ M3 E; ?: `+ s
  19.     global Datos
    % E1 T$ g* K" Y4 k, w" q$ Y8 p
  20.     global P_dir    ( T9 T7 ^% @* z2 G5 v. _, K
  21.     P_dir = '/Tools/Debug/'  #采集时候图片保持到本地的路径+ c, w0 t1 k& G4 ^  e7 `: M
  22.     global Datos
    & e% W0 \; q1 C  G6 T. @; O, R3 h
  23.     Datos = {}1 z5 f2 ~# W/ f2 ]
  24.     headers= {
    * q! y. x1 V2 t
  25.     'Accept':'text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,*/*;q=0.8',9 e' a  y: w6 j( r5 l& c& G6 h( i
  26.     'Accept-Encoding':'gzip, deflate, sdch',4 p0 e' `& g5 `( @$ @, m
  27.     'Accept-Language':'zh-CN,zh;q=0.8',
    8 i/ e# ~. O, w9 l
  28.     'Cache-Control':'max-age=0',
    $ j* R% ?0 p6 h# [% ?
  29.     'Connection':'keep-alive',5 d$ [* C9 d6 L: O
  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'
    ! Y3 t+ R* L& {7 s
  31.     }
    4 l" M9 C9 Y6 l* \
  32.     crawl_config = {
    # @& V& E; |: p# _$ G, N
  33.         'headers' : headers,
    8 b- e0 V$ `4 z. K  s+ H
  34.         'timeout' : 300
    ' T% |. J3 H( p* O" y/ w8 L' K
  35.     }5 k1 b1 V( n8 T! q$ _  q7 B1 N( t/ C
  36.     def add_BookFile(self,Bookname, BookIDs, img, Locaimg, Book_Dates):
    ( l7 H% P$ t, y
  37.         db = pymysql.connect(host="localhost",user="数据库用户名",password="密码",db="数据库名",charset="utf8")
    / ]7 Q' z" N7 T/ L, Z3 K
  38.         try:
    ! t0 N2 }. X% e" ~. \3 e0 L
  39.             cursor = db.cursor()
    0 F' L7 O1 r$ x9 _, f
  40.             #注意此处字符串的占位符要加双引号"%s"
    1 b" r2 |* s" M. N1 H2 G/ B/ q
  41.             sql = 'insert into BookFile(Bookname, BookID, img, Locaimg, Book_Date) values ("%s","%s","%s","%s","%s")' % (Bookname, BookIDs, img, Locaimg, Book_Dates);
    $ f% V1 Q; S" r* X
  42. #            print(sql)
    $ g( R6 u. f* q! q2 B
  43.             cursor.execute(sql)
    ( \& u! G0 d' p. Q) X* z$ ~
  44.             8 N! W: _8 X9 W( z- T
  45.             #qid = cursor.lastrowid
    6 M* ^4 k* G$ E$ i- X/ ~* ~) w. t8 h
  46.             #print(qid)
    ; k& l+ G. J, \, v3 A  ?
  47.             8 _: K* l0 O# d  `, a7 }
  48.             db.commit()
    # \. E# f- `4 J* J4 s9 z3 @& x
  49.         except Exception as err:
    * i  F2 N$ ?0 R/ m
  50.             print("Error %s for execute sql: %s" % (err, sql))
    7 w! [- Z! F( q* u7 }. J
  51.             db.rollback()
    1 t0 ^' i8 m3 q" h
  52.     def add_comment(self,Bookname, Booktitle, BookID, Titleid, Book_Date):/ j0 {# g- S7 K+ l9 C9 L
  53.         db = pymysql.connect(host="localhost",user="数据库用户名",password="密码",db="数据库名",charset="utf8")( q2 }" I% @6 ^" [5 a4 j+ v% y
  54.         try:
    ( O0 l3 x7 p9 ]* j: a. X5 ^0 b, H+ [
  55.             cursor = db.cursor()( z8 m- W% `# k7 \. m" J; s
  56.             #注意此处字符串的占位符要加双引号"%s"
    5 }0 k1 \2 z6 a4 L/ {
  57.             sql = 'insert into BookTitle(Bookname, Booktitle, BookID, Titleid, Book_Date) values ("%s","%s","%s","%s","%s")' % (Bookname, Booktitle, BookID, Titleid, Book_Date);
    4 i5 \( V3 q. w5 O& q+ N8 P
  58. #            print(sql)
    4 J- V2 j" Y( T1 z5 ]$ Z- p
  59.             cursor.execute(sql)$ c* W7 @) c+ D
  60.             
    4 o5 a6 l9 l3 q3 L; e& |
  61.             #qid = cursor.lastrowid
    / [; j% ^% {+ M# y! U
  62.             #print(qid)$ D; w( G% G' y3 t' x: Z
  63.             % _* E5 h( R- K* |* {7 Y7 b
  64.             db.commit()
    + ^4 m+ g( A. Z, Z8 F7 C7 P
  65.         except Exception as err:
    9 V  o8 R3 ^% |. Y# a
  66.             print("Error %s for execute sql: %s" % (err, sql))* E4 J7 P4 Z+ l: ?
  67.             db.rollback()
    6 B1 a' D1 Z! P" B
  68.     def add_question(self,Bookname,Cater_Name,Book_author,Book_Introduction,Book_Synopsis,Book_Palabras,Bookurl,Booktitle,BookID,BookConte,Titleid,abover,Book_Date):
    $ _, \: f+ a% j4 s: N1 m% U
  69.         db = pymysql.connect(host="localhost",user="数据库用户名",password="密码",db="数据库名",charset="utf8")% k: g$ h7 X6 W3 v9 v
  70.         try:- z3 g$ H! ^) W3 J
  71.             cursor = db.cursor()6 ]& k6 g" ~5 O  |
  72.             #注意此处字符串的占位符要加双引号"%s"
    $ G) ], k. p, v5 p, m& ?1 C
  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);
    $ V2 e! Q- P) r; C
  74.             print(sql)  O( T" b" I9 s; ]  n2 p
  75.             cursor.execute(sql)# C' O7 g) e/ E0 {6 w
  76.             print(cursor.lastrowid)
    ) z1 t, @# x6 U
  77.             db.commit(), q: i& r8 `4 |; }8 Z, A3 S; K$ Q7 ~8 B
  78.         except Exception as err:
    " `; r' s0 U# @( g* E" @
  79. #        except:: F, P; @1 Y6 J2 E+ w
  80. #            print('Failed')
    ) D2 A4 S. d0 u( w: h. L
  81.             print("Error %s for execute sql: %s" % (err, sql))" E. N) E* }$ |' H
  82.             db.rollback()
    1 _/ C8 A# w7 y6 |" a. x8 c6 ^
  83.         , r& ]2 Z2 M; {' Z- Y# u
  84.     def add_locoy(self,Bookname,Cater_Name,Book_author,Book_Introduction,Book_Palabras,Book_img,Booktitle,BookConte,abover): / l8 Z7 o3 o' B/ X! u9 X
  85.             reload(sys)4 t/ R5 K. v# C
  86.             sys.setdefaultencoding("gbk"): E, \( C, j5 k9 v+ c7 Q7 L
  87.             locoy_url = 'http://www.******.net/locoy/?my=book'  #697火车头发接口地址
    8 |& _- w6 M5 N
  88.             locoy_data = {
    4 [; |! }$ f* d- |: ]; m" P
  89.             'my_u':'用户名',   #后台用户名* H$ ~7 @0 t/ U2 v& ]
  90.             'my_p':'密码',   #后台密码4 D/ J! z" ?7 }5 ^
  91.             'subject_669977_net':Bookname.encode('gbk', 'ignore'),
    # k# d8 R3 I! l: @/ q! N. h
  92.             'caid':Cater_Name.encode('gbk', 'ignore'),
    - c5 a3 P& Q. F- n  Q6 _: S- Q& g* |
  93.             'title_669977_net':Booktitle.encode('gbk', 'ignore'),
    7 g2 ]/ o, ~1 R; S! _) b
  94.             'article':BookConte.encode('gbk', 'ignore'),
    , ]+ ?( I5 Z$ `2 N1 j+ a
  95.             'author':Book_author.encode('gbk', 'ignore'),' V; D) V9 p& O! p) v; r' Z9 F
  96.             'ready_1':Book_Palabras.encode('gbk', 'ignore'),
    ' P! U* Z+ U7 N8 P& {5 l8 K
  97.             'thumb':Book_img,
    3 Q& Q, E, v) v  V  O4 U" T6 e
  98.             'content':Book_Introduction.encode('gbk', 'ignore'),
    " b! T1 I+ A. m4 n4 t
  99.             'abover':abover.encode('gbk', 'ignore')           
    # O7 o( X/ D# c% |: Z! D
  100.                 }) W) y3 V0 H: p% S. e0 C- H
  101.             res = requests.post(locoy_url, data=locoy_data)+ P7 [$ ~7 o& S3 b  }* p
  102.             print res.text
    / h* L  h9 p7 p
  103.             print res.content
    4 V' i; |8 d5 u" D& p
  104. #            print Dsd' G# h. X! o1 I1 h; {
  105.             return res( z! [+ M* k& {. f, s- y
  106.     6 k) \, }4 A9 w6 S
  107.     def __init__(self):
      ~5 z/ U& X  M& G& h: k6 d
  108.         self.base_url1 = 'https://www.****.cc/'
    7 m+ F2 C6 h$ j1 _
  109.         self.base_url2 = '/'
    + r+ z: r9 Z  x6 U
  110.         self.CaterId = []; _. b  G! s: F; P- `
  111.         self.CaterIds = ['xuanhuan', 'wuxia', 'yanqing', 'lishi', 'kehuan', 'kongbu', 'nvsheng']
    , u( ]$ O2 T% D
  112.         self.page_num = 1
    ) H9 `4 `' w) y9 R8 T: V9 U
  113.         self.total_num = 200   1 _5 y4 |* Q3 h. @- \( y, l* U
  114. 5 ]5 X% I+ |# I4 ~, i
  115.     @every(minutes=8 * 60)
    # t# [/ h& c8 j- g
  116.     def on_start(self):* J+ ]0 _$ h* _, U" C0 i
  117.         global Cater_Name
    . l3 U/ x1 n' O7 L9 D7 |  D2 A3 T
  118.         Cater_Name = []
    : R/ j$ y% A8 Z( k
  119.         while self.page_num <= self.total_num: ) w- D8 Y, C, P; F* |1 R/ ]
  120.             for self.CaterId in self.CaterIds:' i- q" W) n( Z; D
  121.                 if self.CaterId  == 'xuanhuan':
    ( b1 M) y, i! t0 t; C' `8 ]+ f
  122.                      Cater_Name = '玄幻'+ P' m+ e4 x- S) R
  123.                 if self.CaterId  == 'wuxia':* ?% u3 u( G; i  n
  124.                     Cater_Name = '武侠'
    ; c  z7 x: V/ R7 s! v% Q
  125.                 if self.CaterId  == 'lishi':
    ' O: e. E" _2 ^) q/ c+ s# d: D
  126.                     Cater_Name = '历史'            # C. P' w, s) |7 F
  127.                 if self.CaterId  == 'yanqing':8 U( o* Q. d7 b6 X' D& g8 n9 f
  128.                     Cater_Name = '都市'
    1 Y3 A9 T& ~$ o% o
  129.                 if self.CaterId  == 'nvsheng':
    , j7 S% k/ j) q- A
  130.                     Cater_Name = '都市' 8 x$ K! d/ Z, ^9 M2 r% r* P
  131.                 if self.CaterId  == 'kehuan':
    0 E1 R" u5 r. |. d
  132.                     Cater_Name = '科幻'
    4 ?- V2 X1 s3 V" }# R
  133.                 if self.CaterId  == 'kongbu':1 R- q3 J. r# r, Z8 g1 U
  134.                     Cater_Name = '游戏' 1 I  G) I4 v4 Q# {* P: n
  135.                 print self.CaterId
    / W0 a* R8 E  ^& O+ M7 D: x
  136.                 url = self.base_url1 + str(self.CaterId) + self.base_url2 + str(self.page_num) + "/"         
    7 h/ |: V( r$ \; ^8 L
  137.                 self.crawl(url, callback=self.list_Caterg,save=Cater_Name)
    ! [" H7 w* L2 H% ^8 a6 Y& x
  138.             self.page_num += 1 5 g# S# M2 S8 t3 Q0 g6 P: [
  139.             
    8 @7 d- W' j1 c( k7 x9 j. A
  140.     def list_Caterg(self, response):' B2 U. z( J7 C; o
  141.         Cater_Name = response.save
    * l& [0 }( V- u' Z+ c
  142.         for each in response.doc('.pic-list a[href^="http"]').items():
    8 w" l$ F. ]$ f
  143.             self.crawl(each.attr.href, callback=self.list_Caterg_detail,save=Cater_Name)6 h& E2 z4 Y* t  T2 C3 s2 L
  144.             
    : ?/ f4 s4 X" {9 j( ?7 V( C8 k
  145.     def list_Caterg_detail(self, response):- r4 t5 U* u# f
  146.         Cater_Name = response.save
    $ D0 y5 h2 _" C8 d6 X
  147. #        print Cater_Name
    2 ?- ]% w8 n$ B- m$ Q
  148.         Bookname = response.doc('h1').text()
    6 K, {4 `7 X$ A& J, G
  149.         print Bookname
    $ _% s" {  x; l2 E, I  b$ ^3 v6 o/ i
  150.         Book_author = response.doc('.authorname > a').text()
    / O" ^- p4 _4 w% I/ G7 R* Z
  151. #        print Book_author
    4 x1 n' {0 y1 h0 o, n
  152.         Book_Introduction = response.doc('.book-intro > div').text()
    , i) l5 c4 E: E
  153. #        print Book_Introduction- m9 ?! D. C! K1 R: J
  154.         Book_Synopsis = response.doc('b').eq(1).text(). Z+ V: z3 B% r2 K5 u1 A
  155. #        print Book_Synopsis
    ) ~) d$ a/ a+ _
  156.         Book_Palabras = response.doc('.booktitle p').text().split(' ')[1].split('|')[0]
    $ }5 x$ b% W  t3 x, f2 a6 R1 v
  157. #        print Book_Palabras
    4 w; ?6 J# `6 `) W' q  B. q
  158.         BookIDs = response.url.split("xiaoshuo/")[-1].split("/")[0]   #小说ID
    8 H2 k8 ]7 ]5 v9 g" {6 Y* d
  159. #        print BookIDs, u& n( M( h. r/ h& G6 t7 }& P' `
  160.         Book_Dates = str(datetime.datetime.now())         5 j2 i, @; l7 D& u: B+ u
  161.         for imgs in response.doc('.bigpic > img[src^="http"]').items():: K2 V" K( T- u6 T8 F% L! f$ C- v
  162.             img = imgs.attr.src$ D' _# L1 e* e. R
  163.             print img
    + b* o: B3 R0 G6 ]' h7 _  P
  164.                 #小说封面下载! J5 T. S$ h' m0 }% E0 {( U6 h  x
  165.             extension = self.getExtension(img)- `( u/ m0 u4 |) `4 n& ]+ H
  166.             name = self.getname(img)8 C; ^" w5 W& s
  167.             file_name = name + "." + extension
    * q; ~3 o+ d  W* ]9 c/ r
  168.             imgDir = P_dir + name
    ) W6 P- `3 h$ {7 ?/ p8 R; w: n
  169.             Locaimg = imgDir + "/" + file_name0 P# @2 H8 Q" y0 z
  170.             print Locaimg1 T" s# A# c: s* Y4 ]( [) M
  171.             if(self.download(P_dir, imgDir, file_name, img)):   #这2行可注译,图片下载到本地
    . Z* S; x- t  s* I0 b
  172.                 print('attachment url is ' + img)               #
    # L: d7 `/ X  t& j
  173.             Datos = {
    5 q* b/ ^% P9 p2 d5 w5 j' r
  174.                     "Cater_Name":Cater_Name,! n% i3 M0 \. t0 H- |( L9 @
  175.                     "Book_author":Book_author,; }+ C7 i3 P# F" j
  176.                     "Book_Introduction":Book_Introduction,- _6 K7 ?- ^; c& Y
  177.                     "Book_Synopsis":Book_Synopsis,
      [  T5 F2 R* w4 m, Q' c
  178.                     "Book_Palabras":Book_Palabras,& u3 `) u! g4 u, h  S
  179.                     "img":img,
    6 h. Z) r8 ~9 l2 U
  180.                 }
    & E1 Q- ]) @- V3 g. i
  181.             self.add_BookFile(Bookname, BookIDs, img, Locaimg, Book_Dates)  #这行可注译,数据库发布接口,方便其他系统的发布
      H+ D$ `$ k: b9 P+ n
  182.         for each in response.doc('div[class="bookbtn-txt"]  a[class="catalogbtn"]').items():8 z* p# J6 O1 K8 F- Y! B
  183.             self.crawl(each.attr.href, callback=self.index_page,save=Datos)- i  L( i; z0 L" q0 \" z- q
  184.             ; r5 A9 `+ M% x% u! C
  185.     @config(age=8 * 60 * 60)   
    ' H6 Q' y# D  p8 O; |- ]9 v0 c5 A6 r+ K
  186.     def index_page(self, response):
    1 B6 M: y0 k+ I: W3 }
  187.         Datos = {
    - X" A6 R" C- H" z9 M6 l( d
  188.                   "Cater_Name":response.save['Cater_Name'],# n4 F8 n% Q  ~( {0 m
  189.                    "Book_author":response.save['Book_author'],  g7 P; T, a' E" X- w; h
  190.                    "Book_Introduction":response.save['Book_Introduction'],6 Y% A6 k: _& @* ~
  191.                    "Book_Synopsis":response.save['Book_Synopsis'],3 e2 I& U7 k5 ^" X; b
  192.                    "Book_Palabras":response.save['Book_Palabras'],) H8 u1 F7 O- Y
  193.                    "img":response.save['img'],
    7 D( h' `$ s5 g. i: E, e, _" @
  194.                      }7 V. N; c: r1 m6 ]/ b& P% @
  195.         for each in response.doc('.chapter-list li:first-child a[href^="http"]').items():/ c3 e# O' Q6 \/ Q) P, N% O& A. u
  196. #        for each in response.doc('.chapter-list  a[href^="http"]').items():  
    4 k5 ~, f- T# F2 ^: C
  197.                     self.crawl(each.attr.href, callback=self.detail_page,save=Datos): E+ ]' D4 Z. h6 C5 F8 X- u
  198.     @config(priority=2)2 g7 O1 g6 u6 q, d
  199.     @catch_status_code_error
    0 M; K, o5 C6 A2 d% m
  200.     def detail_page(self, response):        
    0 d1 U" Q7 k: A4 x2 {
  201.         NewRe1 = u'哈书'
    ' _& B* w/ Z* j  Q
  202.         NewRe2 = u'huhjsd.CC'
    ) E% W: v( K0 M3 @" @) ?5 }
  203.         NewRe3 = r'^\\n\\n'5 ~4 j! R  I3 q) E( z0 i! a3 W6 y
  204.         NewRe5 = u'小说网'4 T6 z" Y& s0 g. c; R! u, P2 Y
  205.         NewRe6 = u'fgdfgf'
    4 o* e& @6 t7 `9 d
  206.         NewRe7 = u'fgfgf'
    3 ]1 j: q& }1 m; i6 o: s1 `; n
  207.         NewRe8 = u'ffhgf'6 l2 k: E, B: x( _1 N
  208.         NewRe4 = r'[\f\t\v+\.\{\(\)\}\!\/_,$%^*(+"\')]+|[+——()?【】“”!,。?、~@#¥%……&*()]+'2 G* h: Q5 b' B, E9 z" Z
  209.         ReC1 = u'静思'
    6 h5 k# z  d& S, B+ V
  210.         ReC2 = u'aghgf.com'
    0 b  }3 C+ s1 ~* M
  211.         ReC3 = u'aghgfh.com': Q6 |# i3 y8 a4 e* I" ^
  212.         ReC4 = u''4 b: e1 M& w. c/ e( I
  213.         ReC5 = u'文学网'
    ' ?. ]% N6 o% ~: @) R7 A) e1 {
  214.         ReC6 = r'<BR>'# V- r  o" T; i2 P
  215.         Bookname = response.doc('.readlocation a').eq(2).text()   #小说名称
    % p1 q  H/ @; Z, e$ p( f
  216.         print Bookname; m3 I! f7 ?. D2 `2 }
  217.         Cater_Name = response.save['Cater_Name']   # 小说分类  S& V% C, |5 }. k: u
  218.         Book_author = response.save['Book_author']   #小说作者1 X8 ?, O6 y+ @/ y
  219.         Book_Introduction1 = response.save['Book_Introduction']   #小说简介& f% ~5 z$ |  g8 P
  220.         Book_Synopsis = response.save['Book_Synopsis']   #最近更新; W' c% W) t/ u- {* ^7 p
  221.         Book_Palabras = response.save['Book_Palabras']   #小说字数% F: P: w$ F9 t8 p, k6 Y6 M
  222.         Bookurl = response.url   #小说网址
    4 a: U6 @: S8 D" X
  223.         Booktitle = response.doc('.article-title').text()   #章节名称
      @8 k# ^/ b3 W
  224.         BookID = response.doc('.readset-r span').text()   #小说ID6 T8 B( }* h2 Q8 A3 ?* {2 B7 A
  225.         BookConte1 = response.doc('.article-con').text()   #小说章节内容
    " m: _  l, A/ K* u
  226.         abover = response.doc('.article-title').text() + response.save['Book_Synopsis'] + response.save['Book_Palabras'] + response.save['Book_Introduction']   #小说状态(连载还是完成)+ G/ o, G* ?. e8 F4 f% X6 k/ }
  227.         Book_Date = str(datetime.datetime.now())    # 采集时间
    " P: y$ |  k4 n, e2 d0 o4 n0 b
  228.         BookConte2 = BookConte1.replace(NewRe1 , ReC1)
    2 i+ \- d% c. m4 u7 o& _9 W% |( t
  229.         BookConte3 = BookConte2.replace(NewRe2 , ReC2)+ d, W$ L$ o0 z- r; j
  230.         BookConte5 = BookConte3.replace(NewRe5 , ReC5)* ^. R3 |! `" D/ Q2 ^
  231.         BookConte6 = BookConte5.replace(NewRe6 , ReC2)+ \: k" \8 {  X" F
  232.         BookConte7 = BookConte6.replace(NewRe7 , ReC2)( B: p% e, H* P6 n
  233.         BookConte8 = BookConte7.replace(NewRe3 , ReC6)# ^5 w, Y2 g1 ]1 v, p5 N9 J
  234.         BookConte4 = re.sub(NewRe4 , ReC4 , BookConte8)5 o9 Y4 K4 K6 O% H4 a
  235.         BookConte = BookConte4.replace("\n\n","<br>")5 ?' {: c" z9 }( u; P; @( v; o4 M3 k
  236.         print BookConte
    2 ?6 Z3 q" C8 Q& R, l& J
  237.         Book_Introduction2 = Book_Introduction1.replace(NewRe1 , ReC1)! Z* M0 J' `8 q8 G6 z, s0 d) [
  238.         Book_Introduction3 = Book_Introduction2.replace(NewRe2 , ReC2)
    ) u0 y* o" e. p4 K8 B
  239.         Book_Introduction4 = Book_Introduction3.replace(NewRe3 , ReC3)
      R9 V/ O+ l, j! ~; M
  240.         Book_Introduction = re.sub(NewRe4 , ReC4 , Book_Introduction4): n! A, R' {# [" U7 A: n& {6 G% U% G
  241.         Titleid = response.url.split(BookID + "/")[-1].split("/")[0]     
    7 H8 b% Y5 G5 e
  242.         Book_img = response.save['img'],  #小说图片4 N5 t5 \4 h1 p' W, ]" e
  243.             
    ; C6 ?, y0 o8 S
  244.         #insert into MySQL 小说入库
    $ O% T: u" D# D# Z" o( |2 }
  245.         self.add_question(Bookname,Cater_Name,Book_author,Book_Introduction,Book_Synopsis,Book_Palabras,Bookurl,Booktitle,BookID,BookConte,Titleid,abover,Book_Date)   #这行可注译,数据库发布接口,方便其他系统的发布8 q$ {4 o5 I+ u6 |0 F  O
  246.         self.add_comment(Bookname, Booktitle, BookID, Titleid, Book_Date)   #这行可注译,数据库发布接口,方便其他系统的发布
    ; e/ G4 \7 V9 [
  247.         #post提交发布: ^8 a! H9 [( Y0 d& f  N$ [2 y
  248.         self.add_locoy(Bookname,Cater_Name,Book_author,Book_Introduction,Book_Palabras,Book_img,Booktitle,BookConte,abover)  #这行可注译,火车头发布接口,不需要可取消
    0 M: o( W( o" I) n% ?3 f, i  B
  249.         Datos = {9 o# o( y4 `1 u) I
  250.                   "Cater_Name":response.save['Cater_Name'],
    0 e2 K% L$ ?" ^6 w% L
  251.                    "Book_author":response.save['Book_author'],7 s& J1 b- j* _& s. P& F/ z
  252.                    "Book_Introduction":response.save['Book_Introduction'],
    & G& T! M) N0 q- P. [% m
  253.                    "Book_Synopsis":response.save['Book_Synopsis'],1 m" u5 i( a7 f: ~4 I) }) W7 _
  254.                    "Book_Palabras":response.save['Book_Palabras'],
    : E! [: \3 o9 O: V
  255.                    "img":response.save['img'],4 Q1 o& X+ {4 S/ W" p1 H
  256.                      }* n) q- X* B% g/ `% L( [
  257.         for each in response.doc('.articlebtn > a:nth-child(4)[href*="/xiaoshuo"]').items():; |) A. [! ~! a; W
  258.             self.crawl(each.attr.href, callback=self.detail_page,save=Datos) % R, u* z- x7 e8 d" X
  259.         return {5 v' a# K1 p0 s" ]
  260.             "Cater_Name":Cater_Name,# B( ?& @& ^) j. q6 _( w; a4 u  K* ]- u9 [
  261.             "Bookname":Bookname,$ j/ \4 p2 F1 ?, \" p8 N& s1 i
  262.             "Book_author":Book_author,
    ; W& _2 s* f; [# V" w6 v0 P
  263.             "Book_Introduction":Book_Introduction,6 K4 S3 u+ D" S; H5 u3 G* C
  264.             "Book_Synopsis":Book_Synopsis,/ Y+ W/ F- X" b* S0 z
  265.             "Book_Palabras":Book_Palabras,. A& ^) o- l8 x0 F, U' @0 Z
  266.             "Book_img":Book_img,
    / ^9 e8 I, M: O8 d. C
  267.             "Bookurl": response.url,! C0 U: w, l4 K# ?
  268.             "Booktitle": Booktitle,& O' x1 G% ], a' \0 r
  269.             "BookID": BookID,
    5 _5 o# n( V3 t0 P7 `. {" t) N
  270.             "BookConte": BookConte,
    , J3 G0 ]! k$ {; o* ~' X
  271.             "Titleid": Titleid,$ T" \2 a8 t3 Z  h  q4 d
  272.             "abover":abover,
    ' U6 b2 D) m( _- Q% V" y- y6 z! g0 [
  273. #            "Book_Date" = str(datetime.datetime.now()),
    # [$ R2 Y7 A. V, e
  274.         }7 f# a- K6 U1 p! H6 M6 W* Z0 o
  275.     def download(self, P_dir, imgDir, file_name, Book_img):
    ; n. \5 g- D/ {2 \) g, p2 S
  276.         if not os.path.exists(imgDir): 8 D! a# F* L; V4 [$ F# P/ E+ ^
  277.             os.makedirs(imgDir)
    * S0 O/ Y9 Z3 O# M, @$ w
  278.         file = imgDir + "/" + file_name* Q. f; [$ ~+ c5 C9 c1 }
  279. #        print file+ G, c; t' {0 M+ r1 p0 w
  280.         f = open(file, 'wb+')+ K, v4 F& w$ |
  281.         imag = requests.get(Book_img)
    / G8 V* U5 b' _  Q9 L$ c
  282.         f.write(imag.content)
    " R- F2 ?1 k% Q% R2 \. g' P
  283.         f.close()4 |" e2 G/ _  V$ a! c. N
  284.         #保存图片前
    $ ]  z9 I: p+ m
  285.     def save_imgs(self,response):5 h1 u  s& \' t. L( z- l
  286.         content = response.content
    4 n3 r2 z; N1 @  l. ^
  287.         file_name = response.save["file_name"]
    - z( b/ }* j3 V+ s) U: W
  288.         imgDir = response.save["imgDir"]$ W8 f' x' x8 i1 G+ k; t0 Y8 [" ]3 _
  289.         file_path = imgDir + file_name! i, R: B  K9 `" l4 O/ o' Q+ ]
  290.         self.save_img(content,imgDir,file_path)- m( i& A( ]6 I4 V' c/ J' f
  291.     #保存图片
    0 r% V+ `( T. L5 o3 |. L! D9 B, \4 n' F
  292.     def save_img(self,content,imgDir,path):
    1 n; S4 [4 o0 Y4 n; }! c
  293.         if not os.path.exists(imgDir):                        
    9 O" ]- v5 \7 N; [
  294.             os.makedirs(imgDir)
    " F8 q2 z2 T0 i7 ]) ?
  295.         f = open(path,"wb" )
    0 {9 r  i! Q" f9 m* w" ?2 I
  296.         f.write(content)- ~% I' C% a: ^% m% K, z
  297.         f.close()
    & A0 _1 A2 L1 r. ]5 t& T, T
  298.     #获取url后缀名2 j: V+ ^! ^4 K2 L% Y) X- ?, ~
  299.     def getExtension(self,url):                           
    ' J; W) ]9 K2 y9 ~
  300.         extension = url.split(".")[-1]  D& s" S4 I1 D# n& `! }9 ?: Q
  301.         return extension
    ( s/ j" I4 o3 l5 ?# H
  302.     4 B- |% O1 L' ^# `: j
  303.     #获取图片名& T5 f2 c- ?" l& a
  304.     def getname(self,url):
    : C) g5 [6 `1 E
  305.         name=url.split("/")[-1].split(".")[0]
    4 W9 }$ Q& E# t+ K. V; T, [, Z- [
  306.         return name
复制代码
8 \+ N0 \' M, k7 x/ m) \

& f3 n: x+ _# E- Z  j8 Z
您需要登录后才可以回帖 登录 | 注册

本版积分规则

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

GMT+8, 2022-9-26 23:41

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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