找回密码
 注册

QQ登录

只需一步,快速开始

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

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

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

6 a# N: h. i* N! ]
& h2 w6 F5 K$ N. b$ S
您需要登录后才可以回帖 登录 | 注册

本版积分规则

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

GMT+8, 2025-2-19 06:56

Powered by Discuz! X3.5

© 2001-2025 Discuz! Team.

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