找回密码
 注册

QQ登录

只需一步,快速开始

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

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

[复制链接]
发表于 2019-6-8 23:06:07 | 显示全部楼层 |阅读模式
Python + pyspider某小说站的爬虫,入数据库,火车头发布,资源下载到本地,另可写爬虫!
( Y0 O7 M/ c7 h) q; u+ z
  1. #!/usr/bin/env python$ \9 _* F2 ?5 [$ l; i3 s% w! ]. O
  2. # -*- encoding: utf-8 -*-* i. i) H8 y- |% }; p' s1 X5 v
  3. # Created on 2019-05-05 21:43:11
    1 k1 ^. H6 x7 e7 X% Z+ X
  4. # Project: XiaoShuo
    % L, {; f; I3 O3 X1 N1 x6 g7 X

  5. * b8 e: z# v* R+ v7 W
  6. from pyspider.libs.base_handler import *+ V. \; g. V4 e7 l$ t0 L
  7. import pymysql
    5 A; p# P7 b' h* {+ K! V0 E% S
  8. import random
    7 ~% i& x5 F1 R
  9. import datetime
    ( I9 k. o" i7 j
  10. import urllib2,HTMLParser,re& A, [+ P) K3 K- p  O
  11. import os  v) B. m, P; J: z$ K
  12. import sys% y6 r- K: S  f4 b
  13. import re9 ^6 N4 I3 @" d/ s* o/ p
  14. import codecs
    0 z7 f5 V, l, v+ @/ _, q. f
  15. import requests
    - l& x$ P/ M4 E3 C: o+ W4 c
  16. import json+ e- X# p$ H9 S  H9 _

  17. ( V/ B; o+ S5 I; u. h
  18. class Handler(BaseHandler):/ N& }6 m1 q1 L6 P) i
  19.     global Datos
    % \6 G& j' L; `
  20.     global P_dir    $ w# m8 M# }" @8 ?! u
  21.     P_dir = '/Tools/Debug/'  #采集时候图片保持到本地的路径
    ! Q9 F- `# L) U3 U- L% c* H( M* J
  22.     global Datos. C  l* t0 C* F% D7 V# M; G
  23.     Datos = {}
    / M+ }0 I6 `* G9 a
  24.     headers= {$ T, k2 `$ `) K' m
  25.     'Accept':'text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,*/*;q=0.8',: l( e3 O! e( J8 |
  26.     'Accept-Encoding':'gzip, deflate, sdch',* `, E* r4 y# b4 y! x1 K% ~
  27.     'Accept-Language':'zh-CN,zh;q=0.8'," S, J" `7 G; [7 X! \- @4 ^
  28.     'Cache-Control':'max-age=0',  R" [& H) ?$ D0 W+ z
  29.     'Connection':'keep-alive',9 c/ q& x' v8 A6 M% f
  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'* d% B( v7 {7 ?% M
  31.     }
    . \4 K. z, v. K2 S! f4 Y
  32.     crawl_config = {
    # s; b+ F/ t0 n
  33.         'headers' : headers,0 O$ G# k3 _( E( K( I7 y
  34.         'timeout' : 300
    - ^' F' w% X% n( m/ t; s* }5 Q
  35.     }; R3 x& g6 |! V
  36.     def add_BookFile(self,Bookname, BookIDs, img, Locaimg, Book_Dates):3 A1 M( z8 C8 e& l5 D" j) u
  37.         db = pymysql.connect(host="localhost",user="数据库用户名",password="密码",db="数据库名",charset="utf8")
    7 ^& E  p# O& E+ q2 V
  38.         try:2 ?6 h8 v/ |1 Z
  39.             cursor = db.cursor()8 H4 m; }/ L  P( T& W8 Z; ?! y9 t
  40.             #注意此处字符串的占位符要加双引号"%s"3 d' R1 X2 l" w' N* I7 X* X
  41.             sql = 'insert into BookFile(Bookname, BookID, img, Locaimg, Book_Date) values ("%s","%s","%s","%s","%s")' % (Bookname, BookIDs, img, Locaimg, Book_Dates);! |$ e+ R0 Z+ W& z7 x" f1 W
  42. #            print(sql)
    5 a( Y$ q' N2 |1 j/ |& d  {
  43.             cursor.execute(sql)5 O4 i  i1 [2 q+ S: T, w1 H
  44.             $ m2 N' {0 ?5 ~. d8 N3 }& f5 T
  45.             #qid = cursor.lastrowid. x3 }2 c0 H) l) d6 C
  46.             #print(qid)
    / f' e# r8 x/ q3 k9 ?& r4 k/ Y
  47.             % V0 m. f1 s3 X6 e" E
  48.             db.commit()7 `$ A- Y9 P' U; D
  49.         except Exception as err:, `) B" s3 O' C6 V( w/ o
  50.             print("Error %s for execute sql: %s" % (err, sql))
    0 i8 _9 R* o/ |. n3 U1 b8 s: B
  51.             db.rollback()' Y3 x- {# G8 `) u
  52.     def add_comment(self,Bookname, Booktitle, BookID, Titleid, Book_Date):
    $ W0 ^$ v: d( m$ S! w. c% s
  53.         db = pymysql.connect(host="localhost",user="数据库用户名",password="密码",db="数据库名",charset="utf8")
    " @" ?8 F3 T* y+ f3 V
  54.         try:( J) k& ^" Q  v  E/ a  M  K0 A
  55.             cursor = db.cursor()
    % X7 s. W0 M/ R: P! q2 R
  56.             #注意此处字符串的占位符要加双引号"%s"
    : X5 n  @5 H6 N5 Q3 S' h
  57.             sql = 'insert into BookTitle(Bookname, Booktitle, BookID, Titleid, Book_Date) values ("%s","%s","%s","%s","%s")' % (Bookname, Booktitle, BookID, Titleid, Book_Date);
    : l1 s* }% j5 O4 l9 `( `4 I
  58. #            print(sql)! r5 Z7 Z/ G% e, i/ u) ?
  59.             cursor.execute(sql)
    5 o' X3 A/ X  F3 i. r
  60.             
    & G3 Z* K# ~4 g( b( Q; o
  61.             #qid = cursor.lastrowid6 }  R9 ~9 v- i$ K
  62.             #print(qid)' E2 M3 J) ?& Y$ o
  63.             
    + B$ ~2 k; q# v. Z4 w
  64.             db.commit()
    ! Z3 o' U% z( }6 X4 S! P, W* n
  65.         except Exception as err:" C) i# B/ n0 j4 _; d) c
  66.             print("Error %s for execute sql: %s" % (err, sql))
    - s7 s1 q9 t* M9 u9 y
  67.             db.rollback()
    9 u$ \3 Q3 n, C/ P
  68.     def add_question(self,Bookname,Cater_Name,Book_author,Book_Introduction,Book_Synopsis,Book_Palabras,Bookurl,Booktitle,BookID,BookConte,Titleid,abover,Book_Date):! s8 ?" j5 W* K4 Z1 B
  69.         db = pymysql.connect(host="localhost",user="数据库用户名",password="密码",db="数据库名",charset="utf8")# w$ z9 x2 _7 {
  70.         try:0 `/ v( `: T; O6 [) D( M" `
  71.             cursor = db.cursor(): L& g3 `: C+ ^9 ^
  72.             #注意此处字符串的占位符要加双引号"%s"7 L+ c0 y, R" l3 h
  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);
    7 y* `7 Y: c( x
  74.             print(sql)9 B) L9 _- U8 A2 ]
  75.             cursor.execute(sql)
    6 J  {; O! F9 Q) m% j" P
  76.             print(cursor.lastrowid)9 y  Q4 c$ w/ K/ {+ N! T# ]$ R4 {9 h
  77.             db.commit()# x  a9 Z$ T# O) B) f/ B
  78.         except Exception as err:
    1 `0 d7 X# ?1 N3 P7 j. S
  79. #        except:3 @. C0 [* s, S( h
  80. #            print('Failed')5 R. S: u" M1 w) H% S, q
  81.             print("Error %s for execute sql: %s" % (err, sql))* v) Q/ m3 a# _4 e+ h  x1 Q+ |
  82.             db.rollback()
    * a1 t6 v( H5 R' [# ?9 H
  83.         7 H+ _. X# S* u- R
  84.     def add_locoy(self,Bookname,Cater_Name,Book_author,Book_Introduction,Book_Palabras,Book_img,Booktitle,BookConte,abover): 4 O; R2 x- J& f, w* V9 r" x5 V5 I
  85.             reload(sys)
    # p) |6 a6 @4 K! E9 H
  86.             sys.setdefaultencoding("gbk")$ N8 T+ e6 ?$ e$ d
  87.             locoy_url = 'http://www.******.net/locoy/?my=book'  #697火车头发接口地址
    / ^) a2 Y  R6 n$ O! d
  88.             locoy_data = {- P1 B: \( R% ^/ J
  89.             'my_u':'用户名',   #后台用户名
    $ ~. |4 W6 f7 e  M  X! d
  90.             'my_p':'密码',   #后台密码* }+ \5 ~8 s4 O* B* g# `+ b. k6 d
  91.             'subject_669977_net':Bookname.encode('gbk', 'ignore'),
    9 S( u, S# X& c! A( A; ]
  92.             'caid':Cater_Name.encode('gbk', 'ignore'),' ^7 R+ E# |- y  F) o2 F: Y/ g
  93.             'title_669977_net':Booktitle.encode('gbk', 'ignore'),6 L# P$ n0 z; E
  94.             'article':BookConte.encode('gbk', 'ignore'),& t  G6 f& O. a! `6 W+ T# Q8 |: V+ ]
  95.             'author':Book_author.encode('gbk', 'ignore'),
    - ?- W( ?0 @# F: G
  96.             'ready_1':Book_Palabras.encode('gbk', 'ignore'),
    7 z* I+ b6 S9 T* n
  97.             'thumb':Book_img,, ~9 ?, U0 y5 R) V' G
  98.             'content':Book_Introduction.encode('gbk', 'ignore'),: B' C4 N! L, G
  99.             'abover':abover.encode('gbk', 'ignore')           
    - Z. N+ D2 H9 t  z7 t
  100.                 }$ n8 e' Q0 k9 ?4 D
  101.             res = requests.post(locoy_url, data=locoy_data)$ A1 _( _7 t% M' o7 V3 `
  102.             print res.text3 j9 i% x8 z; g; M; L& C& Y
  103.             print res.content
    - Y  B& ~# @3 T. X( v9 [
  104. #            print Dsd6 h2 Z1 O4 m( J. T2 \4 |
  105.             return res# ]5 @  V7 E, H! ^% A* N4 j
  106.    
    ( ]; L# W% I9 A$ \# [4 N( h
  107.     def __init__(self):
    # N- `; V0 g9 I) s( p9 l
  108.         self.base_url1 = 'https://www.****.cc/'
    . M- n5 c1 I  @: G: U
  109.         self.base_url2 = '/', ?9 R( e+ t  i3 e
  110.         self.CaterId = []/ x' V* E# M# I, |, s# B
  111.         self.CaterIds = ['xuanhuan', 'wuxia', 'yanqing', 'lishi', 'kehuan', 'kongbu', 'nvsheng']1 t& D$ P6 c0 p: f$ z4 n
  112.         self.page_num = 1
    ! l# H8 q: z  d& W7 a+ K
  113.         self.total_num = 200   & }4 c9 W# Z$ w* R" x4 o, i
  114. & W6 L" {% X9 t) l; x' {% V
  115.     @every(minutes=8 * 60)
    " e/ _- U; X- }/ m
  116.     def on_start(self):
    " u; t% k7 h" W  B- G; f8 A
  117.         global Cater_Name
    % w; z# [4 R0 W" L( o
  118.         Cater_Name = []( E, ?8 y0 d0 [. x4 }
  119.         while self.page_num <= self.total_num: # T( S1 b0 x1 ~
  120.             for self.CaterId in self.CaterIds:
    , \" s4 v; j2 \5 E2 R
  121.                 if self.CaterId  == 'xuanhuan':
    . Z9 U- w+ z+ h5 D2 h
  122.                      Cater_Name = '玄幻'* ]4 \' i7 z/ J6 b5 `
  123.                 if self.CaterId  == 'wuxia':% P& J% P9 X* M' D+ u" |6 ]  b+ ?5 V
  124.                     Cater_Name = '武侠'. d+ T- Z. d2 H% P( h
  125.                 if self.CaterId  == 'lishi':
    5 A8 g0 J& p9 A" Q* n# C. p
  126.                     Cater_Name = '历史'            
    1 v7 P9 O7 a/ V0 S- w* d
  127.                 if self.CaterId  == 'yanqing':1 ~0 [1 V6 D  n
  128.                     Cater_Name = '都市'
    6 u1 @1 m% E9 Y+ S# S9 ~
  129.                 if self.CaterId  == 'nvsheng':
    $ m, O6 b- `$ u! k/ z, P0 Q" m9 O
  130.                     Cater_Name = '都市' # z! ^  T! N5 E# P
  131.                 if self.CaterId  == 'kehuan':0 }4 R; N. ~$ X( r$ B/ r
  132.                     Cater_Name = '科幻'
    # @) Q2 U) D* c% U. ^
  133.                 if self.CaterId  == 'kongbu':/ v5 ]0 k0 n# ^0 Q; U
  134.                     Cater_Name = '游戏'
    1 F$ v, q2 }2 b( f5 \/ \
  135.                 print self.CaterId, o, i2 R( g9 r! \( O- r+ K
  136.                 url = self.base_url1 + str(self.CaterId) + self.base_url2 + str(self.page_num) + "/"          $ F, b2 X! H: c
  137.                 self.crawl(url, callback=self.list_Caterg,save=Cater_Name)! X, R/ x" r# E) N9 z
  138.             self.page_num += 1
    . u+ v* w1 ~0 t5 Y+ y8 ~
  139.             8 F, h; x5 q& e. J% l. N
  140.     def list_Caterg(self, response):
    7 h1 `: v' C. l( o) A4 f$ j: j
  141.         Cater_Name = response.save
    2 m0 H/ c( I! z* I2 T
  142.         for each in response.doc('.pic-list a[href^="http"]').items():( s1 V7 v5 M7 Q% k
  143.             self.crawl(each.attr.href, callback=self.list_Caterg_detail,save=Cater_Name)/ ~7 C: o4 B( i2 h2 P
  144.             
    ! C9 g& t7 ]" C3 s- ~
  145.     def list_Caterg_detail(self, response):. l$ M5 r1 m4 p
  146.         Cater_Name = response.save3 T/ L; X- v0 }) }' F$ s
  147. #        print Cater_Name
    9 w; F% M. _* J8 O
  148.         Bookname = response.doc('h1').text()
    $ z" k; [6 F/ q
  149.         print Bookname
    ! a( h  H% g6 M5 y" p
  150.         Book_author = response.doc('.authorname > a').text()
    - x; R9 w( ^3 r; j9 S
  151. #        print Book_author3 q1 E9 i/ f' V- V* w9 \0 B
  152.         Book_Introduction = response.doc('.book-intro > div').text()
    . I) t# a6 p) |2 `1 |( b6 W
  153. #        print Book_Introduction
    4 n  G& I; {/ g
  154.         Book_Synopsis = response.doc('b').eq(1).text()
    - B4 L3 _. T" I# y0 B
  155. #        print Book_Synopsis
    0 E6 \" V: X5 |- _$ w0 ~
  156.         Book_Palabras = response.doc('.booktitle p').text().split(' ')[1].split('|')[0]
      b2 V3 S# O  }! \
  157. #        print Book_Palabras6 @+ E1 `( Z9 j" n4 \, a% w
  158.         BookIDs = response.url.split("xiaoshuo/")[-1].split("/")[0]   #小说ID# b" R- l) W9 a  j$ g- \7 s
  159. #        print BookIDs6 A1 S1 a; C  @; I
  160.         Book_Dates = str(datetime.datetime.now())         8 ^8 V  B) s: D9 ^% N  V
  161.         for imgs in response.doc('.bigpic > img[src^="http"]').items():# J+ K0 G8 o( {2 M: q2 f+ o
  162.             img = imgs.attr.src
    ! k4 p: B. s# v/ b$ `$ J
  163.             print img9 R1 F% ~9 Q0 ], t
  164.                 #小说封面下载! P3 U9 Q- z4 ~# m/ o
  165.             extension = self.getExtension(img)
    1 j7 O! e% R2 o( c3 v0 d3 ?$ X
  166.             name = self.getname(img)' A+ P6 P/ \; @) d5 W) P8 |
  167.             file_name = name + "." + extension& b$ D- X5 q3 Q: E, M0 t1 \3 N
  168.             imgDir = P_dir + name7 e: k8 [. F# P
  169.             Locaimg = imgDir + "/" + file_name' d  B3 D7 H8 m+ q
  170.             print Locaimg% K3 D, @: T: z
  171.             if(self.download(P_dir, imgDir, file_name, img)):   #这2行可注译,图片下载到本地' x0 Q6 X/ s2 J0 ^9 x! a
  172.                 print('attachment url is ' + img)               #& D, J, |  b% o6 i! s2 M+ p  k4 H
  173.             Datos = {7 i! J  D# X( z1 ]9 }
  174.                     "Cater_Name":Cater_Name,7 e/ J; Y, i9 Q: A
  175.                     "Book_author":Book_author,( d5 r8 r7 O: e1 L5 l0 k  D' t
  176.                     "Book_Introduction":Book_Introduction,
    9 ^5 j  i- s% R/ R! t) d4 D8 U
  177.                     "Book_Synopsis":Book_Synopsis,( D6 k  V0 V$ r0 m# o( R
  178.                     "Book_Palabras":Book_Palabras,
    " q" z1 k; l/ z8 S. _
  179.                     "img":img,
    8 ]7 ~. l! M0 w; S; o3 j& i  @
  180.                 }
    9 I4 c  m: e6 |# k8 E2 C
  181.             self.add_BookFile(Bookname, BookIDs, img, Locaimg, Book_Dates)  #这行可注译,数据库发布接口,方便其他系统的发布1 ]- M2 G( G, n) @7 m0 z# v+ _
  182.         for each in response.doc('div[class="bookbtn-txt"]  a[class="catalogbtn"]').items():  G+ ~, H# N7 ^( {" a, w
  183.             self.crawl(each.attr.href, callback=self.index_page,save=Datos): i6 ^# D% C$ \4 A3 ?
  184.             
    % Z/ F8 ^% o3 r3 m
  185.     @config(age=8 * 60 * 60)   
    * _; \1 U; T+ k1 M5 W) M+ F
  186.     def index_page(self, response):
    * x/ e  T. n/ X5 f; {
  187.         Datos = {
    ( X; L+ T; [5 z& x$ O+ k
  188.                   "Cater_Name":response.save['Cater_Name'],
      _  |3 J3 @' j: p
  189.                    "Book_author":response.save['Book_author'],
    ) ]; G* N* l) A& A, b$ @+ {7 d
  190.                    "Book_Introduction":response.save['Book_Introduction']," ~, U9 B# f. u: P$ o6 d' q/ l  E
  191.                    "Book_Synopsis":response.save['Book_Synopsis'],- K! p  Y) j, {5 y7 |4 |$ k# o+ n
  192.                    "Book_Palabras":response.save['Book_Palabras'],
    $ R8 s" x8 m, G2 Q
  193.                    "img":response.save['img'],
    9 Z" x% b# c% H+ l* |! @" |: s1 y
  194.                      }0 a8 l# b4 S, b) r
  195.         for each in response.doc('.chapter-list li:first-child a[href^="http"]').items():
    : M# a, q0 V5 v1 M
  196. #        for each in response.doc('.chapter-list  a[href^="http"]').items():  4 {& F3 ?4 c0 W$ f9 b% r
  197.                     self.crawl(each.attr.href, callback=self.detail_page,save=Datos): S$ b1 D0 F# F- y* v
  198.     @config(priority=2)
    . n( ~/ U+ R0 s3 K$ k+ X( U
  199.     @catch_status_code_error' D, ?( X7 R3 A0 A+ n. ]
  200.     def detail_page(self, response):        6 w8 e" o" \( A/ o' N
  201.         NewRe1 = u'哈书'" P/ L7 ?1 k, _" v4 o
  202.         NewRe2 = u'huhjsd.CC'/ Q# T! Y- x5 t0 B3 G" U
  203.         NewRe3 = r'^\\n\\n'! c, t4 {- c# C  z8 x7 L) M0 J) J% P
  204.         NewRe5 = u'小说网'' ~% ]2 g7 k, `2 h' \2 t; W
  205.         NewRe6 = u'fgdfgf'
    , _; [' O9 u( @
  206.         NewRe7 = u'fgfgf'
    + q! P/ P+ W7 Q. w
  207.         NewRe8 = u'ffhgf'9 O7 _0 ]$ {: C) }/ ]* j" O
  208.         NewRe4 = r'[\f\t\v+\.\{\(\)\}\!\/_,$%^*(+"\')]+|[+——()?【】“”!,。?、~@#¥%……&*()]+'# n! t' }8 V' V; c$ R
  209.         ReC1 = u'静思'
    & h2 {: r* O# N. N  P
  210.         ReC2 = u'aghgf.com'
    ! H# P  x) U# i$ ^1 d  m8 J0 Z
  211.         ReC3 = u'aghgfh.com'( y8 Y& c. B& w/ R! V/ `
  212.         ReC4 = u''
    3 A  D- x9 v. \' ]2 C: l2 i( ]0 A$ g
  213.         ReC5 = u'文学网'( o9 ~7 A5 v, x+ C0 Q
  214.         ReC6 = r'<BR>'9 \) L5 K: P' M5 b' w) [" w) Y
  215.         Bookname = response.doc('.readlocation a').eq(2).text()   #小说名称" Q9 Z) _1 ~9 \
  216.         print Bookname
    5 [1 x. h1 ?' D1 j- f/ |+ P
  217.         Cater_Name = response.save['Cater_Name']   # 小说分类
    2 W* S: L6 o" Z
  218.         Book_author = response.save['Book_author']   #小说作者8 S# z& B- h: Z/ k5 o
  219.         Book_Introduction1 = response.save['Book_Introduction']   #小说简介: |) o! I: T+ y& I: Q7 K- M! y, m
  220.         Book_Synopsis = response.save['Book_Synopsis']   #最近更新
    2 Q- f. i; ^7 ^6 n
  221.         Book_Palabras = response.save['Book_Palabras']   #小说字数, \0 r! B4 q* ^. }
  222.         Bookurl = response.url   #小说网址# `: G0 o- L* F
  223.         Booktitle = response.doc('.article-title').text()   #章节名称0 C/ |( x1 P& r. u# ?& O
  224.         BookID = response.doc('.readset-r span').text()   #小说ID
    , L3 K1 `+ j0 c6 A7 j7 O; G3 d
  225.         BookConte1 = response.doc('.article-con').text()   #小说章节内容" q9 T$ F! o" Z6 ]. V
  226.         abover = response.doc('.article-title').text() + response.save['Book_Synopsis'] + response.save['Book_Palabras'] + response.save['Book_Introduction']   #小说状态(连载还是完成): x; V3 Q; T8 b
  227.         Book_Date = str(datetime.datetime.now())    # 采集时间
    / U. Z3 ?! E; v* x+ z# V
  228.         BookConte2 = BookConte1.replace(NewRe1 , ReC1)
    6 |) W6 w" g, S  b& a
  229.         BookConte3 = BookConte2.replace(NewRe2 , ReC2)" E! g* a$ k+ J: l! i
  230.         BookConte5 = BookConte3.replace(NewRe5 , ReC5)8 [; ^$ x4 z. _: _9 W8 S5 `
  231.         BookConte6 = BookConte5.replace(NewRe6 , ReC2)
    " Y0 l4 F, m5 P! N$ b- M
  232.         BookConte7 = BookConte6.replace(NewRe7 , ReC2)! O3 |  P+ e; D2 }7 L" `
  233.         BookConte8 = BookConte7.replace(NewRe3 , ReC6)
    ' o) T0 c6 H  q
  234.         BookConte4 = re.sub(NewRe4 , ReC4 , BookConte8)9 n$ i7 A+ c/ e. m" D! K6 |- T
  235.         BookConte = BookConte4.replace("\n\n","<br>")
    # E1 t  S. ]" F2 r+ M
  236.         print BookConte. z4 C: ?* g1 L% F$ r
  237.         Book_Introduction2 = Book_Introduction1.replace(NewRe1 , ReC1)$ ]3 H" _4 `' W; m% G  D
  238.         Book_Introduction3 = Book_Introduction2.replace(NewRe2 , ReC2)
    6 Q3 {9 L, S& d6 ~5 Z7 t) v
  239.         Book_Introduction4 = Book_Introduction3.replace(NewRe3 , ReC3)
    : D; v  f; T1 K" r
  240.         Book_Introduction = re.sub(NewRe4 , ReC4 , Book_Introduction4)
    5 |9 L3 U$ \2 i0 ]
  241.         Titleid = response.url.split(BookID + "/")[-1].split("/")[0]     ' {! i) ?" z- N$ P6 N2 L
  242.         Book_img = response.save['img'],  #小说图片
    + U9 ~4 w$ w, `& u
  243.              " ?: f! g8 e( r7 w2 [
  244.         #insert into MySQL 小说入库
    9 g0 ]4 `4 ]9 ]3 i( w8 q7 F7 s
  245.         self.add_question(Bookname,Cater_Name,Book_author,Book_Introduction,Book_Synopsis,Book_Palabras,Bookurl,Booktitle,BookID,BookConte,Titleid,abover,Book_Date)   #这行可注译,数据库发布接口,方便其他系统的发布
    ! V( \4 x' V6 k' N, j
  246.         self.add_comment(Bookname, Booktitle, BookID, Titleid, Book_Date)   #这行可注译,数据库发布接口,方便其他系统的发布8 d1 p$ z1 X* Q
  247.         #post提交发布
    . B1 O) _1 f& H  s+ L6 j
  248.         self.add_locoy(Bookname,Cater_Name,Book_author,Book_Introduction,Book_Palabras,Book_img,Booktitle,BookConte,abover)  #这行可注译,火车头发布接口,不需要可取消! b! M& B" N8 e- k; p
  249.         Datos = {
    , T7 `4 K) J  x  |* \; a
  250.                   "Cater_Name":response.save['Cater_Name'],
    $ T+ Z; v" o3 n2 c0 c5 ?/ h
  251.                    "Book_author":response.save['Book_author'],
      g# D" [  \! ]& g
  252.                    "Book_Introduction":response.save['Book_Introduction'],
    ; S& W1 F6 ^( o# z% m1 b. j
  253.                    "Book_Synopsis":response.save['Book_Synopsis'],! b7 |6 \$ O7 \
  254.                    "Book_Palabras":response.save['Book_Palabras'],$ e' Q8 L- [) U3 F* R
  255.                    "img":response.save['img'],; ?% ~! C+ u/ x( ^( b' H0 }1 Z
  256.                      }4 y2 d5 v8 W1 r
  257.         for each in response.doc('.articlebtn > a:nth-child(4)[href*="/xiaoshuo"]').items():9 |9 Z  q4 _; G: S0 F" F
  258.             self.crawl(each.attr.href, callback=self.detail_page,save=Datos) 3 s& j& W4 i( Y" U3 ~
  259.         return {3 {# P3 T' s$ v- A; j+ D
  260.             "Cater_Name":Cater_Name,6 q  v" L, H* ~% F6 {% x1 a- \# S. j
  261.             "Bookname":Bookname,
    9 X, G' Y0 D- \7 X1 l3 N& s
  262.             "Book_author":Book_author,% Z3 ]- O# R* o- a5 t* L! k, G
  263.             "Book_Introduction":Book_Introduction,9 y1 B0 w! a$ ~
  264.             "Book_Synopsis":Book_Synopsis,
    1 O% Z5 }" E9 m- q2 |
  265.             "Book_Palabras":Book_Palabras,
    # ~0 O7 Q: n7 M
  266.             "Book_img":Book_img,
      F- A" ?7 E2 ]3 y
  267.             "Bookurl": response.url,) V2 O, i. a% p6 S2 c
  268.             "Booktitle": Booktitle,: i) t% @. g: f/ g
  269.             "BookID": BookID,
    " f' @! f6 R% S9 q+ q9 {
  270.             "BookConte": BookConte,* I' c) p. q, Z  e/ J/ J3 @
  271.             "Titleid": Titleid,4 _; n) r( K' b1 n
  272.             "abover":abover,$ ?7 F4 x8 }2 ?  b* ~
  273. #            "Book_Date" = str(datetime.datetime.now()),
      r  Q. F: M0 I
  274.         }
    % X0 Q  z  I" h4 q
  275.     def download(self, P_dir, imgDir, file_name, Book_img):) l5 I( F  z  b. ]) q, {
  276.         if not os.path.exists(imgDir): - _" x. @5 M% l" U
  277.             os.makedirs(imgDir)% V9 K2 P" U! n: E6 J" {
  278.         file = imgDir + "/" + file_name. o4 d- R; P% A7 M3 p# a6 J! z, k" w
  279. #        print file
    - A6 Q9 L! q: U' U1 Z; C. j( k
  280.         f = open(file, 'wb+')* R6 C4 R- l( i7 D$ R  ~( ^
  281.         imag = requests.get(Book_img)
    0 G  _( i$ M2 `; W) X/ X  Q0 x' R
  282.         f.write(imag.content)3 {8 J7 Z9 g; l- j9 g
  283.         f.close()
    & N- g# ^* E* n3 R( T  ?
  284.         #保存图片前8 f7 w6 A; M3 e0 A- G. L" {0 d
  285.     def save_imgs(self,response):
    , j# m# T. R7 O; b+ R" K0 B
  286.         content = response.content
    / x1 e" @% n: C" H$ x( _
  287.         file_name = response.save["file_name"]
    # g) K% c# ^% M& j" e* q
  288.         imgDir = response.save["imgDir"]& I" a) a4 R2 S, q$ k
  289.         file_path = imgDir + file_name5 N$ ^  r$ {/ H" p: c! s
  290.         self.save_img(content,imgDir,file_path)7 c& e" S6 S1 K8 e% Z3 P
  291.     #保存图片, B+ `! _$ z3 W/ N/ S
  292.     def save_img(self,content,imgDir,path):
    ) N/ i: N+ [  Y6 o  @
  293.         if not os.path.exists(imgDir):                        
    ! ~: {( t- i1 H6 P) ?
  294.             os.makedirs(imgDir)
    + ]& I# e7 T/ n4 f9 K
  295.         f = open(path,"wb" )7 O0 P5 i4 h  @, S, K
  296.         f.write(content)
    + C, m3 f* b) A( x2 ~" z5 t) b
  297.         f.close()
    1 V" h0 u9 W7 T% ~0 `* j( S' ^
  298.     #获取url后缀名. ?1 ?! x6 |! R) E2 \2 c; ?
  299.     def getExtension(self,url):                            ! V4 @, I. W, B4 `+ L. l! ^
  300.         extension = url.split(".")[-1]
    , n* r( P% e1 t$ F, d2 u% ~
  301.         return extension
    / f2 A$ D* O! o- H  S
  302.    
    1 v# u  o  o3 r$ }$ K- W0 e, r" v
  303.     #获取图片名
    8 h8 ?- i. Y$ Q) G  Z: {
  304.     def getname(self,url):& E# U3 W1 p+ N' t
  305.         name=url.split("/")[-1].split(".")[0]
    / g2 b' v9 U0 H+ G2 ?9 y: I1 v$ P/ z. d2 l
  306.         return name
复制代码
9 S# H1 X. l2 u3 {$ n
. i! R8 [4 `9 K, Y
您需要登录后才可以回帖 登录 | 注册

本版积分规则

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

GMT+8, 2024-11-21 17:09

Powered by Discuz! X3.5

© 2001-2024 Discuz! Team.

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