找回密码
 注册

QQ登录

只需一步,快速开始

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

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

[复制链接]
发表于 2019-6-8 23:06:07 | 显示全部楼层 |阅读模式
Python + pyspider某小说站的爬虫,入数据库,火车头发布,资源下载到本地,另可写爬虫!$ G, u( j/ t# K
  1. #!/usr/bin/env python/ X! ?6 A& m7 H
  2. # -*- encoding: utf-8 -*-
    ' [1 P+ g, s  ?, ?/ O8 I  i
  3. # Created on 2019-05-05 21:43:11% }4 C! k2 O" z1 W- p
  4. # Project: XiaoShuo4 g$ O( P$ C, h" Q: r& ~4 ]" w

  5. : M7 m9 w; l2 s  _0 l# E' i
  6. from pyspider.libs.base_handler import *5 r" h4 r2 u) b4 \$ H
  7. import pymysql
    . \  R! p. a) p4 ^+ y
  8. import random+ k6 H9 O* A& d/ C6 ~5 q- V6 a
  9. import datetime, H8 V6 o: K0 `/ n; h% g
  10. import urllib2,HTMLParser,re/ f% Q6 k' Q! X6 v& o; I# w
  11. import os
    . z  j/ Z; r# g; X
  12. import sys* }! L: K2 i1 C. h, n& w+ _
  13. import re; g$ h% b5 ^" |9 D7 W
  14. import codecs
    ! w; L& E8 @# x
  15. import requests
      P- {4 J. L( i: R7 g) C( I
  16. import json
    ; @3 \7 O% a* M) r

  17. ! T) @* v1 ^" Y7 ?
  18. class Handler(BaseHandler):
    / o3 J  [3 Z8 @3 y8 b
  19.     global Datos3 g/ }  i6 Q( j
  20.     global P_dir   
    - F3 O8 }9 O! r
  21.     P_dir = '/Tools/Debug/'  #采集时候图片保持到本地的路径
    4 y- k  V+ g; b: w6 d4 ~
  22.     global Datos, A; Y9 s6 Y7 ^
  23.     Datos = {}1 E9 K8 H  B2 S4 A: o8 s: M
  24.     headers= {3 P- i0 O7 ?* n8 \. u& M
  25.     'Accept':'text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,*/*;q=0.8',
    8 Q% X; A  ~; F0 c
  26.     'Accept-Encoding':'gzip, deflate, sdch',
    " M& R2 }1 k. j) S1 I; _  X
  27.     'Accept-Language':'zh-CN,zh;q=0.8',9 h/ A& \6 U; M, h% v% x
  28.     'Cache-Control':'max-age=0',
    8 ~; b, K5 b& n$ |- r
  29.     'Connection':'keep-alive',7 W" L7 O$ V5 K! {
  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'& g9 L, G% y: `! @
  31.     }
    2 s4 l( @. O1 W2 l8 v  s
  32.     crawl_config = {1 N- f7 Z+ v- |8 P3 u. @
  33.         'headers' : headers,
    8 X6 l. \- g/ D- o! E" Q2 ~. |
  34.         'timeout' : 300- u  p% n0 t& q: V
  35.     }2 O& L8 r# @& ~: C) z
  36.     def add_BookFile(self,Bookname, BookIDs, img, Locaimg, Book_Dates):" p" @4 z% {! D4 Z( \) o! x! F/ M
  37.         db = pymysql.connect(host="localhost",user="数据库用户名",password="密码",db="数据库名",charset="utf8")
    . ?1 r6 O( o+ r! |3 |
  38.         try:
    0 [9 j9 C0 d6 Z
  39.             cursor = db.cursor()$ `! l1 i8 W8 ~4 a# y8 R1 O9 i
  40.             #注意此处字符串的占位符要加双引号"%s"
    * h7 J0 B7 h: Q$ r
  41.             sql = 'insert into BookFile(Bookname, BookID, img, Locaimg, Book_Date) values ("%s","%s","%s","%s","%s")' % (Bookname, BookIDs, img, Locaimg, Book_Dates);
    , \( ^3 I) f- q" |0 a$ g, Z
  42. #            print(sql)
    % f: t, `0 l' v
  43.             cursor.execute(sql)
    + d' h, M% c  j7 `# l& h; H# Z
  44.             ' S- d( P/ S# N2 \, k
  45.             #qid = cursor.lastrowid
    4 }* {+ ~* v- z# d
  46.             #print(qid)+ v- r* f8 S5 G% Y" }/ ?- p/ `& m
  47.             # ]2 D8 ]2 F0 b7 n- \
  48.             db.commit()- c1 Z+ Z  s- E/ G0 Y; b' B! m1 {
  49.         except Exception as err:
    / G7 R( R* [9 {9 z
  50.             print("Error %s for execute sql: %s" % (err, sql))
    $ M' ?+ k9 A! C# R: f+ F
  51.             db.rollback()
    - ?) P0 i* F& ^: v( d8 m* K2 p" d
  52.     def add_comment(self,Bookname, Booktitle, BookID, Titleid, Book_Date):1 d, Q0 J1 b. g
  53.         db = pymysql.connect(host="localhost",user="数据库用户名",password="密码",db="数据库名",charset="utf8")
    2 L3 T7 ^8 T4 n8 S
  54.         try:8 D% F# q9 ~6 p$ X" \
  55.             cursor = db.cursor()
    , ^% o; M9 _8 a0 y9 I
  56.             #注意此处字符串的占位符要加双引号"%s"
    9 l2 F1 W( J- m  N7 \9 Y, J- m
  57.             sql = 'insert into BookTitle(Bookname, Booktitle, BookID, Titleid, Book_Date) values ("%s","%s","%s","%s","%s")' % (Bookname, Booktitle, BookID, Titleid, Book_Date);( T. s3 ?+ B8 H, L- c) D7 ?
  58. #            print(sql)3 g# d6 e% [' H. a
  59.             cursor.execute(sql)" N# f4 u9 S  e- ?* p
  60.             
    4 j% x) B5 e+ c5 f$ h! j4 v  ^" L
  61.             #qid = cursor.lastrowid8 }6 Q6 H" }# d8 [$ \) c
  62.             #print(qid)+ @) r/ w3 I% p" v
  63.             
    ( x( Q( M2 S5 _/ `
  64.             db.commit()0 o9 ~' d7 Y7 [9 [3 p
  65.         except Exception as err:
    8 G6 m# r% X7 d3 Q7 F  y' \- W" A7 v
  66.             print("Error %s for execute sql: %s" % (err, sql))
    0 O4 K& @# j# _# @( s1 ~
  67.             db.rollback()7 e" l+ m' M. M
  68.     def add_question(self,Bookname,Cater_Name,Book_author,Book_Introduction,Book_Synopsis,Book_Palabras,Bookurl,Booktitle,BookID,BookConte,Titleid,abover,Book_Date):+ @/ h4 e: s3 R4 A6 M. @% p% r
  69.         db = pymysql.connect(host="localhost",user="数据库用户名",password="密码",db="数据库名",charset="utf8")6 ?: t1 ~/ D! Q
  70.         try:
    8 c$ w6 J# J; Q9 b% A1 P) ~
  71.             cursor = db.cursor()8 g# A( k: M( Z1 k
  72.             #注意此处字符串的占位符要加双引号"%s"+ t: w5 R" r' z6 x' z" a+ [
  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);
    / v7 k; y" C5 z, b$ ^6 I
  74.             print(sql)4 ~- N7 q6 s# e7 q0 }. z
  75.             cursor.execute(sql)  q; C- E- U( d4 X8 q
  76.             print(cursor.lastrowid)
    ( K2 l  ^4 Z/ m; s
  77.             db.commit()' ]  [+ \, r6 w
  78.         except Exception as err:
    $ j8 ^( t. i6 q( ]  `- N
  79. #        except:
    . l6 G* u+ D# H& p
  80. #            print('Failed')8 o5 {0 \$ P1 m/ I# x
  81.             print("Error %s for execute sql: %s" % (err, sql)): Q; m( t/ o6 L$ `; T7 Y3 H" }
  82.             db.rollback()
    . c5 _- p1 C" |2 s$ v
  83.         
    1 S' P3 u+ K9 c: `1 C7 i8 T
  84.     def add_locoy(self,Bookname,Cater_Name,Book_author,Book_Introduction,Book_Palabras,Book_img,Booktitle,BookConte,abover):   y% S1 D6 w) B$ \
  85.             reload(sys)
    + Y0 [+ R/ Z8 G
  86.             sys.setdefaultencoding("gbk")& C) b+ W2 X/ Z& y* `4 _7 X
  87.             locoy_url = 'http://www.******.net/locoy/?my=book'  #697火车头发接口地址
    , ]7 D) M" U# R& v' G3 n4 ]
  88.             locoy_data = {) K. ]. H/ U3 t# H. Y: J
  89.             'my_u':'用户名',   #后台用户名
    : g3 ^8 s, H# {: T8 r0 M
  90.             'my_p':'密码',   #后台密码1 R+ @- b' V( u8 b3 h+ J2 T: ]
  91.             'subject_669977_net':Bookname.encode('gbk', 'ignore'),
    ; O3 Q0 ], b, a; O" n
  92.             'caid':Cater_Name.encode('gbk', 'ignore'),
    . p8 w/ Y. Z: S6 i1 X$ G
  93.             'title_669977_net':Booktitle.encode('gbk', 'ignore'),
    , s, j8 h( E8 ?7 c
  94.             'article':BookConte.encode('gbk', 'ignore'),7 L2 B1 R7 y! s2 x$ B( x
  95.             'author':Book_author.encode('gbk', 'ignore'),
    $ f: _, g! m- S2 _+ ~# @' x
  96.             'ready_1':Book_Palabras.encode('gbk', 'ignore'),
      u; k, h6 b) n+ ^7 d
  97.             'thumb':Book_img,; q& E/ v: t$ K/ l
  98.             'content':Book_Introduction.encode('gbk', 'ignore'),6 p% ]) O, ]* H
  99.             'abover':abover.encode('gbk', 'ignore')           8 J. _) r/ {+ G, e5 y  g: Q/ n% W" [; Z
  100.                 }
      z4 k3 B4 H) h/ [0 j
  101.             res = requests.post(locoy_url, data=locoy_data)5 {. e" \5 r+ P' u9 n& E
  102.             print res.text
    # R, U' U! r# X9 m4 f
  103.             print res.content, g; {9 y% v( F' K9 _5 p
  104. #            print Dsd
    " _4 z5 E0 u; K( U  h
  105.             return res
    $ D5 L' D- T1 ^) O8 A
  106.     $ ]" Z/ U- C6 I: n1 \
  107.     def __init__(self):' H, q6 R- J- t$ a5 v! b2 e9 j
  108.         self.base_url1 = 'https://www.****.cc/') |# v9 a' [" _9 o
  109.         self.base_url2 = '/'
    0 C9 f; s9 s2 m3 |8 v9 L0 x
  110.         self.CaterId = []2 e! s: \$ M* c* @; {
  111.         self.CaterIds = ['xuanhuan', 'wuxia', 'yanqing', 'lishi', 'kehuan', 'kongbu', 'nvsheng']- @$ B+ j; J; Z  t9 `
  112.         self.page_num = 1
    2 G: ~3 C6 W9 w/ B) H7 O6 M0 E8 A
  113.         self.total_num = 200   
    " M( _$ d# v8 R' ]" H
  114. 7 ^7 m' N$ ?# Z
  115.     @every(minutes=8 * 60)4 Z* S/ s$ H9 M% \' Z0 a% e
  116.     def on_start(self):' k% X6 z3 S+ U5 N0 o! {
  117.         global Cater_Name& S; i4 J3 r) J# S& {  [7 I+ X
  118.         Cater_Name = []
    8 e( W  k2 m, V$ }  H
  119.         while self.page_num <= self.total_num:
    6 Q8 d! `* j8 b3 q2 A) e
  120.             for self.CaterId in self.CaterIds:+ w' f$ u/ Z0 Y
  121.                 if self.CaterId  == 'xuanhuan':
    0 `9 G8 B& S2 J2 R
  122.                      Cater_Name = '玄幻'9 C. j6 E( W! z$ d" {
  123.                 if self.CaterId  == 'wuxia':* g4 u0 U: n* K0 _  H
  124.                     Cater_Name = '武侠') c9 Z! O- b$ }3 i! L  ]& p0 T2 b
  125.                 if self.CaterId  == 'lishi':, C* j2 \7 F/ M5 I+ [- Z; {
  126.                     Cater_Name = '历史'            
    , }9 h# G4 U. Z) `, }2 h$ F- U
  127.                 if self.CaterId  == 'yanqing':5 t4 m( A( b2 h3 L0 u  W
  128.                     Cater_Name = '都市' 2 ^1 h7 q7 ?" g$ Q/ L: E
  129.                 if self.CaterId  == 'nvsheng':
    9 [) W% J6 V1 k9 f; B3 B
  130.                     Cater_Name = '都市'
    1 q. p7 R. g+ f/ F& X/ }: i
  131.                 if self.CaterId  == 'kehuan':
    7 [+ t1 P/ P, Q! o* I
  132.                     Cater_Name = '科幻' - C* \+ D$ l0 G* s  p% Q
  133.                 if self.CaterId  == 'kongbu':0 J- b- b1 Y% k
  134.                     Cater_Name = '游戏' ; V. j( P& ^% Y' ]" D5 U. N' {
  135.                 print self.CaterId% I' s9 g5 P  w% u
  136.                 url = self.base_url1 + str(self.CaterId) + self.base_url2 + str(self.page_num) + "/"         
    ( v0 B& d- z# H& P: D+ O; y& q, P- P
  137.                 self.crawl(url, callback=self.list_Caterg,save=Cater_Name)
    " [9 s3 R4 B7 ~3 f7 x4 J
  138.             self.page_num += 1 . [% G& Q, [" H. ]
  139.             0 ]7 f3 p" R" a5 }- h$ o
  140.     def list_Caterg(self, response):
    # y4 Q. w' N- K- T' i
  141.         Cater_Name = response.save
    & O- s5 \( }* @8 u8 }4 C$ C8 |
  142.         for each in response.doc('.pic-list a[href^="http"]').items():
    4 `7 T: W# i" `
  143.             self.crawl(each.attr.href, callback=self.list_Caterg_detail,save=Cater_Name)% ~7 a/ g% v, n" S
  144.             
    ) ^& @. d0 \- G( k2 x
  145.     def list_Caterg_detail(self, response):
    3 k% l8 W4 N, w: @
  146.         Cater_Name = response.save# T( k" l. J6 x5 Z4 O- q' H
  147. #        print Cater_Name
    6 h" L/ x  n' F1 D4 l# b
  148.         Bookname = response.doc('h1').text()
    5 m, o0 s, ]/ A6 e3 t" }! M
  149.         print Bookname
    2 D! N) w7 S1 P& N9 |
  150.         Book_author = response.doc('.authorname > a').text()
    5 V4 o$ _8 Z: L$ A- L  o, n
  151. #        print Book_author9 ]. M, i9 Q" O1 \0 _
  152.         Book_Introduction = response.doc('.book-intro > div').text()
    . F3 g6 W/ ^) W4 f. I( M: X
  153. #        print Book_Introduction1 k+ h) g1 T; o! x* i7 c' S# s
  154.         Book_Synopsis = response.doc('b').eq(1).text()
    7 n  E6 R8 _. p9 N
  155. #        print Book_Synopsis
    7 W1 w. i2 \9 n3 A$ ~# e/ i1 I
  156.         Book_Palabras = response.doc('.booktitle p').text().split(' ')[1].split('|')[0]
    7 B/ B, m0 i7 L7 N9 J3 j
  157. #        print Book_Palabras
    9 I) B5 e- m( a, ~  R
  158.         BookIDs = response.url.split("xiaoshuo/")[-1].split("/")[0]   #小说ID
    1 H0 W3 v7 w  c% \
  159. #        print BookIDs, n# I# Q9 H) q
  160.         Book_Dates = str(datetime.datetime.now())         
    8 @5 p: w' \# j# \7 u
  161.         for imgs in response.doc('.bigpic > img[src^="http"]').items():9 W) |. V* I! I% B
  162.             img = imgs.attr.src
    2 h, V' O' e) `/ {: J8 S- @
  163.             print img
    6 }" `& F9 k9 G& W/ w
  164.                 #小说封面下载
    1 e4 e! w* Y. L& o6 f/ E# U
  165.             extension = self.getExtension(img)
    , o7 ?8 y, K9 B4 E6 A( o4 k
  166.             name = self.getname(img)
    $ ~2 r/ P; n9 Y% D  O6 b
  167.             file_name = name + "." + extension) N' E+ y; w3 l% p
  168.             imgDir = P_dir + name
    2 T- Y( j) H1 d- x
  169.             Locaimg = imgDir + "/" + file_name
    6 Q: v+ O" T7 C3 {2 E8 }2 B
  170.             print Locaimg
    7 r$ Q$ v) I/ ]" G! G
  171.             if(self.download(P_dir, imgDir, file_name, img)):   #这2行可注译,图片下载到本地
    # E2 k. t/ g4 f# n
  172.                 print('attachment url is ' + img)               #
    / A+ b( J  ]% N0 ], _8 ]# O1 I7 e; L
  173.             Datos = {
    ( ?: Y: i% w! M8 h; g$ Z. N- {
  174.                     "Cater_Name":Cater_Name,
    " j5 {' m/ l; L3 Z- ~) v8 a0 u
  175.                     "Book_author":Book_author,4 G7 O5 W$ u: P, N) N% ]2 o" @
  176.                     "Book_Introduction":Book_Introduction,  ^1 o% R+ {, b1 q" Z% |. b2 V& _
  177.                     "Book_Synopsis":Book_Synopsis,
    . G& s, m7 t# D# P
  178.                     "Book_Palabras":Book_Palabras,
    8 a8 n* p" q2 s7 V* L" o9 v; {
  179.                     "img":img,$ B5 G- z& d7 j, i0 ^$ v5 C
  180.                 }
    8 k- G5 s  c' O% x
  181.             self.add_BookFile(Bookname, BookIDs, img, Locaimg, Book_Dates)  #这行可注译,数据库发布接口,方便其他系统的发布9 O; p, @5 g/ r& _* N* H5 h$ X
  182.         for each in response.doc('div[class="bookbtn-txt"]  a[class="catalogbtn"]').items():
    ) ~+ M! x' T& H, h+ Q
  183.             self.crawl(each.attr.href, callback=self.index_page,save=Datos), n. [, L' j2 [, Q- O8 J
  184.             0 ^9 l( @" E' v$ V7 S
  185.     @config(age=8 * 60 * 60)   
    & K6 w2 l* Q: o) W% ]5 X
  186.     def index_page(self, response):
    ( t& b' b# a+ R) @6 D$ g
  187.         Datos = {8 x1 q4 D' ^" }5 P: p
  188.                   "Cater_Name":response.save['Cater_Name'],; d# I; l4 i5 }# u8 v  i& w" w
  189.                    "Book_author":response.save['Book_author'],9 @/ C* j0 b+ M: o
  190.                    "Book_Introduction":response.save['Book_Introduction'],
    0 N+ k2 @6 J; ^# \5 C. M$ W, \$ G5 E
  191.                    "Book_Synopsis":response.save['Book_Synopsis'],
    6 u8 I" S# P: K$ e
  192.                    "Book_Palabras":response.save['Book_Palabras'],
    $ v: }! l5 P+ q) `- t9 D+ `
  193.                    "img":response.save['img'],% L1 m5 o. \7 `
  194.                      }! {3 d9 J: s9 r  C$ a9 ]; M0 E
  195.         for each in response.doc('.chapter-list li:first-child a[href^="http"]').items():
    0 w+ k* A; m6 [/ ?. N
  196. #        for each in response.doc('.chapter-list  a[href^="http"]').items():  
    8 D- b/ D8 d9 N5 H
  197.                     self.crawl(each.attr.href, callback=self.detail_page,save=Datos)
    8 y3 s" m! U* g& K6 U2 B' C
  198.     @config(priority=2)
    : N% Q+ W7 a) h8 L5 a
  199.     @catch_status_code_error2 B; K6 s& b, f8 v) r0 J
  200.     def detail_page(self, response):        % ?  I* @3 H! A7 V7 i; R5 r/ a5 ?
  201.         NewRe1 = u'哈书'! W4 `' o9 V- ]; r3 i, o) b9 u0 ?
  202.         NewRe2 = u'huhjsd.CC'
      R5 @% D7 m# ?' U) R8 S" [
  203.         NewRe3 = r'^\\n\\n'
    " E8 M: E6 h4 e/ ^5 l- k
  204.         NewRe5 = u'小说网'& _# Y9 f2 w9 {: k
  205.         NewRe6 = u'fgdfgf'' \0 N( L# H+ s; ?# A
  206.         NewRe7 = u'fgfgf'
    2 U9 Q# v, [1 }$ e9 k/ C( ?
  207.         NewRe8 = u'ffhgf'' O# |/ \6 Q7 j
  208.         NewRe4 = r'[\f\t\v+\.\{\(\)\}\!\/_,$%^*(+"\')]+|[+——()?【】“”!,。?、~@#¥%……&*()]+'
    8 k/ S2 H: C1 d7 V
  209.         ReC1 = u'静思'
    ( V  p# l& x' C; M2 ^9 F" P6 U4 p
  210.         ReC2 = u'aghgf.com'0 R4 j# m! m  J$ y# P9 W) ^* ?
  211.         ReC3 = u'aghgfh.com'4 m1 E! h9 T! o" u5 b0 B( P
  212.         ReC4 = u''2 X/ I2 l! V3 G8 L" @
  213.         ReC5 = u'文学网'
    $ g: ~$ q0 c* \1 B+ s9 ~
  214.         ReC6 = r'<BR>'
    . j1 l0 ?7 l: {+ \
  215.         Bookname = response.doc('.readlocation a').eq(2).text()   #小说名称4 Y& \5 I; t. a
  216.         print Bookname
    - s- b9 @/ B2 A
  217.         Cater_Name = response.save['Cater_Name']   # 小说分类
    - v3 s& O# T# U  {# i; @
  218.         Book_author = response.save['Book_author']   #小说作者
    7 i& z* _- y( w2 S, L( B
  219.         Book_Introduction1 = response.save['Book_Introduction']   #小说简介
    - K4 ]$ e& \6 ^: v
  220.         Book_Synopsis = response.save['Book_Synopsis']   #最近更新
    - o: c* x7 B; x1 U
  221.         Book_Palabras = response.save['Book_Palabras']   #小说字数
    ( q0 ?4 V4 t( _% q  i4 U
  222.         Bookurl = response.url   #小说网址; x: U; b! l: x' r, _
  223.         Booktitle = response.doc('.article-title').text()   #章节名称
    - V' w3 y, h5 O" I
  224.         BookID = response.doc('.readset-r span').text()   #小说ID
    % A) o+ x6 m* u5 g$ k8 G
  225.         BookConte1 = response.doc('.article-con').text()   #小说章节内容% |1 ^4 v0 G/ p! I) f* S
  226.         abover = response.doc('.article-title').text() + response.save['Book_Synopsis'] + response.save['Book_Palabras'] + response.save['Book_Introduction']   #小说状态(连载还是完成)
    # u5 @7 x* O; H% W* O$ `3 D
  227.         Book_Date = str(datetime.datetime.now())    # 采集时间3 X, R# @, I! Y2 n  r/ a0 ^* a
  228.         BookConte2 = BookConte1.replace(NewRe1 , ReC1)
    ; Y" z: b' O, u
  229.         BookConte3 = BookConte2.replace(NewRe2 , ReC2)4 y" G' }- @& m& y  \
  230.         BookConte5 = BookConte3.replace(NewRe5 , ReC5)2 m# j0 n9 d+ G# x5 N! U4 D. L
  231.         BookConte6 = BookConte5.replace(NewRe6 , ReC2)4 t8 L0 |! E5 g' o8 ?3 B
  232.         BookConte7 = BookConte6.replace(NewRe7 , ReC2)
    - R* N: J0 c" K8 t$ n) ^
  233.         BookConte8 = BookConte7.replace(NewRe3 , ReC6)$ q1 ^. v$ o& \+ k3 I: r. F
  234.         BookConte4 = re.sub(NewRe4 , ReC4 , BookConte8)
    # E1 l% L1 N' E, `% W
  235.         BookConte = BookConte4.replace("\n\n","<br>")
    1 I* i5 I+ v6 v$ b# Y. y" u
  236.         print BookConte; p, C4 M3 H. j# q
  237.         Book_Introduction2 = Book_Introduction1.replace(NewRe1 , ReC1)% W  D' W9 _% z* o( d
  238.         Book_Introduction3 = Book_Introduction2.replace(NewRe2 , ReC2)$ Y: a( S- D1 m* _
  239.         Book_Introduction4 = Book_Introduction3.replace(NewRe3 , ReC3)
    * I( r( }. t$ G, Q  D: k8 a8 }  K
  240.         Book_Introduction = re.sub(NewRe4 , ReC4 , Book_Introduction4)0 F0 p4 t/ a' I. E6 S
  241.         Titleid = response.url.split(BookID + "/")[-1].split("/")[0]     
    0 T0 J2 n+ ~9 @
  242.         Book_img = response.save['img'],  #小说图片
    1 R( _# g  `( ]/ t: H" E
  243.              ) d) {# t% B6 W9 E  K: X8 P
  244.         #insert into MySQL 小说入库" \$ M$ o( H7 T9 j( R& {& G+ d4 o) Q5 X
  245.         self.add_question(Bookname,Cater_Name,Book_author,Book_Introduction,Book_Synopsis,Book_Palabras,Bookurl,Booktitle,BookID,BookConte,Titleid,abover,Book_Date)   #这行可注译,数据库发布接口,方便其他系统的发布
    7 `& ~% c; u2 J/ Z: Y; S
  246.         self.add_comment(Bookname, Booktitle, BookID, Titleid, Book_Date)   #这行可注译,数据库发布接口,方便其他系统的发布- x6 @% b# x1 \/ [
  247.         #post提交发布
    3 O( T9 V! s+ `: w
  248.         self.add_locoy(Bookname,Cater_Name,Book_author,Book_Introduction,Book_Palabras,Book_img,Booktitle,BookConte,abover)  #这行可注译,火车头发布接口,不需要可取消0 b( y, Q, C4 ~/ f4 Y6 ~
  249.         Datos = {& ], S- N; i! ~, K' S1 V
  250.                   "Cater_Name":response.save['Cater_Name'],' i. g% v! S; P5 X5 M
  251.                    "Book_author":response.save['Book_author'],0 P/ c7 U# w8 j0 u. P6 y% k
  252.                    "Book_Introduction":response.save['Book_Introduction'],- v/ @* E# D" Q7 @: S( k
  253.                    "Book_Synopsis":response.save['Book_Synopsis'],3 r: c8 j1 n2 H! N
  254.                    "Book_Palabras":response.save['Book_Palabras'],
    3 A+ P- U4 N2 D1 O
  255.                    "img":response.save['img'],0 L9 i; A1 K  L. Q) p- m2 @
  256.                      }4 |+ ^6 Y7 Z* W- C. {( n
  257.         for each in response.doc('.articlebtn > a:nth-child(4)[href*="/xiaoshuo"]').items():
    - L+ y5 F+ C6 E, J, n4 g, r
  258.             self.crawl(each.attr.href, callback=self.detail_page,save=Datos)
    ' `% N" {. r3 T5 f( G5 ]
  259.         return {& g, L6 Y& _' v) C
  260.             "Cater_Name":Cater_Name,
    + S# S  y: S& O$ H2 ?) Z5 T) t
  261.             "Bookname":Bookname,
    ! R5 e+ T$ K) n6 b
  262.             "Book_author":Book_author,
    0 j, f+ l+ d5 t& p
  263.             "Book_Introduction":Book_Introduction,- }2 o6 X+ r0 ?2 F
  264.             "Book_Synopsis":Book_Synopsis,5 N+ O8 [9 a: t1 o0 l5 z
  265.             "Book_Palabras":Book_Palabras,# Y. |8 }7 j) v! [# p" |4 \3 e" K
  266.             "Book_img":Book_img,0 o$ l; L' S4 q0 a+ x) Y2 ~8 }+ b
  267.             "Bookurl": response.url,4 S) V  P0 i6 h* M
  268.             "Booktitle": Booktitle,
    ) J; ?8 C+ L7 p; E
  269.             "BookID": BookID,/ S3 B! k5 K% s6 q: K
  270.             "BookConte": BookConte,. H! ?* G( z3 C7 X) d( w( e' g- @0 O4 T
  271.             "Titleid": Titleid,8 |. r6 C* P* Y! q
  272.             "abover":abover,7 @" W% [* d0 s7 P
  273. #            "Book_Date" = str(datetime.datetime.now()),
    & v( A$ U7 V8 O- `% J: J, c1 [
  274.         }  O" D: V* J  o) H7 _
  275.     def download(self, P_dir, imgDir, file_name, Book_img):
    1 ^  i, z4 G, x* g8 L( @
  276.         if not os.path.exists(imgDir):
    . p& R* O$ b( J+ l- N
  277.             os.makedirs(imgDir)! w) q) v$ m5 P) _7 d) l, Q
  278.         file = imgDir + "/" + file_name; h6 S6 z0 p9 i, T( j0 W
  279. #        print file, P6 b' M7 K. x- s  N; C- Y
  280.         f = open(file, 'wb+')
    % E) X# |' `: O
  281.         imag = requests.get(Book_img) 0 B4 I6 U. n/ a8 t! [: k  x5 `
  282.         f.write(imag.content)0 ~4 R# y" P  e7 c
  283.         f.close()6 p- J5 U# F" y+ f( w
  284.         #保存图片前
    / ]* V; `4 I: ]: U7 s4 G* z
  285.     def save_imgs(self,response):
    8 K0 P% K3 t7 E$ O5 h3 t: M0 Q% B
  286.         content = response.content
    6 K9 w& E7 `: o7 U
  287.         file_name = response.save["file_name"]; o- _! c2 F% r1 M. v5 \
  288.         imgDir = response.save["imgDir"]
    3 {6 {' x, Y: W$ E5 H
  289.         file_path = imgDir + file_name5 q/ M% b) W, h4 D
  290.         self.save_img(content,imgDir,file_path)& d2 a& c4 J* G- K7 k4 Z& x
  291.     #保存图片
    & ?( `- F* d! \, }
  292.     def save_img(self,content,imgDir,path):0 i+ |" \( K+ q1 k3 e
  293.         if not os.path.exists(imgDir):                         0 C4 E' p7 b$ \3 Y! t; ?
  294.             os.makedirs(imgDir)
    8 u% j' @9 F4 P# z
  295.         f = open(path,"wb" )1 m- {' Q5 K8 Y; ?. P
  296.         f.write(content)0 D& n7 }5 _, t; \# H* m) [2 f
  297.         f.close()9 Y  p, D! b' z$ ]# K
  298.     #获取url后缀名% H* ~% W" D8 R
  299.     def getExtension(self,url):                            , O& k, R0 U0 B$ P3 _0 ~
  300.         extension = url.split(".")[-1]
    , X) y) \0 c. j, L
  301.         return extension # Y+ C4 o/ T; k3 q" ], r
  302.    
    ' ]/ H' [7 c  L2 f1 ^1 ?6 G6 z
  303.     #获取图片名, @4 l' {( W1 |) [  A
  304.     def getname(self,url):8 h4 I6 x! _2 L- m: Q7 d' R
  305.         name=url.split("/")[-1].split(".")[0]% f* [/ f' e6 v$ v- k7 Y
  306.         return name
复制代码
( a8 O# \$ r; g, H( z8 P+ N

. v. x3 b! P: ]0 P4 Y" B  G
您需要登录后才可以回帖 登录 | 注册

本版积分规则

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

GMT+8, 2025-11-26 10:34

Powered by Discuz! X3.5

© 2001-2025 Discuz! Team.

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