找回密码
 注册

QQ登录

只需一步,快速开始

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

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

[复制链接]
发表于 2019-6-8 23:06:07 | 显示全部楼层 |阅读模式
Python + pyspider某小说站的爬虫,入数据库,火车头发布,资源下载到本地,另可写爬虫!
' n/ j% v+ ?6 ^8 d* M
  1. #!/usr/bin/env python; M( R! C6 L( ]# ?
  2. # -*- encoding: utf-8 -*-( j0 ]& _' H3 J8 c6 q& H
  3. # Created on 2019-05-05 21:43:114 \9 f4 E1 X5 c5 c& s( R1 R7 J
  4. # Project: XiaoShuo* v" p' I- J* ]9 R

  5. 0 L  d/ A* c6 S, N+ w; ]6 x# y
  6. from pyspider.libs.base_handler import *
    7 s- X, x1 |/ H3 X
  7. import pymysql+ ~8 [! G+ ]  d# h
  8. import random
    2 }/ q5 E6 G2 T) |$ |
  9. import datetime
    8 o- a; V$ q0 N8 r# S) u+ I- ^
  10. import urllib2,HTMLParser,re
    " A$ O" {- ~9 S
  11. import os
    8 O. z, U: E2 U) _5 R. U+ K% U
  12. import sys/ |' b! r9 y' D' J# u
  13. import re; y! F" y% C0 T6 c; N$ [
  14. import codecs
    ) X8 |: b1 K- g
  15. import requests3 d- h$ N' P' v& x4 i" f
  16. import json
    , X+ Z2 B! S/ M$ e$ Y9 W! G* r" \

  17. ) ^( r1 }# n& H+ e
  18. class Handler(BaseHandler):
    5 K3 C  s' S" F6 h. W
  19.     global Datos
    2 R" c8 M( F& Q& n  x4 @6 i* ~
  20.     global P_dir   
    # i$ V6 z" {( P5 X
  21.     P_dir = '/Tools/Debug/'  #采集时候图片保持到本地的路径
    9 h, u6 j9 o# ~
  22.     global Datos
    ' r2 {8 U4 ~# f! `" G, T
  23.     Datos = {}3 d' H3 M. M7 p; Y) S# |3 V
  24.     headers= {) a* `" H" d! g" j
  25.     'Accept':'text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,*/*;q=0.8',- S3 a# u- i* ]# I5 \
  26.     'Accept-Encoding':'gzip, deflate, sdch',% T# L" X0 g! @
  27.     'Accept-Language':'zh-CN,zh;q=0.8',
    3 @$ q* q6 j6 P/ E2 H4 a; d, X
  28.     'Cache-Control':'max-age=0',
    " Y% [, h: o5 ~3 l9 p* |1 K
  29.     'Connection':'keep-alive',' v8 l  _4 T2 Z1 u" N1 N5 q1 Z7 v0 q7 @
  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'; q/ A* {+ H# t; j/ U' q
  31.     }
    ) }/ I4 H( R6 J, E
  32.     crawl_config = {
    9 c5 z6 l. B: W
  33.         'headers' : headers,4 s6 V1 B& B: y4 S
  34.         'timeout' : 3005 X- o" `, s7 ?8 ^0 B" N. C
  35.     }
    & k1 B! p# I: |
  36.     def add_BookFile(self,Bookname, BookIDs, img, Locaimg, Book_Dates):
    / ?5 E3 H" {2 v/ [- L
  37.         db = pymysql.connect(host="localhost",user="数据库用户名",password="密码",db="数据库名",charset="utf8"). E. x6 ~: @( ~, O
  38.         try:
    0 c$ ]& @/ H, s/ b6 ]
  39.             cursor = db.cursor()
    + P* e, z% y% B0 t" P
  40.             #注意此处字符串的占位符要加双引号"%s"
    3 }- m: F7 ~3 W0 J0 l& D
  41.             sql = 'insert into BookFile(Bookname, BookID, img, Locaimg, Book_Date) values ("%s","%s","%s","%s","%s")' % (Bookname, BookIDs, img, Locaimg, Book_Dates);" }- Q- g$ t3 |
  42. #            print(sql)4 s( g4 R7 F# d5 y
  43.             cursor.execute(sql)
    6 o, O2 H7 |* h: C5 v7 x8 s
  44.             
    # V" u, E5 d) }: v7 P
  45.             #qid = cursor.lastrowid
    ( q7 q; @3 g3 o: }2 \5 O  `
  46.             #print(qid)
      L- H8 j0 X; J3 l. L- f5 ?) M
  47.             5 C9 e7 c; p$ I6 o
  48.             db.commit(). N% Q! E, p# M$ V; J9 r! F
  49.         except Exception as err:4 ^' g/ [/ R% \* i' f' H, x
  50.             print("Error %s for execute sql: %s" % (err, sql))/ I- b2 G% W2 k1 w
  51.             db.rollback()# r' m" C* N4 Y
  52.     def add_comment(self,Bookname, Booktitle, BookID, Titleid, Book_Date):% z$ B/ K2 y6 A8 B
  53.         db = pymysql.connect(host="localhost",user="数据库用户名",password="密码",db="数据库名",charset="utf8")# d8 _7 }! t  L% R
  54.         try:4 p2 _# M. H  Q9 Y$ k5 }
  55.             cursor = db.cursor()
    " X& ?" C" J4 o" h4 e4 J* G9 [
  56.             #注意此处字符串的占位符要加双引号"%s": J: |3 `3 d! K: l2 H
  57.             sql = 'insert into BookTitle(Bookname, Booktitle, BookID, Titleid, Book_Date) values ("%s","%s","%s","%s","%s")' % (Bookname, Booktitle, BookID, Titleid, Book_Date);
      ?, Q- R: n* Y* h' o
  58. #            print(sql)9 @. n- u6 U& f; J; A" B
  59.             cursor.execute(sql)1 u% d+ G/ K  I5 c1 a) `
  60.             
    ; B( z" z2 L$ _7 ^$ s; f
  61.             #qid = cursor.lastrowid! V  l/ ^# N; h
  62.             #print(qid)/ U6 W, B2 h/ y! [: l
  63.             
    ! j, x0 X) R. z+ a7 G+ t
  64.             db.commit()
    ' o+ F8 }# Z/ s5 X: G- y
  65.         except Exception as err:
    3 B9 {. R6 k' E
  66.             print("Error %s for execute sql: %s" % (err, sql))- K7 J* ~7 P" ]! ]8 }( P: I' g* @* r/ J
  67.             db.rollback()+ e, j7 P$ o. e+ e" R' f0 J
  68.     def add_question(self,Bookname,Cater_Name,Book_author,Book_Introduction,Book_Synopsis,Book_Palabras,Bookurl,Booktitle,BookID,BookConte,Titleid,abover,Book_Date):
    . o& h/ }0 ]- _: {. P
  69.         db = pymysql.connect(host="localhost",user="数据库用户名",password="密码",db="数据库名",charset="utf8")
      u$ o, u- g! N8 W0 y5 A) X6 J& S
  70.         try:
    : r9 [/ U6 c2 [  o4 l
  71.             cursor = db.cursor(), z9 L% l) T7 X: H2 ^$ T
  72.             #注意此处字符串的占位符要加双引号"%s"1 ]  F; x6 U* [
  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);
    ' |& O/ f; v0 c( z7 J
  74.             print(sql)
    $ ]" ~  V  Z7 L% L" J4 y
  75.             cursor.execute(sql)* {9 H, W/ G7 h0 q1 |+ L+ S" }
  76.             print(cursor.lastrowid); D' A* J. Z( \9 F& `1 [2 z6 I
  77.             db.commit()
    - \. F& U2 e) Y6 j# ^# z6 P: g7 O
  78.         except Exception as err:
    7 b$ a4 D: K) `) z- Y6 K- J
  79. #        except:
    1 e% k$ v  q* w: T" H$ \  v
  80. #            print('Failed')
    ( ^% H- A5 I* L7 V8 o% m* O
  81.             print("Error %s for execute sql: %s" % (err, sql))
    0 l1 G, y$ H0 M: d
  82.             db.rollback()( d" l& k! X* ]5 l2 F
  83.         
    + Q5 j6 y! _, o/ e# R
  84.     def add_locoy(self,Bookname,Cater_Name,Book_author,Book_Introduction,Book_Palabras,Book_img,Booktitle,BookConte,abover):
    9 [. |9 J6 o" P5 c" N7 U
  85.             reload(sys)8 \5 f2 p/ ^$ @$ x& y
  86.             sys.setdefaultencoding("gbk")
    $ \0 N1 U8 z8 q# k, }
  87.             locoy_url = 'http://www.******.net/locoy/?my=book'  #697火车头发接口地址" F9 m" Y5 Y: \4 K( b4 @! k
  88.             locoy_data = {
    ( ?$ M' J2 M4 z. c
  89.             'my_u':'用户名',   #后台用户名
    6 ^+ k; p9 P; E) y& h7 p3 g: Z
  90.             'my_p':'密码',   #后台密码% D8 v. ~" _2 v# z
  91.             'subject_669977_net':Bookname.encode('gbk', 'ignore'),; |* Q* d5 W/ J8 O
  92.             'caid':Cater_Name.encode('gbk', 'ignore'),
    4 U/ J( r2 C6 T+ I- z! W; _( I9 j
  93.             'title_669977_net':Booktitle.encode('gbk', 'ignore'),
    ' a2 r* `0 C" c
  94.             'article':BookConte.encode('gbk', 'ignore'),
    7 V: P5 b, o2 Q1 x
  95.             'author':Book_author.encode('gbk', 'ignore'),
    , h7 Y6 m% i/ h9 U  Z+ [: n: B
  96.             'ready_1':Book_Palabras.encode('gbk', 'ignore'),
    ! G# w% K: @# M, d' q( r2 g
  97.             'thumb':Book_img,% e% e1 A1 P( P  X5 v6 A6 A' f
  98.             'content':Book_Introduction.encode('gbk', 'ignore'),
    3 n+ u+ A; t8 @" L0 {3 |3 J
  99.             'abover':abover.encode('gbk', 'ignore')           % y8 E, X* c' [, r5 N. c; \' y
  100.                 }+ J0 w. U. ?* ?  h- m
  101.             res = requests.post(locoy_url, data=locoy_data)
    ; o6 ^# ~! D) B/ U. X% ^
  102.             print res.text
    7 d" ^* p8 F: u" y5 B
  103.             print res.content
    - O4 t2 L  W0 a& c  C( M5 [
  104. #            print Dsd
    ! u4 k) x& l6 v0 _% e# P  P$ M$ L
  105.             return res) {% B! |/ X5 m/ ^
  106.    
    5 Z1 K- G' a9 {9 E9 H: O; D( s
  107.     def __init__(self):
    ; U( o, W) _; o  T2 [. \! ~( A9 `
  108.         self.base_url1 = 'https://www.****.cc/'& d. Z! e; L- ?
  109.         self.base_url2 = '/', {5 d, a+ m. o1 r: M& n; K* g: k0 r% p
  110.         self.CaterId = []
    5 o& o7 E, ]5 l  U: |8 v0 i3 h
  111.         self.CaterIds = ['xuanhuan', 'wuxia', 'yanqing', 'lishi', 'kehuan', 'kongbu', 'nvsheng']/ t4 b5 b$ V* B
  112.         self.page_num = 1
    7 Z% K- w: j' W1 q
  113.         self.total_num = 200   1 B( v3 {2 \! W) D& m3 W

  114.   {6 W  y. g/ U6 _& P' L: i( w0 I2 n( R& ~
  115.     @every(minutes=8 * 60)1 @$ M7 G1 f! f. H' i3 [! F
  116.     def on_start(self):& [2 ~7 _$ @5 b
  117.         global Cater_Name
    & U0 N7 w8 d# G1 V. g% f9 Q2 G
  118.         Cater_Name = []
    5 d  m; A3 a9 G- P2 O3 `
  119.         while self.page_num <= self.total_num:
    * q- l$ ^' T% M6 c0 C
  120.             for self.CaterId in self.CaterIds:5 a2 Z; n+ _% w1 h
  121.                 if self.CaterId  == 'xuanhuan':3 w3 \* {; X3 @( v. v
  122.                      Cater_Name = '玄幻'
    7 D2 T; H: p2 }) `# A
  123.                 if self.CaterId  == 'wuxia':: p9 ?0 a+ O2 c2 [
  124.                     Cater_Name = '武侠'
    " |* {: |& g$ k, }% {
  125.                 if self.CaterId  == 'lishi':
    ( C) J- r. E7 ^$ f/ k
  126.                     Cater_Name = '历史'            
    % n6 L" t' r) @/ s" D& N% G
  127.                 if self.CaterId  == 'yanqing':
    7 H/ F  ~0 B2 J0 q7 U6 v) v
  128.                     Cater_Name = '都市'
    9 q. `' S; J9 v
  129.                 if self.CaterId  == 'nvsheng':
    * w1 }# A% G7 z' _- L% N
  130.                     Cater_Name = '都市' 5 q) s5 Y. k/ u8 z
  131.                 if self.CaterId  == 'kehuan':
    ; o; w+ C# A8 h8 a
  132.                     Cater_Name = '科幻' 4 C* w: l1 U: _: u' _6 Z/ c9 l& C9 b
  133.                 if self.CaterId  == 'kongbu':: u  ?4 {8 n* P+ B* }1 _, X
  134.                     Cater_Name = '游戏'
    8 Z! h2 f3 v' a& P3 p' q4 [
  135.                 print self.CaterId/ U7 Z# w- W+ K+ z' `7 h
  136.                 url = self.base_url1 + str(self.CaterId) + self.base_url2 + str(self.page_num) + "/"          - B1 P7 ]/ g  U$ L
  137.                 self.crawl(url, callback=self.list_Caterg,save=Cater_Name)
    ! h8 u2 Z  l( m
  138.             self.page_num += 1
    , h5 A3 b8 d' I& a
  139.             
    * c' Z, M1 E! x
  140.     def list_Caterg(self, response):. h7 w' ]7 Z+ p1 L: r) w! g, U
  141.         Cater_Name = response.save6 e) N. \. l6 _$ Z3 o) Y
  142.         for each in response.doc('.pic-list a[href^="http"]').items():
    + e' N- S6 W/ m( v
  143.             self.crawl(each.attr.href, callback=self.list_Caterg_detail,save=Cater_Name)/ V' V- f: d) V$ [5 }
  144.             # q/ J2 _4 d: E( o6 ~/ Z  [' r  Y+ K
  145.     def list_Caterg_detail(self, response):0 W% b+ N1 d8 Q" c1 W
  146.         Cater_Name = response.save
    1 P" ~0 ^$ u8 Q5 Y4 B
  147. #        print Cater_Name
    ' P0 }0 I" M& r1 s4 G' i
  148.         Bookname = response.doc('h1').text()$ c  N9 |% U. S+ R" |- p: H" H
  149.         print Bookname8 O; h! A& s$ B# o) C
  150.         Book_author = response.doc('.authorname > a').text()# Y+ N# A( S/ ~
  151. #        print Book_author$ _$ h, ]; U# G7 @% A. Z
  152.         Book_Introduction = response.doc('.book-intro > div').text()6 r* g$ B/ f6 E5 O+ j. v
  153. #        print Book_Introduction, b: D. X1 V) y
  154.         Book_Synopsis = response.doc('b').eq(1).text()
    9 b3 _2 H- R7 Y; U* L. Z
  155. #        print Book_Synopsis
    % O. f, `+ I6 p* t( {$ ]: o
  156.         Book_Palabras = response.doc('.booktitle p').text().split(' ')[1].split('|')[0]" m- p' f: |" E0 L" v
  157. #        print Book_Palabras
    : \3 X( \5 g' J* T
  158.         BookIDs = response.url.split("xiaoshuo/")[-1].split("/")[0]   #小说ID! @/ q9 Q0 c! ?$ ^( D
  159. #        print BookIDs9 u4 @# R  Q- a
  160.         Book_Dates = str(datetime.datetime.now())           ?  H! K" `) p2 B- D
  161.         for imgs in response.doc('.bigpic > img[src^="http"]').items():
    + m0 e# E3 p! v! m9 Y/ s+ P
  162.             img = imgs.attr.src; b3 p0 q- F: ^+ Y* q
  163.             print img9 v9 c) z9 R: E4 {5 E/ a; W. y
  164.                 #小说封面下载: g. R" y( n4 w3 j! M1 _
  165.             extension = self.getExtension(img)8 ]" C3 K+ X/ m7 r( P0 b5 G/ R
  166.             name = self.getname(img)6 Y0 B1 y, G, \3 q$ \
  167.             file_name = name + "." + extension" x/ ?! i0 `% e# r# O( e! f( p7 Y
  168.             imgDir = P_dir + name% b9 T  T8 ~& p- N
  169.             Locaimg = imgDir + "/" + file_name
    4 n7 {  W! ^1 x' P  }$ p2 v
  170.             print Locaimg+ Z( s9 x2 g$ ?; N3 h$ T$ I
  171.             if(self.download(P_dir, imgDir, file_name, img)):   #这2行可注译,图片下载到本地" w/ D$ i0 @0 j& b
  172.                 print('attachment url is ' + img)               #
    6 E  N# i% e, V7 D8 P
  173.             Datos = {
    ( I- ~1 c- W3 S2 c( I
  174.                     "Cater_Name":Cater_Name,
    2 p" F7 J5 b* L: B2 v6 M) _
  175.                     "Book_author":Book_author,
    ! }5 Q& q+ {# s: ?  X
  176.                     "Book_Introduction":Book_Introduction,/ ^9 S6 L0 W0 x1 T, ^. H+ ~" ]
  177.                     "Book_Synopsis":Book_Synopsis,0 |& d9 u1 n  y+ f
  178.                     "Book_Palabras":Book_Palabras,
    7 F' ^0 }5 t! {4 p
  179.                     "img":img,& j) `( ]/ v3 [- \2 c/ u8 e7 L
  180.                 }
    7 u- q* J8 H9 Y1 W9 R: Y
  181.             self.add_BookFile(Bookname, BookIDs, img, Locaimg, Book_Dates)  #这行可注译,数据库发布接口,方便其他系统的发布
    " G, m8 Q; m& Q8 W; b; r
  182.         for each in response.doc('div[class="bookbtn-txt"]  a[class="catalogbtn"]').items():" m% N% Q( a) U0 ~& C. V
  183.             self.crawl(each.attr.href, callback=self.index_page,save=Datos)
    % P3 J0 J' @4 e% y7 O
  184.             
    ' e) h7 s, ?* Y1 ]7 ^- P! H) V- f
  185.     @config(age=8 * 60 * 60)   
    ; x  w. X; a* x
  186.     def index_page(self, response):
      c! N2 |) w& L2 P- W& q0 O- G
  187.         Datos = {
    * d9 V/ c& J- O- Q
  188.                   "Cater_Name":response.save['Cater_Name'],
    ' ]; o3 Z/ |" g$ h+ Z- V
  189.                    "Book_author":response.save['Book_author'],9 j* z3 y& d6 s( u
  190.                    "Book_Introduction":response.save['Book_Introduction'],
    2 C0 q3 [1 d- K& ?/ \5 H
  191.                    "Book_Synopsis":response.save['Book_Synopsis'],5 J4 H1 x" V" j' \7 c
  192.                    "Book_Palabras":response.save['Book_Palabras'],4 P0 ?. K% s, k) y, `$ a
  193.                    "img":response.save['img'],4 B9 S: e# |: w7 b) j. T
  194.                      }% \$ c% f7 Q1 h1 V$ z* x
  195.         for each in response.doc('.chapter-list li:first-child a[href^="http"]').items():) N7 o$ J6 n" O5 f, x
  196. #        for each in response.doc('.chapter-list  a[href^="http"]').items():  
    / f) D+ s6 ^' S
  197.                     self.crawl(each.attr.href, callback=self.detail_page,save=Datos)9 V5 _3 c3 Q  U$ ~
  198.     @config(priority=2): g8 q; f0 x/ s* ~" H( [) }9 z
  199.     @catch_status_code_error
    3 S# i/ |  z3 m8 l+ E% w
  200.     def detail_page(self, response):        - D/ o! F' z+ i* N+ a, V
  201.         NewRe1 = u'哈书'
    3 m5 j  l4 Q: U4 E
  202.         NewRe2 = u'huhjsd.CC'
    % @$ y% A( \$ m' l
  203.         NewRe3 = r'^\\n\\n'& f; r7 J( K1 n; C- A( B$ p- N  E
  204.         NewRe5 = u'小说网'. O" z+ N. ?! J+ @! o4 Q
  205.         NewRe6 = u'fgdfgf'# m6 f4 ^) c, O1 a5 [. O* `
  206.         NewRe7 = u'fgfgf'! S7 }' f; K! X8 w7 s3 d* s2 v" a: k
  207.         NewRe8 = u'ffhgf'2 h. L9 j3 n9 i! Y3 Y& A* h
  208.         NewRe4 = r'[\f\t\v+\.\{\(\)\}\!\/_,$%^*(+"\')]+|[+——()?【】“”!,。?、~@#¥%……&*()]+'
    3 {* h4 z) _1 Y. d
  209.         ReC1 = u'静思'( }* R1 z  w- N4 e' B* J0 `) A* H9 N. Z
  210.         ReC2 = u'aghgf.com'
    8 O( p  O! K7 B2 X6 h. A. F4 \
  211.         ReC3 = u'aghgfh.com'
    - I7 U2 z1 v( g& a/ M6 w
  212.         ReC4 = u''8 i# E" J9 Z- k" J9 {; f: p
  213.         ReC5 = u'文学网'
    % y' h; N' L0 {8 P/ ]  N. a; d- Z# x" P
  214.         ReC6 = r'<BR>'' Q3 x3 Z4 F' {3 v$ U: A. y
  215.         Bookname = response.doc('.readlocation a').eq(2).text()   #小说名称
    # o) c' M. K3 w. U6 v
  216.         print Bookname! Q7 @1 P9 u( c5 w
  217.         Cater_Name = response.save['Cater_Name']   # 小说分类9 W$ l! R2 [1 E: {- e
  218.         Book_author = response.save['Book_author']   #小说作者* c5 `9 J, U% S+ X- m4 r
  219.         Book_Introduction1 = response.save['Book_Introduction']   #小说简介
    - h9 O# d0 j! G* H5 N( Z6 J$ m' y0 e
  220.         Book_Synopsis = response.save['Book_Synopsis']   #最近更新
    $ G" f% T/ C  `; O
  221.         Book_Palabras = response.save['Book_Palabras']   #小说字数( N! r/ Q# D7 P5 C$ w% k6 y) v
  222.         Bookurl = response.url   #小说网址
    ; [. w+ M1 a* Y' M3 L" ]: W
  223.         Booktitle = response.doc('.article-title').text()   #章节名称% r1 _( Y) Y& j0 J9 F7 N0 ]
  224.         BookID = response.doc('.readset-r span').text()   #小说ID$ ?' R7 v$ @" ?9 R5 [8 v9 `' c
  225.         BookConte1 = response.doc('.article-con').text()   #小说章节内容7 i& ^8 F; A8 ~4 |1 i1 w0 |
  226.         abover = response.doc('.article-title').text() + response.save['Book_Synopsis'] + response.save['Book_Palabras'] + response.save['Book_Introduction']   #小说状态(连载还是完成)6 v; a1 P  L' L+ {  V0 b8 v* i
  227.         Book_Date = str(datetime.datetime.now())    # 采集时间+ R: f) K2 |. J0 I8 b. k
  228.         BookConte2 = BookConte1.replace(NewRe1 , ReC1)2 R) ]2 m; c/ b) t( F5 O' T
  229.         BookConte3 = BookConte2.replace(NewRe2 , ReC2)3 t0 M6 T, U( k
  230.         BookConte5 = BookConte3.replace(NewRe5 , ReC5)  R% E4 |: t0 u' b
  231.         BookConte6 = BookConte5.replace(NewRe6 , ReC2); \6 c. B& q) k) g3 O) \0 e
  232.         BookConte7 = BookConte6.replace(NewRe7 , ReC2)
    * `, p/ \1 g/ h4 d2 \9 @" J1 z; i
  233.         BookConte8 = BookConte7.replace(NewRe3 , ReC6)! E9 w' ^  h  ~. w. v
  234.         BookConte4 = re.sub(NewRe4 , ReC4 , BookConte8)
    " t3 v. d# Q1 v( [
  235.         BookConte = BookConte4.replace("\n\n","<br>")
    " H$ o# ~, l3 s+ F( H4 Y" i
  236.         print BookConte
    & Y& T/ j( B( C' h( M0 X2 k! `6 K
  237.         Book_Introduction2 = Book_Introduction1.replace(NewRe1 , ReC1)/ Q  e/ b: `" v1 B' O8 I; a
  238.         Book_Introduction3 = Book_Introduction2.replace(NewRe2 , ReC2)5 V+ d4 [6 c4 r) v8 i( ]
  239.         Book_Introduction4 = Book_Introduction3.replace(NewRe3 , ReC3)
    + m. J& V. t( h- q: Y. r3 g+ z
  240.         Book_Introduction = re.sub(NewRe4 , ReC4 , Book_Introduction4)
    7 \0 a3 v8 @7 h) @) H+ Z- E( G
  241.         Titleid = response.url.split(BookID + "/")[-1].split("/")[0]     8 N# D2 M! w9 C3 D% ]/ T) O
  242.         Book_img = response.save['img'],  #小说图片
    / a5 Z5 h  q/ U( w$ h. L, o# x. d
  243.              ( p  Z, d# @1 e( H4 l
  244.         #insert into MySQL 小说入库/ d2 M, [" t* o1 t* u( n
  245.         self.add_question(Bookname,Cater_Name,Book_author,Book_Introduction,Book_Synopsis,Book_Palabras,Bookurl,Booktitle,BookID,BookConte,Titleid,abover,Book_Date)   #这行可注译,数据库发布接口,方便其他系统的发布
    . B+ S; B2 k/ r" U* ~
  246.         self.add_comment(Bookname, Booktitle, BookID, Titleid, Book_Date)   #这行可注译,数据库发布接口,方便其他系统的发布8 ~, W, y7 Y+ u4 \
  247.         #post提交发布/ p- z6 H3 [' j( n  s' Q2 ~4 |# T: @
  248.         self.add_locoy(Bookname,Cater_Name,Book_author,Book_Introduction,Book_Palabras,Book_img,Booktitle,BookConte,abover)  #这行可注译,火车头发布接口,不需要可取消
    - p8 @* z5 w- @4 N8 g3 v! X# e
  249.         Datos = {
    , q- V) ^' j1 _1 Q+ J
  250.                   "Cater_Name":response.save['Cater_Name'],
    6 k0 T) ^9 F1 r
  251.                    "Book_author":response.save['Book_author'],
    : y& D" Z5 G; i& m9 X
  252.                    "Book_Introduction":response.save['Book_Introduction'],
    " }$ m- g+ G" P+ {* E
  253.                    "Book_Synopsis":response.save['Book_Synopsis'],
    $ A! q) X/ ^3 ^  d- h$ N, o1 N2 @1 ~
  254.                    "Book_Palabras":response.save['Book_Palabras'],
    . F( |  H/ d1 F* _5 f
  255.                    "img":response.save['img'],
    / c5 Y) N/ }7 J2 D  ^0 ^3 b# x
  256.                      }
    1 I1 V/ h4 r& h% s$ k! x$ f0 S
  257.         for each in response.doc('.articlebtn > a:nth-child(4)[href*="/xiaoshuo"]').items():/ {  _- H  p$ {7 U4 F1 G
  258.             self.crawl(each.attr.href, callback=self.detail_page,save=Datos) 2 D' `" f6 E! [  p  R% ~. N# v
  259.         return {
    # x0 a( S$ X1 t/ g% B
  260.             "Cater_Name":Cater_Name,
    ' U& b+ t2 f1 l. b" z
  261.             "Bookname":Bookname,
    - R0 l/ G  ?. p: U" i4 ]* x
  262.             "Book_author":Book_author,
    ) L( r) I+ W2 t, g2 Q
  263.             "Book_Introduction":Book_Introduction,! a1 v4 ]5 V7 x) k. |" T* W" U
  264.             "Book_Synopsis":Book_Synopsis,
    2 W( U/ K+ j4 n( m9 H, \
  265.             "Book_Palabras":Book_Palabras,
    " S, I6 T9 {, Y) A, v
  266.             "Book_img":Book_img,
    ) r* v4 g) W. P  a
  267.             "Bookurl": response.url,
    " T7 L: u  `8 ?: R
  268.             "Booktitle": Booktitle,
    . U9 _$ T8 j/ ?8 M) M
  269.             "BookID": BookID,
    . I. V1 @% ?& c8 A1 ^0 ~
  270.             "BookConte": BookConte,1 V+ x+ K7 w& U) P
  271.             "Titleid": Titleid,9 A# k5 S  o7 b
  272.             "abover":abover,4 O3 s/ N* e# p3 |2 @
  273. #            "Book_Date" = str(datetime.datetime.now()),
    4 x) E( V: W1 r
  274.         }
    + g: w2 b2 d3 p: k
  275.     def download(self, P_dir, imgDir, file_name, Book_img):
    0 ]& e7 A8 j( b: c5 g+ o6 L* A
  276.         if not os.path.exists(imgDir):
    8 d: k( M3 X1 ~3 I, M4 |/ M
  277.             os.makedirs(imgDir)7 O+ D0 U4 [; i7 B" V
  278.         file = imgDir + "/" + file_name( x9 x, {$ W8 i1 `) @8 j" N5 e: q
  279. #        print file
    # `2 o- V, Q/ V  a% g( U
  280.         f = open(file, 'wb+')
    ( t- j1 i  `; h; e2 ^$ J: d# g
  281.         imag = requests.get(Book_img)
    8 S1 k, T; `: l  m- v! D0 g
  282.         f.write(imag.content)0 U. p1 o$ o3 v) \
  283.         f.close()
      f& O. [; A; {( r+ K
  284.         #保存图片前4 F; F4 h# V$ H# g- d0 C
  285.     def save_imgs(self,response):
      I6 G/ X, V7 U  h
  286.         content = response.content
    8 ?5 S, ^5 ]" X' `9 h' y# ?# e- `
  287.         file_name = response.save["file_name"]$ m' T% H8 l0 K! j0 T, n5 K
  288.         imgDir = response.save["imgDir"]
    $ F! u) E! ?" o1 g: D% _8 W
  289.         file_path = imgDir + file_name6 K. e5 c' F3 K. d
  290.         self.save_img(content,imgDir,file_path), t9 ?/ j; [6 P  |- O) M5 Q
  291.     #保存图片
    7 u" Z. j* @8 C* y. O
  292.     def save_img(self,content,imgDir,path):
    ; h( O9 }$ f/ @. n; ^
  293.         if not os.path.exists(imgDir):                        
      n0 a6 p; n- A  T* b2 q
  294.             os.makedirs(imgDir)
    $ `+ O5 \* T9 u* `
  295.         f = open(path,"wb" )! L% \) @- `' S/ g+ K
  296.         f.write(content)
    - |3 V) K$ Q" A* c
  297.         f.close()
    3 ^; R  n* r) d* ]% E$ Q: D  ]+ W
  298.     #获取url后缀名5 G6 y# B: {2 e% S
  299.     def getExtension(self,url):                           
    7 n* R! n9 H( S% o; y
  300.         extension = url.split(".")[-1]0 _3 |9 }3 j3 c% [& d  {7 y
  301.         return extension
    + C# p9 E: B, f
  302.     8 b: Q* s8 Z% N) K
  303.     #获取图片名/ h9 y* o# B5 c4 E
  304.     def getname(self,url):
    6 M7 Y" H4 Y- @+ m
  305.         name=url.split("/")[-1].split(".")[0]
    ' x9 U& e8 c& d; O1 s! r8 `
  306.         return name
复制代码

/ p$ Q( F. Q0 K6 ]) \

* z+ N7 A4 \/ a, B+ I
您需要登录后才可以回帖 登录 | 注册

本版积分规则

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

GMT+8, 2024-11-24 07:37

Powered by Discuz! X3.5

© 2001-2024 Discuz! Team.

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