找回密码
 注册

QQ登录

只需一步,快速开始

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

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

[复制链接]
发表于 2019-6-8 23:06:07 | 显示全部楼层 |阅读模式
Python + pyspider某小说站的爬虫,入数据库,火车头发布,资源下载到本地,另可写爬虫!' n9 k! r( F( {) {
  1. #!/usr/bin/env python) X6 H3 b6 C8 Q
  2. # -*- encoding: utf-8 -*-
    ; i' d7 V' v" q" O5 ^+ h9 k4 O/ u  E
  3. # Created on 2019-05-05 21:43:11
    $ }, z) ~1 ?' g
  4. # Project: XiaoShuo
    - H2 j6 \9 T3 `0 l. D% ?* w
  5. . p% w, h) B- ?
  6. from pyspider.libs.base_handler import *, \9 }3 D' t& f2 B+ O
  7. import pymysql! d" m% N- \% i6 g- ^7 a
  8. import random
    / e( D" G1 E% c, d$ Z
  9. import datetime
    " Z) s; i" A% r8 ?/ c& C
  10. import urllib2,HTMLParser,re: b8 d: I5 G& I7 }
  11. import os
    # K+ t; N% v: f* d" e: f, E
  12. import sys9 m" L  d; w" M+ Y
  13. import re
    ; h2 w. z7 q: M3 j/ p
  14. import codecs
    ! x) M) ]9 e; N$ N/ [' B% c2 f2 y! m
  15. import requests
    $ _8 m5 r: j: Q
  16. import json1 V  C: p8 t' r" x, m7 p2 P
  17. 8 w7 b% g8 H/ y' U; W( I
  18. class Handler(BaseHandler):$ _9 q8 F& l) I4 f) O7 x( Z) Q9 O
  19.     global Datos
      O8 m. M1 l3 X+ C
  20.     global P_dir    4 {0 L1 e% q: o% H6 j
  21.     P_dir = '/Tools/Debug/'  #采集时候图片保持到本地的路径
    4 s+ t  C: O5 I% H+ h  |2 _9 T
  22.     global Datos) y* \- u% C; |0 `, T
  23.     Datos = {}
    " O5 h2 O8 }: Z7 d" q
  24.     headers= {
    % v8 Z2 }/ H- n. k* k
  25.     'Accept':'text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,*/*;q=0.8',
    + w  F7 c6 g% n2 U
  26.     'Accept-Encoding':'gzip, deflate, sdch',
    , P& F9 N/ U' ^2 S* y
  27.     'Accept-Language':'zh-CN,zh;q=0.8',; p6 }: k) L2 M: o. R
  28.     'Cache-Control':'max-age=0',& q9 X2 g2 G7 U
  29.     'Connection':'keep-alive',, H. m. v: Q, u1 [& A* [( H
  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'" k: ~+ K# O. Y9 D& D2 ~7 _
  31.     }) Z1 V/ C- R, l( {+ W: O4 w
  32.     crawl_config = {" J. K; O- p; q  Y
  33.         'headers' : headers,
    . c, C/ D, E; T( n6 H1 E
  34.         'timeout' : 300" a& z; p9 B0 G& Q
  35.     }
    2 I' [# u2 }9 V
  36.     def add_BookFile(self,Bookname, BookIDs, img, Locaimg, Book_Dates):# A: M6 H* M. ~9 j* A7 o, w& L
  37.         db = pymysql.connect(host="localhost",user="数据库用户名",password="密码",db="数据库名",charset="utf8"). j0 c0 Z+ |1 T/ t1 Y
  38.         try:* P3 p$ I1 Q% G1 m1 {4 U
  39.             cursor = db.cursor()
    1 w( q$ b6 M+ r! D
  40.             #注意此处字符串的占位符要加双引号"%s"
    # d: J+ H  f8 I# ?* m
  41.             sql = 'insert into BookFile(Bookname, BookID, img, Locaimg, Book_Date) values ("%s","%s","%s","%s","%s")' % (Bookname, BookIDs, img, Locaimg, Book_Dates);
    ! G  ~) w" d  U1 M
  42. #            print(sql)% Q" D9 q4 i& K2 `0 T
  43.             cursor.execute(sql)) _% {( f( A5 k) G6 [' k
  44.             
    7 {3 }4 S9 c2 K4 q* L
  45.             #qid = cursor.lastrowid& L# D2 [9 t/ P, b
  46.             #print(qid). ~( B! f2 z0 ~
  47.             " D" c0 B9 p0 K! j  O7 E1 R
  48.             db.commit()
    0 [; v% v1 d. W9 k! H- c& ]& e
  49.         except Exception as err:
      W- d) L/ L, {# j
  50.             print("Error %s for execute sql: %s" % (err, sql))
    ! S# }5 q+ ?& k+ C- r8 _: ~
  51.             db.rollback()
    3 Z" ^" ]$ i4 c7 Z* h4 M
  52.     def add_comment(self,Bookname, Booktitle, BookID, Titleid, Book_Date):
    8 l% {1 c0 s& z9 c+ s
  53.         db = pymysql.connect(host="localhost",user="数据库用户名",password="密码",db="数据库名",charset="utf8")( O& ]/ o, N6 ]6 W$ B
  54.         try:- Z# ]8 O: z8 {$ R" H. L
  55.             cursor = db.cursor()
    $ M, F, b+ n" Y
  56.             #注意此处字符串的占位符要加双引号"%s"
    . Y" x6 {; S2 M1 I
  57.             sql = 'insert into BookTitle(Bookname, Booktitle, BookID, Titleid, Book_Date) values ("%s","%s","%s","%s","%s")' % (Bookname, Booktitle, BookID, Titleid, Book_Date);9 U0 q$ B0 |7 z: n/ @
  58. #            print(sql)
    , C; Z  g! d6 i: @
  59.             cursor.execute(sql)
    0 @5 {9 p2 @4 l  }1 p4 n5 F' O
  60.             ; F4 D/ q3 B; X' s
  61.             #qid = cursor.lastrowid
    ) I% m) e) E  I
  62.             #print(qid)6 r3 N6 g( L+ R8 Z: U2 v  `
  63.             
    ) c5 |: n) ?! a- c2 i
  64.             db.commit()
    ; g, G4 m' A# |1 @+ W; y
  65.         except Exception as err:7 k# o$ W1 [7 Z: s7 w3 b; e6 e
  66.             print("Error %s for execute sql: %s" % (err, sql))+ a  e4 H# q! T0 y
  67.             db.rollback()  i3 x; t% M& Z, F, H+ 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):, a. P. J8 s' {3 q
  69.         db = pymysql.connect(host="localhost",user="数据库用户名",password="密码",db="数据库名",charset="utf8")
    / @4 A6 w0 _& u/ C0 W' V
  70.         try:8 ~5 o) `! T4 K5 e6 r
  71.             cursor = db.cursor()- _/ b* Q; b( r) `8 b! Q6 [/ N3 m
  72.             #注意此处字符串的占位符要加双引号"%s"
    $ h' V1 K1 t0 _/ E# L' P
  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);
    9 @" r9 t) w8 L, W- e
  74.             print(sql)
    0 F" b4 _" s0 E3 T
  75.             cursor.execute(sql)/ s& s7 l& \) x0 @
  76.             print(cursor.lastrowid)9 m8 [6 V5 R- P) F# ?) _
  77.             db.commit()
    5 L9 \/ A1 w) U8 _4 |
  78.         except Exception as err:
      f) L+ l* t1 T6 A9 p1 O0 @0 N
  79. #        except:0 n/ ?2 E- [8 G( h7 r% _2 b  q2 n) Z
  80. #            print('Failed')
    " |: s: j; O5 p- p. a
  81.             print("Error %s for execute sql: %s" % (err, sql))
    4 g* \/ r6 e7 m6 W5 N& ?3 B
  82.             db.rollback()4 [+ E/ U6 s' t2 n
  83.         7 P4 {( {  e  F, Y( {4 @, d
  84.     def add_locoy(self,Bookname,Cater_Name,Book_author,Book_Introduction,Book_Palabras,Book_img,Booktitle,BookConte,abover): 0 i- p2 Z8 b5 M7 M! E' x
  85.             reload(sys); S1 J: G8 E2 d  X3 Z1 `4 ~
  86.             sys.setdefaultencoding("gbk")
    & u/ c( r0 e) @) S2 R6 O
  87.             locoy_url = 'http://www.******.net/locoy/?my=book'  #697火车头发接口地址
    4 J6 ?* k3 a. V  ^, D$ s
  88.             locoy_data = {
    * X( m+ [' C/ _7 K4 q1 U
  89.             'my_u':'用户名',   #后台用户名
    4 U) Y1 T2 C6 C5 M
  90.             'my_p':'密码',   #后台密码$ x6 {) f+ y' f2 J
  91.             'subject_669977_net':Bookname.encode('gbk', 'ignore'),
    4 w* d( \: W+ f: |# x0 {1 f
  92.             'caid':Cater_Name.encode('gbk', 'ignore'),
    * l) A  C# Q- t6 z
  93.             'title_669977_net':Booktitle.encode('gbk', 'ignore'),) _. ^" W1 e; ^6 h  ?
  94.             'article':BookConte.encode('gbk', 'ignore'),  r" Y' U) t1 J- w
  95.             'author':Book_author.encode('gbk', 'ignore'),5 [+ o: e4 |+ g9 P$ D
  96.             'ready_1':Book_Palabras.encode('gbk', 'ignore'),
    $ ^, M# g' @) @* R( |& v
  97.             'thumb':Book_img,8 ]; v" Q7 f- X9 L5 U- P( Y
  98.             'content':Book_Introduction.encode('gbk', 'ignore'),( \3 G6 C( Y' s$ ^
  99.             'abover':abover.encode('gbk', 'ignore')           
    % J$ M0 \8 e7 M8 V- O- g/ h) `
  100.                 }
      K: \! _* J: \6 A( T" U& q9 q
  101.             res = requests.post(locoy_url, data=locoy_data)
    5 e2 ?5 `1 O& k% {) F8 a8 K
  102.             print res.text
    4 l5 b( Y% }0 K
  103.             print res.content
    & \* T0 k  f* _1 i* V6 @; n* E# Q
  104. #            print Dsd4 x& Q: D8 P' ~8 ^" ~1 P& D
  105.             return res
    7 X& C. o; u& ~0 r; ^
  106.     7 T( n5 e# N% H) U: q
  107.     def __init__(self):0 r3 p/ p: o1 B4 O. f; y
  108.         self.base_url1 = 'https://www.****.cc/'
    * z: J& u+ v  o' Z- B" n; ]
  109.         self.base_url2 = '/'
    1 a; ]& H( K2 E/ ~! A. x$ E
  110.         self.CaterId = []
    , b- s) q& y1 |( o" w$ D4 J5 T
  111.         self.CaterIds = ['xuanhuan', 'wuxia', 'yanqing', 'lishi', 'kehuan', 'kongbu', 'nvsheng']' H2 Y  K1 j2 D, S& ]6 s, W9 z
  112.         self.page_num = 1) l* I5 H- M+ J! D2 Y
  113.         self.total_num = 200   
    6 ?  B; v+ ]( k* v4 h& R/ V3 V1 V
  114. # p2 r2 a7 V  W, Q1 i3 [
  115.     @every(minutes=8 * 60): [! K) ~0 Y. }* p0 x
  116.     def on_start(self):
    9 n3 `5 F2 y( N; e1 O2 g! Q
  117.         global Cater_Name. I; r7 o) \) y$ }  P6 x4 X
  118.         Cater_Name = []. y( M3 S; Q' p" z0 g. J
  119.         while self.page_num <= self.total_num: ) m5 [0 o7 t5 j; H7 O
  120.             for self.CaterId in self.CaterIds:2 j3 H5 I3 c' B0 w) [; K; L
  121.                 if self.CaterId  == 'xuanhuan':! ]; X$ ]8 N* T; p: I
  122.                      Cater_Name = '玄幻'% F$ ^7 N7 b8 W" t7 f3 [
  123.                 if self.CaterId  == 'wuxia':0 y* G" r. C8 g+ p. u2 Z, D/ _
  124.                     Cater_Name = '武侠'
    ; g9 Y: B) b! s- b7 v
  125.                 if self.CaterId  == 'lishi':2 a- k. ~4 U, }: Z1 ?. Q5 w( e: x
  126.                     Cater_Name = '历史'            , |( R( i! C6 x0 n: M
  127.                 if self.CaterId  == 'yanqing':# A5 |0 @* {; M7 e, R9 d: i4 a
  128.                     Cater_Name = '都市' ( Q0 f/ m# |& S+ m
  129.                 if self.CaterId  == 'nvsheng':- q% t' w& c5 n( @- r
  130.                     Cater_Name = '都市'
    * @- u$ J- s% |3 S9 [/ {9 O
  131.                 if self.CaterId  == 'kehuan':; Q+ w2 m5 r3 |% r/ [" D
  132.                     Cater_Name = '科幻' 0 q& H; }$ k1 |' ?
  133.                 if self.CaterId  == 'kongbu':% B2 A0 L3 S6 p, `& Q. a, n6 T
  134.                     Cater_Name = '游戏' % Z* ]* K0 I+ q5 i
  135.                 print self.CaterId
    $ Q4 E3 e+ @$ C: a
  136.                 url = self.base_url1 + str(self.CaterId) + self.base_url2 + str(self.page_num) + "/"         
    & F8 _2 ^. r, T. e; O: R( t
  137.                 self.crawl(url, callback=self.list_Caterg,save=Cater_Name)
    ! {$ I/ m: F9 w& U! A9 u/ v4 P
  138.             self.page_num += 1 ' @' l" E7 u+ T, w; H& ]- K0 J
  139.             7 [0 q! q% C! I! a2 Y
  140.     def list_Caterg(self, response):! s7 ?# f) c& L3 Z( h9 c; d  c/ T
  141.         Cater_Name = response.save
    , H  Z+ q8 @; a- `0 `. H4 W
  142.         for each in response.doc('.pic-list a[href^="http"]').items():! X1 v) n1 I8 A
  143.             self.crawl(each.attr.href, callback=self.list_Caterg_detail,save=Cater_Name)5 l0 @2 T& l* M8 t' }
  144.             
    / g$ s" z. t7 ?' h
  145.     def list_Caterg_detail(self, response):& _2 i$ N6 O5 M$ |
  146.         Cater_Name = response.save
    - J$ |" _( Z" S' n# _0 f, i  n( Q2 W2 E
  147. #        print Cater_Name! n+ l3 \9 ~. Q
  148.         Bookname = response.doc('h1').text()0 p9 P- Y. B8 ~8 l
  149.         print Bookname* b( Y3 ^% s, G; a9 [& v4 H3 n
  150.         Book_author = response.doc('.authorname > a').text()% Z, L1 r; _, d5 p
  151. #        print Book_author
    0 s2 z4 Q& h5 m; \' R
  152.         Book_Introduction = response.doc('.book-intro > div').text()
    3 Q% W" Z! a& `9 \
  153. #        print Book_Introduction
    ; f2 N! F+ w" ?8 y5 j5 O( D, }' ~
  154.         Book_Synopsis = response.doc('b').eq(1).text()
    3 z+ P( v& M- T5 ]7 Z' B% E
  155. #        print Book_Synopsis
    # e7 V  J" y# X; l, X
  156.         Book_Palabras = response.doc('.booktitle p').text().split(' ')[1].split('|')[0]
    ; z; n" F& \# \% ?2 c7 p
  157. #        print Book_Palabras* E# D3 l; k, o8 w& i3 x/ o
  158.         BookIDs = response.url.split("xiaoshuo/")[-1].split("/")[0]   #小说ID
    4 F6 t1 I9 ]8 p% @' Z; d' w
  159. #        print BookIDs! d# `, C, K; N
  160.         Book_Dates = str(datetime.datetime.now())         
    : b0 W6 ^3 P4 u3 q
  161.         for imgs in response.doc('.bigpic > img[src^="http"]').items():1 n' B9 }' q; Z
  162.             img = imgs.attr.src. h. e$ o# T/ o. U# }1 g9 r: _$ k
  163.             print img
    8 ^& O8 H, j, b: J
  164.                 #小说封面下载
    2 A* j) B+ I! `4 M5 S& K- B  N
  165.             extension = self.getExtension(img)9 X6 [: g  G6 p& N, \
  166.             name = self.getname(img)( u# y( Z  Q# r5 M& v8 B
  167.             file_name = name + "." + extension3 }. N3 T  X' @/ \- u" r' e
  168.             imgDir = P_dir + name
    % W( o8 s& E' g6 ?1 }
  169.             Locaimg = imgDir + "/" + file_name
    4 `' _) n( G% [/ V
  170.             print Locaimg
    ( ^8 v" n* P; F  S, P6 j1 P
  171.             if(self.download(P_dir, imgDir, file_name, img)):   #这2行可注译,图片下载到本地9 v$ U9 ?& R; {% n7 t6 g
  172.                 print('attachment url is ' + img)               #
    & O6 |" K. D( ?* g/ q
  173.             Datos = {
    6 Z7 Y% A: Y& E/ v& M
  174.                     "Cater_Name":Cater_Name,) ^( o' D2 \) u/ I. }
  175.                     "Book_author":Book_author,
    5 h# _% R  \. J) @
  176.                     "Book_Introduction":Book_Introduction,
    7 [  f  j. u+ g) m8 a% L  C
  177.                     "Book_Synopsis":Book_Synopsis,
      ?3 n; A7 R- ^, b+ B( E; D
  178.                     "Book_Palabras":Book_Palabras,' i( C$ _% s$ f7 ^+ k
  179.                     "img":img,
    . u* B" J9 o3 z: F6 W: ^, O4 @' D9 {
  180.                 }
    . D0 _8 k$ U" S' i* w
  181.             self.add_BookFile(Bookname, BookIDs, img, Locaimg, Book_Dates)  #这行可注译,数据库发布接口,方便其他系统的发布
    5 F9 F2 B% A. F
  182.         for each in response.doc('div[class="bookbtn-txt"]  a[class="catalogbtn"]').items():
    4 q0 c& u+ ~1 }  Z+ i9 j/ T% _4 g
  183.             self.crawl(each.attr.href, callback=self.index_page,save=Datos)
    3 ^" M- g% O+ B4 _" C
  184.             4 I) U4 V0 T: ~1 u8 I
  185.     @config(age=8 * 60 * 60)   
    5 d" k& w. e" C8 I$ F' g' B
  186.     def index_page(self, response):
    % p* `# M  ]8 o# ~# D5 o
  187.         Datos = {
    9 H9 F- |- Q7 W( F) w
  188.                   "Cater_Name":response.save['Cater_Name'],
    & M1 S* ]" T# K- R/ v
  189.                    "Book_author":response.save['Book_author'],, g: j# y" j2 j7 X( `1 @8 a
  190.                    "Book_Introduction":response.save['Book_Introduction'],
    5 ?- Q% Q' I8 l# q+ X/ i
  191.                    "Book_Synopsis":response.save['Book_Synopsis'],
    5 q# W9 @- C6 F$ {
  192.                    "Book_Palabras":response.save['Book_Palabras'],
    + i: W! }% ^, o/ L
  193.                    "img":response.save['img'],  _/ |0 ^% y$ n! k& c* P+ |
  194.                      }
    3 m& T0 t, A$ _  ]* k( R
  195.         for each in response.doc('.chapter-list li:first-child a[href^="http"]').items():
    ( M. R( e* z5 l) q$ ]5 j# f4 d
  196. #        for each in response.doc('.chapter-list  a[href^="http"]').items():  4 B5 s6 k; \2 L6 J" r
  197.                     self.crawl(each.attr.href, callback=self.detail_page,save=Datos)3 E2 S% d7 M1 Q' m  G
  198.     @config(priority=2)9 V% Z- K' }# A: }9 w7 y7 M3 F/ X
  199.     @catch_status_code_error
    * K8 Y. Q" J( Z" d
  200.     def detail_page(self, response):        
    5 C: h! S$ j$ l3 y
  201.         NewRe1 = u'哈书'
    0 Q3 n) T! _8 {: Y+ O" c, Z8 x
  202.         NewRe2 = u'huhjsd.CC'* e1 P/ w' L% m- L. T! N+ \- ~
  203.         NewRe3 = r'^\\n\\n'
    + i- g: b* n7 S  `4 V
  204.         NewRe5 = u'小说网'
    * ^, f- E8 w  z* T( c
  205.         NewRe6 = u'fgdfgf'& c+ `8 ]1 U8 n" L( L- k, _4 o$ I
  206.         NewRe7 = u'fgfgf'. Y* ]; u2 ?6 [. D
  207.         NewRe8 = u'ffhgf'
    0 K% P, y" D- ?5 u- p4 y
  208.         NewRe4 = r'[\f\t\v+\.\{\(\)\}\!\/_,$%^*(+"\')]+|[+——()?【】“”!,。?、~@#¥%……&*()]+'
    ) S$ U0 \) O. D& _* F9 U6 Z
  209.         ReC1 = u'静思'2 L9 q( r, T% c" \/ ~+ j8 {. t6 x
  210.         ReC2 = u'aghgf.com'
    ! d) n9 L5 C$ D  S
  211.         ReC3 = u'aghgfh.com'
    & G4 o8 L0 V# }& u
  212.         ReC4 = u''
    8 q8 i" K. z; h4 }8 S5 Y
  213.         ReC5 = u'文学网'& z3 a" P& }- g
  214.         ReC6 = r'<BR>'
    % E" o$ q) I# a$ Z' L, i
  215.         Bookname = response.doc('.readlocation a').eq(2).text()   #小说名称
    2 L" C  g4 P5 f( U: r0 q2 E5 A5 a
  216.         print Bookname1 z/ O8 u4 X1 c4 a" Y; b* e
  217.         Cater_Name = response.save['Cater_Name']   # 小说分类( W8 K7 l' k) s2 S1 i/ K6 {
  218.         Book_author = response.save['Book_author']   #小说作者
    6 P4 D) P8 `2 f% t* i8 h4 P7 I; K" d
  219.         Book_Introduction1 = response.save['Book_Introduction']   #小说简介
    1 l# |& h6 Y0 I+ Z; z
  220.         Book_Synopsis = response.save['Book_Synopsis']   #最近更新3 c3 j$ f4 X. z
  221.         Book_Palabras = response.save['Book_Palabras']   #小说字数8 A& r4 c9 J. r) u0 q
  222.         Bookurl = response.url   #小说网址: {9 ^! ~1 D6 E: ?* b0 A. N
  223.         Booktitle = response.doc('.article-title').text()   #章节名称. Z, q6 J# {7 L9 E% L# `4 @3 q; M) G
  224.         BookID = response.doc('.readset-r span').text()   #小说ID
    3 ~# O8 S1 x4 c# L
  225.         BookConte1 = response.doc('.article-con').text()   #小说章节内容( E5 R6 U& C9 H) ^6 x& Y, f$ X
  226.         abover = response.doc('.article-title').text() + response.save['Book_Synopsis'] + response.save['Book_Palabras'] + response.save['Book_Introduction']   #小说状态(连载还是完成)" ~8 S  R+ f- M6 ^& `" J3 }1 M
  227.         Book_Date = str(datetime.datetime.now())    # 采集时间* p$ c  v1 v( c+ j9 F! B$ V1 ?
  228.         BookConte2 = BookConte1.replace(NewRe1 , ReC1), T4 X" W: ?3 j$ S4 r# r
  229.         BookConte3 = BookConte2.replace(NewRe2 , ReC2)
    ) n/ m3 Y1 z1 K( Y% d
  230.         BookConte5 = BookConte3.replace(NewRe5 , ReC5); G& _( _1 F& E2 B
  231.         BookConte6 = BookConte5.replace(NewRe6 , ReC2)
    - @  S. X+ c$ L/ j0 l
  232.         BookConte7 = BookConte6.replace(NewRe7 , ReC2)# v) }# w- T. {8 g
  233.         BookConte8 = BookConte7.replace(NewRe3 , ReC6)
    5 u  b6 u& i1 ]  \( \
  234.         BookConte4 = re.sub(NewRe4 , ReC4 , BookConte8)  s# x3 {, h, A. m: K
  235.         BookConte = BookConte4.replace("\n\n","<br>")2 P) l; D4 y" k$ L
  236.         print BookConte: P7 @6 i/ D- Y
  237.         Book_Introduction2 = Book_Introduction1.replace(NewRe1 , ReC1)9 ]/ |) p# S% K9 D
  238.         Book_Introduction3 = Book_Introduction2.replace(NewRe2 , ReC2)4 B  m1 y; J& W% Y6 B7 `! H/ o
  239.         Book_Introduction4 = Book_Introduction3.replace(NewRe3 , ReC3)
    $ @2 ?/ @" z& ~% ?+ ]. d8 h
  240.         Book_Introduction = re.sub(NewRe4 , ReC4 , Book_Introduction4)7 y6 Y) r5 J0 R  p: O- D( \" n9 N8 V& e  `
  241.         Titleid = response.url.split(BookID + "/")[-1].split("/")[0]     4 ^% x& \7 J! V) b, A" S
  242.         Book_img = response.save['img'],  #小说图片5 c$ o- h! h6 ?% Y
  243.              8 o0 b  d( ?0 n2 r3 I9 H! C
  244.         #insert into MySQL 小说入库
    3 h6 R+ x5 _7 M, m0 m8 |1 _, |
  245.         self.add_question(Bookname,Cater_Name,Book_author,Book_Introduction,Book_Synopsis,Book_Palabras,Bookurl,Booktitle,BookID,BookConte,Titleid,abover,Book_Date)   #这行可注译,数据库发布接口,方便其他系统的发布
    & j- P  {! P; r4 Z$ d+ P" ^: o$ c
  246.         self.add_comment(Bookname, Booktitle, BookID, Titleid, Book_Date)   #这行可注译,数据库发布接口,方便其他系统的发布
    7 i% t. a! s. z7 z
  247.         #post提交发布$ C" ?  I6 R  a$ Z5 S# s/ D# B
  248.         self.add_locoy(Bookname,Cater_Name,Book_author,Book_Introduction,Book_Palabras,Book_img,Booktitle,BookConte,abover)  #这行可注译,火车头发布接口,不需要可取消! [. c+ L; A9 G) V' ^( `3 _
  249.         Datos = {
    7 ?  W$ e8 v) ]$ E" C( r) v
  250.                   "Cater_Name":response.save['Cater_Name'],4 W2 O" ]  K# M$ Q) M- ]' X
  251.                    "Book_author":response.save['Book_author'],8 ^9 n& V, R0 n9 s7 `( _& h) x
  252.                    "Book_Introduction":response.save['Book_Introduction'],) F; W2 |* o: e, V
  253.                    "Book_Synopsis":response.save['Book_Synopsis'],4 @" J3 h5 \+ r/ }
  254.                    "Book_Palabras":response.save['Book_Palabras'],
    . e1 \) @* [6 J: G6 r$ y
  255.                    "img":response.save['img'],6 \% [) t0 S% p9 f1 n# N
  256.                      }
    # t+ V8 k7 p; j" }
  257.         for each in response.doc('.articlebtn > a:nth-child(4)[href*="/xiaoshuo"]').items():
    ( q' c+ ^& p2 B0 d5 F- Z* l) T
  258.             self.crawl(each.attr.href, callback=self.detail_page,save=Datos) * ^$ c! A& Y. i" K
  259.         return {
    3 b! P  D, B9 m  w% d; W0 e
  260.             "Cater_Name":Cater_Name,- M+ X) M9 e2 O1 @
  261.             "Bookname":Bookname,6 l* L) r( ~: w5 v, P4 d
  262.             "Book_author":Book_author,
    5 M% d8 G6 U: z9 w1 D7 o: C
  263.             "Book_Introduction":Book_Introduction,1 q  n8 n5 h- b6 \1 u& w7 {9 R. K
  264.             "Book_Synopsis":Book_Synopsis,5 H0 ?) B" _' H  i
  265.             "Book_Palabras":Book_Palabras,, J/ }) f8 f! g
  266.             "Book_img":Book_img,2 ?9 q, E0 X# i; O0 K! N
  267.             "Bookurl": response.url,! X9 r1 }8 f, |5 J
  268.             "Booktitle": Booktitle,
    0 T% G" b) T1 Z7 {; d8 M
  269.             "BookID": BookID,
      u* R# p" ~, h9 X* [5 f
  270.             "BookConte": BookConte,% ~, j8 W( l" i6 Y4 F" ?6 y; T" x
  271.             "Titleid": Titleid,
    3 d' @, w# y7 k7 i, Z
  272.             "abover":abover,
    ' Y5 O" L0 M8 r2 K5 ?
  273. #            "Book_Date" = str(datetime.datetime.now()),
    ) r3 p$ p! N7 i# l4 V# c* C
  274.         }- F2 R4 Z" @$ G. R$ X! u/ u
  275.     def download(self, P_dir, imgDir, file_name, Book_img):
    1 f, u3 h$ W! \8 ~
  276.         if not os.path.exists(imgDir):
    + C/ p4 y) _6 ]4 ?0 e
  277.             os.makedirs(imgDir)
    % w) y0 W- ]1 X* B
  278.         file = imgDir + "/" + file_name
    . A3 E0 h2 \: a
  279. #        print file3 P0 s) {8 P8 M: w' ^9 x
  280.         f = open(file, 'wb+')
    8 m$ j6 I7 n8 ~1 N5 U7 {) J  v
  281.         imag = requests.get(Book_img)
    : U4 Q$ p2 Y4 E1 I$ D: Z( h
  282.         f.write(imag.content)
    6 l* g& J) Q& V" A& s
  283.         f.close()
    2 I: W: D4 E3 Q) Z, K2 n- g
  284.         #保存图片前* C, ]8 w% h4 a3 O: a
  285.     def save_imgs(self,response):! D/ O0 ]: f  K% L
  286.         content = response.content
    # P  ~. A& a! @
  287.         file_name = response.save["file_name"]7 O1 W8 L6 G6 }' M7 B+ \
  288.         imgDir = response.save["imgDir"]8 @( r  [# n/ W8 b1 z4 S2 X' [
  289.         file_path = imgDir + file_name- h( f( B( R+ V, o  ?: j7 W% O
  290.         self.save_img(content,imgDir,file_path)0 y, w: t, D8 l! G8 }( i. S# V# r
  291.     #保存图片" ]. O) v8 n% K! t3 c3 j
  292.     def save_img(self,content,imgDir,path):' x) \' D3 q- d2 q" k* T- g7 |8 G7 Y' Y
  293.         if not os.path.exists(imgDir):                        
    ! y2 P9 w. X4 c6 ]2 X4 T
  294.             os.makedirs(imgDir)
    ) J" N& I4 Z6 W6 I# x* ?# A
  295.         f = open(path,"wb" )
    4 y- F) S; p6 E
  296.         f.write(content)( s2 s+ U6 J7 M6 C4 i( D* x" Q% j
  297.         f.close()
    5 [2 f1 T4 I/ R2 R/ s
  298.     #获取url后缀名4 g9 r5 J/ |9 ]" l
  299.     def getExtension(self,url):                            % g% n- I/ m, j
  300.         extension = url.split(".")[-1]
    3 X" f8 `2 |5 ~
  301.         return extension   Q9 n: x, {$ }6 P/ c
  302.    
    # r. r! G4 \+ f! g- K+ M, T% J+ B- [
  303.     #获取图片名, f/ }; g- f+ I, n4 N
  304.     def getname(self,url):( L! ?: I& W$ Z$ e8 ~
  305.         name=url.split("/")[-1].split(".")[0]$ z) W5 C# O) B; A5 h8 L* S, L: I; e
  306.         return name
复制代码
5 [$ E: T' i8 U& V' z9 f- L- @
4 S6 U+ a) w& R$ \5 g1 p6 L8 Y
您需要登录后才可以回帖 登录 | 注册

本版积分规则

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

GMT+8, 2025-7-13 14:46

Powered by Discuz! X3.5

© 2001-2025 Discuz! Team.

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