找回密码
 注册

QQ登录

只需一步,快速开始

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

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

[复制链接]
发表于 2019-6-8 23:06:07 | 显示全部楼层 |阅读模式
Python + pyspider某小说站的爬虫,入数据库,火车头发布,资源下载到本地,另可写爬虫!3 M! }& m, \9 k7 p% U1 h
  1. #!/usr/bin/env python7 n' F  C, w9 T7 F$ X- E
  2. # -*- encoding: utf-8 -*-
    + U* d/ ?1 K2 M1 x) X& W( m# D& J9 O; R
  3. # Created on 2019-05-05 21:43:11+ Z+ B" |- b& l* l0 S
  4. # Project: XiaoShuo- F. n! y) b; K, |$ Y

  5. ' H/ n' ]6 W( ^6 F# _  d9 a6 O' a
  6. from pyspider.libs.base_handler import *
    3 c/ X: E% \) v9 a
  7. import pymysql
    % y! T- H8 n5 @- D; _8 _3 @
  8. import random
    8 N- K* q9 q6 A
  9. import datetime
    2 r; }" f+ I4 z; Q- k
  10. import urllib2,HTMLParser,re( M/ x, B! p; }% M
  11. import os, P/ ~. n0 p5 v: S
  12. import sys
    & @8 s6 g6 ~# W
  13. import re
    ! k+ Y8 M( J7 X- m
  14. import codecs
    ! }8 T) `5 X; Q: B$ e
  15. import requests8 Z; p( w* p* D5 }9 W. W
  16. import json0 S7 ^" y% x* f7 ]. L
  17. % [& j( r9 @! G8 b5 ^
  18. class Handler(BaseHandler):% E6 S  g4 r9 h. j2 \$ W# j2 N
  19.     global Datos' Z& V: B. Q% w9 E+ y$ O4 i
  20.     global P_dir    7 o+ _- S. e* v; p$ {9 s' J
  21.     P_dir = '/Tools/Debug/'  #采集时候图片保持到本地的路径: L  C0 K( u; J! e( F7 [
  22.     global Datos
    & R: K/ X2 K, U8 {2 S4 Q* J( ]! n
  23.     Datos = {}* O7 O7 `: |' i7 E. R) b
  24.     headers= {
    2 K+ W/ p! i2 [# M
  25.     'Accept':'text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,*/*;q=0.8',
    " f4 x* X( x$ M# ^: E& r
  26.     'Accept-Encoding':'gzip, deflate, sdch',
    + ?; Z4 H6 T7 e8 B' Q
  27.     'Accept-Language':'zh-CN,zh;q=0.8',
    $ o" J9 Q9 c: l% c: d$ ]
  28.     'Cache-Control':'max-age=0',- g( x! ]) N0 T8 @
  29.     'Connection':'keep-alive',3 `4 |  f7 @8 G  E6 |
  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'4 w2 z& V& J5 a0 }9 e8 J
  31.     }
    ( v) L3 {( z2 n, y4 ~  c
  32.     crawl_config = {$ G) [. x5 w# s/ D+ K
  33.         'headers' : headers,
    5 O) f2 b: I! L. ?2 J
  34.         'timeout' : 300
    1 A' s1 T' Q. i
  35.     }& l# `- |0 o. ]  ^( K% K
  36.     def add_BookFile(self,Bookname, BookIDs, img, Locaimg, Book_Dates):4 p) r* P) D6 c4 y" a. J
  37.         db = pymysql.connect(host="localhost",user="数据库用户名",password="密码",db="数据库名",charset="utf8")
    ' A* Y: ]% z. y' `; m
  38.         try:+ V; w! b5 w" ~+ P% _( Y
  39.             cursor = db.cursor()+ H9 `. I; V# I% }
  40.             #注意此处字符串的占位符要加双引号"%s"  O% C5 E. h$ @/ z
  41.             sql = 'insert into BookFile(Bookname, BookID, img, Locaimg, Book_Date) values ("%s","%s","%s","%s","%s")' % (Bookname, BookIDs, img, Locaimg, Book_Dates);! S- K/ [; h- b# ]& n% v6 r4 \
  42. #            print(sql)
    0 H! J6 i7 _+ K5 A
  43.             cursor.execute(sql)* f" X1 O9 ]  a( O: v$ T# \
  44.             
    % n1 G8 W" g9 J6 b1 ?
  45.             #qid = cursor.lastrowid
    , q2 A2 B' X/ S! d
  46.             #print(qid)
    6 H2 v" P/ ~! i; w
  47.             4 W' h# g: r6 Q+ `
  48.             db.commit(); F# C! n' R# s1 J% A( x
  49.         except Exception as err:0 m, d" q7 E0 s, C3 @" ~
  50.             print("Error %s for execute sql: %s" % (err, sql))" U& P, ]/ h) p3 c9 ?+ E. T
  51.             db.rollback()
    4 L# Q& K: C3 {
  52.     def add_comment(self,Bookname, Booktitle, BookID, Titleid, Book_Date):
    7 c: }, U: Z; Y0 f2 [
  53.         db = pymysql.connect(host="localhost",user="数据库用户名",password="密码",db="数据库名",charset="utf8")9 v# v' u" j' Z! M) A
  54.         try:
    . X+ v  B" N9 a% W) c
  55.             cursor = db.cursor()+ ?+ _6 L. F8 k5 v9 y9 ^$ U
  56.             #注意此处字符串的占位符要加双引号"%s"
    : I: o' z+ \3 f+ W: r' ]8 R) g# u
  57.             sql = 'insert into BookTitle(Bookname, Booktitle, BookID, Titleid, Book_Date) values ("%s","%s","%s","%s","%s")' % (Bookname, Booktitle, BookID, Titleid, Book_Date);8 m1 ^: J4 ]  X
  58. #            print(sql)
    4 N; w3 T. l) J) [
  59.             cursor.execute(sql)
    / Z: h% n$ E& g% T
  60.             
    5 q/ a) p& T* p0 S+ K# @) {  u; M
  61.             #qid = cursor.lastrowid
    " j; T6 Z" \: l+ N6 a
  62.             #print(qid)
    4 P! n' ?* a+ \/ k4 p- I; d
  63.             
    . A5 r# l( n* b* X+ _$ z- h4 B
  64.             db.commit()' R" R4 Y2 [- x9 Z- ]
  65.         except Exception as err:
    * D! U/ X+ `# g" x  I. Y
  66.             print("Error %s for execute sql: %s" % (err, sql))
    ! Y7 G0 h& E2 s4 d1 g
  67.             db.rollback()
    ) ^" C6 v: g/ `
  68.     def add_question(self,Bookname,Cater_Name,Book_author,Book_Introduction,Book_Synopsis,Book_Palabras,Bookurl,Booktitle,BookID,BookConte,Titleid,abover,Book_Date):
    3 B1 ?+ x5 R/ p2 [2 G
  69.         db = pymysql.connect(host="localhost",user="数据库用户名",password="密码",db="数据库名",charset="utf8")" D  t( N$ i' G, \9 R) w  ]; t* m
  70.         try:
    9 W0 w6 b& F& ^* Y# p9 r/ ^
  71.             cursor = db.cursor()
    0 h) a8 h. h  ^8 l# O
  72.             #注意此处字符串的占位符要加双引号"%s"
    % x$ G% @( H0 \. t
  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);
    % ~2 O2 }( t) M7 b8 G& S& g
  74.             print(sql)
    ! n+ j) N) B; b$ Q/ G! x: r
  75.             cursor.execute(sql): w, l+ `) Y2 ~9 z! t3 U; K9 p
  76.             print(cursor.lastrowid)
    1 y+ t2 `' |, m, A* `- S) W9 I
  77.             db.commit()
    " P- q6 i8 c" i6 E
  78.         except Exception as err:
    - r9 t3 {3 d, \' K$ y% B, Y7 C
  79. #        except:
    : Y) q; @7 o4 |5 v! `* ?6 s
  80. #            print('Failed')
    $ G, `$ O  O$ J1 J
  81.             print("Error %s for execute sql: %s" % (err, sql))
    3 j2 S# U$ N. Z' v/ O
  82.             db.rollback()
    : z( S) [% `  t8 _; K, L
  83.         7 L; ~4 ~% T% _/ L
  84.     def add_locoy(self,Bookname,Cater_Name,Book_author,Book_Introduction,Book_Palabras,Book_img,Booktitle,BookConte,abover):
    ( @& O$ s: y5 |$ e# ^
  85.             reload(sys)4 I' T0 s( J6 U
  86.             sys.setdefaultencoding("gbk")( o9 q7 F9 F$ o: E4 ~0 J, v
  87.             locoy_url = 'http://www.******.net/locoy/?my=book'  #697火车头发接口地址" w* ?1 H4 H* e# v) q
  88.             locoy_data = {" }! L- }2 C4 l+ T" `
  89.             'my_u':'用户名',   #后台用户名
    % E: s& a( M* _
  90.             'my_p':'密码',   #后台密码; J& ]8 y, M1 N8 w
  91.             'subject_669977_net':Bookname.encode('gbk', 'ignore'),
    0 n, P) ]$ W2 H/ X
  92.             'caid':Cater_Name.encode('gbk', 'ignore'),
    1 M% c8 h4 m8 N& k
  93.             'title_669977_net':Booktitle.encode('gbk', 'ignore'),& v' n" k2 r* \
  94.             'article':BookConte.encode('gbk', 'ignore'),
    / H" t7 }0 q8 ]( B3 @1 A
  95.             'author':Book_author.encode('gbk', 'ignore'),  ]" {* a  y; i
  96.             'ready_1':Book_Palabras.encode('gbk', 'ignore'),6 p5 [# o+ m& G: r) l
  97.             'thumb':Book_img,
    ( o" s! {8 z" u) u% ]) U! X3 `5 q. I
  98.             'content':Book_Introduction.encode('gbk', 'ignore'),8 E* y- d2 U) g- r
  99.             'abover':abover.encode('gbk', 'ignore')           8 {7 ~& Q* ?& P6 x8 Z) R2 ^& ]
  100.                 }3 D; D6 W6 O* X. P5 z: p% y- v
  101.             res = requests.post(locoy_url, data=locoy_data)3 j6 r& z3 T: r/ U- c2 H6 q# O/ [
  102.             print res.text8 l8 z# B/ ~5 h9 J! c0 V/ d
  103.             print res.content  ~- e6 J; H3 `0 {8 ?4 v
  104. #            print Dsd
      W& }* N9 b. q3 e0 K
  105.             return res
    7 I- j6 y  {2 i0 [
  106.    
    3 O* v5 r4 U- g2 j2 J
  107.     def __init__(self):
    5 K+ f( v) ~3 l) B  `" o
  108.         self.base_url1 = 'https://www.****.cc/': I9 m9 I9 Q+ u3 {3 F! d
  109.         self.base_url2 = '/'& K2 E$ y! }  i2 T8 b3 b
  110.         self.CaterId = []# ]  a5 G, {) h5 Y! r7 m2 M
  111.         self.CaterIds = ['xuanhuan', 'wuxia', 'yanqing', 'lishi', 'kehuan', 'kongbu', 'nvsheng']: y: u4 b1 f. D
  112.         self.page_num = 1
      B- ?$ u8 m4 t
  113.         self.total_num = 200   
    ; S2 G, M4 r: \6 X' }

  114. 3 F0 B# T$ h- `' @% t0 i
  115.     @every(minutes=8 * 60)* D/ Z5 n2 U# R, k6 c! d6 v" i
  116.     def on_start(self):5 w( k- y% w0 q) o
  117.         global Cater_Name) ?2 A  W+ g, t9 A2 N3 M: E' K
  118.         Cater_Name = []+ N# ^# O5 _5 _. P4 ?) M. `( T
  119.         while self.page_num <= self.total_num: 2 x$ Y! z* r% L) X* _* z4 x4 q
  120.             for self.CaterId in self.CaterIds:
    + T. D  o- m0 M' I. g  S" M/ Y5 W
  121.                 if self.CaterId  == 'xuanhuan':1 b* {( \" d, C& h: d
  122.                      Cater_Name = '玄幻'
    ' d" ~$ ~6 C9 T! S6 E4 b! Q
  123.                 if self.CaterId  == 'wuxia':
    : q. r' [9 d8 g3 j8 O" {7 |; f
  124.                     Cater_Name = '武侠'- S% f/ ?7 m, V5 x
  125.                 if self.CaterId  == 'lishi':
    : o$ X: M5 i- ]+ ^1 I
  126.                     Cater_Name = '历史'            ( x$ V0 g% q( n$ X0 _
  127.                 if self.CaterId  == 'yanqing':
    - e3 t! i( e+ ^
  128.                     Cater_Name = '都市'
    , i# y) H0 J  C$ k" j- V6 y" S
  129.                 if self.CaterId  == 'nvsheng':
    + c' a9 ]: V' v0 b, ]  ~7 A
  130.                     Cater_Name = '都市'
    # L7 W9 y: k! N$ Y, \% j+ V; `9 l
  131.                 if self.CaterId  == 'kehuan':
    7 j) @5 l* e0 ?* G
  132.                     Cater_Name = '科幻'
    , t! P( A" G' E8 u
  133.                 if self.CaterId  == 'kongbu':
    ; |* R+ ?& W! [/ b/ ?3 w" N! u
  134.                     Cater_Name = '游戏' 8 d% c2 v) W/ ]1 e5 E# Y1 X
  135.                 print self.CaterId
    3 K6 J6 W+ U# E! `( W9 v" C0 b  e6 Q
  136.                 url = self.base_url1 + str(self.CaterId) + self.base_url2 + str(self.page_num) + "/"          8 f* h* y- o4 f7 _3 Z% A
  137.                 self.crawl(url, callback=self.list_Caterg,save=Cater_Name)% M2 N+ p) O- T
  138.             self.page_num += 1 4 q) w# N  G7 H) \+ |4 r9 i0 Y" {
  139.             0 r& i* w1 C, `: p* f0 l) g6 {
  140.     def list_Caterg(self, response):
    9 S0 r# c( y, {6 r7 Z) U$ {
  141.         Cater_Name = response.save
      V* S! t5 }7 H) G9 c/ m
  142.         for each in response.doc('.pic-list a[href^="http"]').items():
    & f5 c  e4 Q& c& i) P
  143.             self.crawl(each.attr.href, callback=self.list_Caterg_detail,save=Cater_Name)
    + [5 n/ A, ?9 d# N: c$ p7 V' k) g
  144.             
    3 L7 i, w( E& y% q! J/ O; M
  145.     def list_Caterg_detail(self, response):
    * M* d1 K9 M. l2 B
  146.         Cater_Name = response.save
    7 n) u/ B; h3 t( ?( }. P
  147. #        print Cater_Name
    1 A+ L: A( I* ?" ?
  148.         Bookname = response.doc('h1').text()9 h2 |' @- D& {
  149.         print Bookname% h9 U- z6 M4 ?; Q2 o
  150.         Book_author = response.doc('.authorname > a').text()
    / R2 A" T' o0 g# d1 y
  151. #        print Book_author
    , V: B2 F: X7 k6 @
  152.         Book_Introduction = response.doc('.book-intro > div').text()* y+ n# j$ L! B/ _
  153. #        print Book_Introduction% Z9 {7 l+ n8 i
  154.         Book_Synopsis = response.doc('b').eq(1).text()
    2 Q( Y6 @2 c7 e- g5 \5 H
  155. #        print Book_Synopsis6 U" ]/ G7 ]) L! ]+ a/ F# I, a
  156.         Book_Palabras = response.doc('.booktitle p').text().split(' ')[1].split('|')[0]
    ! b8 Q1 W* a3 [
  157. #        print Book_Palabras
    , i7 ?" y+ X7 f
  158.         BookIDs = response.url.split("xiaoshuo/")[-1].split("/")[0]   #小说ID
    ! b  N, b. [0 h( n; w# ~
  159. #        print BookIDs
    ( H/ o+ ~9 B; G5 _  i  R
  160.         Book_Dates = str(datetime.datetime.now())         
    0 \% t! ^0 s& y5 X1 \$ v# S: _: Y
  161.         for imgs in response.doc('.bigpic > img[src^="http"]').items():
    ( b( Z2 r1 C! n, F( d
  162.             img = imgs.attr.src
    ; Q' i( S8 y$ n: Q# p/ }  e% K
  163.             print img9 O! k. C% V+ A- L8 b( g
  164.                 #小说封面下载, f5 |3 o2 c) m0 x
  165.             extension = self.getExtension(img)" ]! @0 I4 A3 V4 b/ a7 b4 ?
  166.             name = self.getname(img)! j& S1 f4 ?! l
  167.             file_name = name + "." + extension: x- R( ^0 J9 }$ S4 ^% T$ T: ]2 J
  168.             imgDir = P_dir + name0 u0 o! D$ A- z! i8 ?1 {2 G! R2 v
  169.             Locaimg = imgDir + "/" + file_name
    ' k" @0 ?; _0 D+ `' Q, _( D
  170.             print Locaimg2 F4 K) c6 e7 j- \5 v
  171.             if(self.download(P_dir, imgDir, file_name, img)):   #这2行可注译,图片下载到本地' B& p; l0 k. R# t% ^
  172.                 print('attachment url is ' + img)               #% d* t1 M  t! s( d
  173.             Datos = {) m" U+ S4 e3 q/ `
  174.                     "Cater_Name":Cater_Name,, U  f# f' G5 C) w: Y9 [) ^' P" K% c
  175.                     "Book_author":Book_author,6 N9 j( l% M8 J5 P
  176.                     "Book_Introduction":Book_Introduction,- l$ n/ m5 f. Q( T  _1 t
  177.                     "Book_Synopsis":Book_Synopsis,1 o# a# \: p2 {: I3 V4 }' d' C
  178.                     "Book_Palabras":Book_Palabras,! U+ j( u- z0 p( X* A4 ~
  179.                     "img":img,
    / |( h- V0 Z5 V6 s8 i% l# e  b3 [
  180.                 }/ p' F0 j' e4 P/ o2 t: e
  181.             self.add_BookFile(Bookname, BookIDs, img, Locaimg, Book_Dates)  #这行可注译,数据库发布接口,方便其他系统的发布( i" ^& x$ }! q% X& ~+ Z# h
  182.         for each in response.doc('div[class="bookbtn-txt"]  a[class="catalogbtn"]').items():
    5 f3 k/ v' p% n0 }: n' b( S' x" X/ W" N
  183.             self.crawl(each.attr.href, callback=self.index_page,save=Datos)
    6 i4 m$ \8 a+ `" j$ W2 m8 j# ]
  184.             ! P" z6 N- `! p# L+ K% A4 V
  185.     @config(age=8 * 60 * 60)    ) h  ~* @. `( W) d( o0 a% \
  186.     def index_page(self, response):
    8 Y1 F9 O) b$ b: K( ~8 Q, A' ]8 V
  187.         Datos = {
    % S3 @4 w: x3 c
  188.                   "Cater_Name":response.save['Cater_Name'],
    $ M7 s  G1 s+ q% m7 D
  189.                    "Book_author":response.save['Book_author'],
    0 g  S) Y: y( Q$ [) W9 m
  190.                    "Book_Introduction":response.save['Book_Introduction'],
    7 g1 F" ?5 z$ [! {4 B$ \7 g
  191.                    "Book_Synopsis":response.save['Book_Synopsis'],& Y6 Q, S6 C, N( }& r
  192.                    "Book_Palabras":response.save['Book_Palabras'],2 ^' @8 b. C# z, N# x
  193.                    "img":response.save['img'],
    - c. R0 A+ Z0 I9 @! C: f
  194.                      }
    * ?( Z+ h, V- J2 k
  195.         for each in response.doc('.chapter-list li:first-child a[href^="http"]').items():
    9 b* ^7 F, t( n! D+ B: j
  196. #        for each in response.doc('.chapter-list  a[href^="http"]').items():    U7 {$ O% d1 E7 r6 k
  197.                     self.crawl(each.attr.href, callback=self.detail_page,save=Datos)
    + u5 i' O1 W* q3 o* b) c
  198.     @config(priority=2)' _2 [5 c4 H" v0 E: t" A
  199.     @catch_status_code_error  s2 ~  ]8 J5 p, B; @
  200.     def detail_page(self, response):        
    # y4 {8 C0 n$ g6 _$ ]" T( }
  201.         NewRe1 = u'哈书'. l! Y1 u8 C; q
  202.         NewRe2 = u'huhjsd.CC'
    / j2 S( z# x7 v$ T
  203.         NewRe3 = r'^\\n\\n'  F" `; h. m+ T: l/ j  b
  204.         NewRe5 = u'小说网': f% _) B# i. [( g' o$ A
  205.         NewRe6 = u'fgdfgf') M7 F" K" b+ H) u! h3 T) A5 L/ S
  206.         NewRe7 = u'fgfgf'
    # l/ Z) ]/ x: x
  207.         NewRe8 = u'ffhgf'3 R$ A+ ]8 C7 h0 U
  208.         NewRe4 = r'[\f\t\v+\.\{\(\)\}\!\/_,$%^*(+"\')]+|[+——()?【】“”!,。?、~@#¥%……&*()]+'& q9 y( U$ _1 r4 s1 R2 e
  209.         ReC1 = u'静思'4 C5 K& K0 p6 s1 K" B9 W
  210.         ReC2 = u'aghgf.com'# M3 s+ ^6 C4 K* p1 p/ t: d
  211.         ReC3 = u'aghgfh.com'
    : g$ w% C) k- i/ K# I, B+ K7 ^
  212.         ReC4 = u''" s7 n" C% D6 I8 \3 C+ C1 c3 `
  213.         ReC5 = u'文学网'
    # Y8 Y9 H3 l6 y4 }$ \
  214.         ReC6 = r'<BR>'
    3 D1 _6 I" C, D& c! A
  215.         Bookname = response.doc('.readlocation a').eq(2).text()   #小说名称
    : @: l# I% Y* `! d: y' S1 W! j8 y+ l4 g
  216.         print Bookname
    2 S: b% H- _/ d. c' T7 o& L
  217.         Cater_Name = response.save['Cater_Name']   # 小说分类
    % _8 [* O0 e' j6 @8 W: X8 x7 z
  218.         Book_author = response.save['Book_author']   #小说作者
    * \  ]; |# j( [" ?
  219.         Book_Introduction1 = response.save['Book_Introduction']   #小说简介
    * c, E. E# g, J7 K
  220.         Book_Synopsis = response.save['Book_Synopsis']   #最近更新/ L' h; \  q! M9 a% T+ L
  221.         Book_Palabras = response.save['Book_Palabras']   #小说字数: Z% q2 k% `' ^: ]5 X5 [! T
  222.         Bookurl = response.url   #小说网址: ?9 n" ~8 C# `  x  D5 S
  223.         Booktitle = response.doc('.article-title').text()   #章节名称
    / P' a# W. v5 V% O& f" m# o' |! A
  224.         BookID = response.doc('.readset-r span').text()   #小说ID) @$ k1 t4 z$ D$ h. c0 R( ]
  225.         BookConte1 = response.doc('.article-con').text()   #小说章节内容
    5 P' k: n- O3 f4 i( |% r
  226.         abover = response.doc('.article-title').text() + response.save['Book_Synopsis'] + response.save['Book_Palabras'] + response.save['Book_Introduction']   #小说状态(连载还是完成)
    + j- B# t* D4 _, O% x- E
  227.         Book_Date = str(datetime.datetime.now())    # 采集时间1 T2 [3 g! d9 J& F; \6 w3 K4 \0 E
  228.         BookConte2 = BookConte1.replace(NewRe1 , ReC1)9 h5 o, C8 v2 E, b* ~2 t. V
  229.         BookConte3 = BookConte2.replace(NewRe2 , ReC2)/ I4 G2 w# j) W) K0 N" V$ _
  230.         BookConte5 = BookConte3.replace(NewRe5 , ReC5)
    : @6 e" m# b. z' k% N- x1 Q
  231.         BookConte6 = BookConte5.replace(NewRe6 , ReC2)/ J0 B% w) d; j/ {5 T, ^4 G- _( W2 F
  232.         BookConte7 = BookConte6.replace(NewRe7 , ReC2): ^/ V, `. `- J8 s/ N
  233.         BookConte8 = BookConte7.replace(NewRe3 , ReC6)
    ; J8 y9 Y! e4 ~  x( n
  234.         BookConte4 = re.sub(NewRe4 , ReC4 , BookConte8)$ c! D5 @' j& k
  235.         BookConte = BookConte4.replace("\n\n","<br>")! k& s& @6 U4 C8 X
  236.         print BookConte5 N, p; o& X1 X3 [: g/ A
  237.         Book_Introduction2 = Book_Introduction1.replace(NewRe1 , ReC1)% O, \+ t& C/ l9 \) P- I8 Z
  238.         Book_Introduction3 = Book_Introduction2.replace(NewRe2 , ReC2)  A; e8 L6 J. [- h7 a+ }4 @* H
  239.         Book_Introduction4 = Book_Introduction3.replace(NewRe3 , ReC3)
    % g- z* U, H, d9 ?
  240.         Book_Introduction = re.sub(NewRe4 , ReC4 , Book_Introduction4)
    - d; Q6 A- U' V
  241.         Titleid = response.url.split(BookID + "/")[-1].split("/")[0]     . d! w' P7 O: {. a# x' Z. N- K1 U
  242.         Book_img = response.save['img'],  #小说图片6 B7 T% {& [" V
  243.              9 z$ z& q4 I2 S. H$ A! ?9 Z! P
  244.         #insert into MySQL 小说入库
    0 B, X! r* U1 B' b
  245.         self.add_question(Bookname,Cater_Name,Book_author,Book_Introduction,Book_Synopsis,Book_Palabras,Bookurl,Booktitle,BookID,BookConte,Titleid,abover,Book_Date)   #这行可注译,数据库发布接口,方便其他系统的发布: E( p) x/ e+ E$ v. P; h2 H3 D
  246.         self.add_comment(Bookname, Booktitle, BookID, Titleid, Book_Date)   #这行可注译,数据库发布接口,方便其他系统的发布+ y$ K  F' u$ B- V. d" A
  247.         #post提交发布
    3 x7 v5 r; C1 k& ], n: M, W6 w. g
  248.         self.add_locoy(Bookname,Cater_Name,Book_author,Book_Introduction,Book_Palabras,Book_img,Booktitle,BookConte,abover)  #这行可注译,火车头发布接口,不需要可取消
    ' k: m# |8 k: F. x( T. \
  249.         Datos = {
    ) B2 [4 ?+ t$ P6 H" F- r, T3 a) a) I
  250.                   "Cater_Name":response.save['Cater_Name'],( \4 Z1 S* D. F6 j2 @) l
  251.                    "Book_author":response.save['Book_author'],
    7 v( B: \5 z0 M0 ]4 K! i
  252.                    "Book_Introduction":response.save['Book_Introduction'],
    , N' W& w" O4 F
  253.                    "Book_Synopsis":response.save['Book_Synopsis'],. g8 E  G/ h. [* x( ?
  254.                    "Book_Palabras":response.save['Book_Palabras'],; r7 F" \9 V$ |1 ^2 _
  255.                    "img":response.save['img'],
    , G6 e- H6 T" x( t7 T3 w4 k
  256.                      }
    ) @' p. p6 T+ O0 ?  j9 X6 h( E
  257.         for each in response.doc('.articlebtn > a:nth-child(4)[href*="/xiaoshuo"]').items():
      w+ i' i! \$ l0 f- n$ i* W
  258.             self.crawl(each.attr.href, callback=self.detail_page,save=Datos)
    6 T) s! g& A& D5 f, T9 C! r2 l* O$ n4 |
  259.         return {
      b# u* ?8 G8 p# I% ?( i$ j
  260.             "Cater_Name":Cater_Name,; p' p6 T" L% ]- |
  261.             "Bookname":Bookname,
    % C# w/ i* L' o; n
  262.             "Book_author":Book_author,
    7 u: Y9 Z; g* s, Q) b+ y% @
  263.             "Book_Introduction":Book_Introduction," c$ A! N& t8 l  G7 m( @3 s
  264.             "Book_Synopsis":Book_Synopsis,: ~7 w' ~* x2 D
  265.             "Book_Palabras":Book_Palabras,# ]2 V" S0 S, E* k1 s
  266.             "Book_img":Book_img,
    $ x0 N, J/ b( q  Q, X3 w9 p: R6 l
  267.             "Bookurl": response.url,
    1 ]5 x% ?3 V: Y. c) U* y5 m
  268.             "Booktitle": Booktitle,2 O2 D& Y0 ?4 ^
  269.             "BookID": BookID,
    7 l' }+ h3 g( q  d+ z+ }; K/ G
  270.             "BookConte": BookConte,
    * k- l$ i" `7 y, u" j% r7 M
  271.             "Titleid": Titleid,9 g: D5 [6 y3 o% V9 A/ Y- S
  272.             "abover":abover,. a: M5 s5 l* V! p) u0 e
  273. #            "Book_Date" = str(datetime.datetime.now()),$ _9 C- I, c& i# H2 w
  274.         }
    - Q1 z0 c3 y5 E: {2 z/ ?8 [
  275.     def download(self, P_dir, imgDir, file_name, Book_img):0 T& b% q' P. Z# N, b5 {- V
  276.         if not os.path.exists(imgDir): & K* @' M# J: ^2 C
  277.             os.makedirs(imgDir)
    ; l# U, p: ~' c2 Y7 I
  278.         file = imgDir + "/" + file_name, Q7 ^" ]" D3 \8 C# {
  279. #        print file
    - x0 H+ t* [6 m: m; j
  280.         f = open(file, 'wb+')( K2 p  @3 e( T9 n
  281.         imag = requests.get(Book_img) ( `( Z) W1 }  z" S
  282.         f.write(imag.content)+ A' d  y7 y2 _' b, N
  283.         f.close()
    ; y. M6 W; h, f3 A
  284.         #保存图片前
    & X+ F3 W4 E; F, B6 w
  285.     def save_imgs(self,response):0 `% A3 W# [1 P, N0 ~
  286.         content = response.content: n$ o+ K5 i5 E5 ?/ u; B
  287.         file_name = response.save["file_name"]% t" |0 W; b' i; C8 l; S
  288.         imgDir = response.save["imgDir"]
    5 \# Q0 s4 L, t, c/ B
  289.         file_path = imgDir + file_name3 l9 q: o" {. s4 n3 r% c5 }
  290.         self.save_img(content,imgDir,file_path)6 W1 L9 A% v+ P2 a, D: m+ m
  291.     #保存图片
    " z- o* b! M# O7 f8 K
  292.     def save_img(self,content,imgDir,path):, w, S/ ^2 z3 {/ t
  293.         if not os.path.exists(imgDir):                        
    4 r5 E  i0 m" V
  294.             os.makedirs(imgDir)% o; i( q, g6 k# h$ x% G
  295.         f = open(path,"wb" )2 c4 J1 O+ p5 P  Y0 l- j; E
  296.         f.write(content)
    2 g( u. _4 F1 z- {7 `3 k
  297.         f.close()( {  ~: q% W; F6 V  j
  298.     #获取url后缀名: x/ n4 p0 F5 H1 x6 n+ @( l! X2 x
  299.     def getExtension(self,url):                           
    " C( h( l4 E- T& K  ?9 T2 }; x
  300.         extension = url.split(".")[-1], L& Y  y* S5 L; k7 ~' P
  301.         return extension 3 V& }  k% w, g
  302.    
    % d2 E$ [. ?7 x( P. L
  303.     #获取图片名
    7 n! f9 E. K! w1 w( R/ U5 \' B
  304.     def getname(self,url):
    1 [# z$ {, J0 r0 Y
  305.         name=url.split("/")[-1].split(".")[0]
    ) F7 N  P) T) ]( k1 T
  306.         return name
复制代码
, }; _; l$ S' g& c6 N2 G; P
$ @5 j$ u4 ~8 S# Z: Y6 ~% ~5 x) h2 O
您需要登录后才可以回帖 登录 | 注册

本版积分规则

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

GMT+8, 2025-11-5 15:04

Powered by Discuz! X3.5

© 2001-2025 Discuz! Team.

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