全球主机交流论坛

 找回密码
 注册

QQ登录

只需一步,快速开始

IP归属甄别会员请立即修改密码
查看: 4739|回复: 19
打印 上一主题 下一主题

Smart需要的知轩藏书Python + pyspider爬虫,源码放出

[复制链接]
跳转到指定楼层
1#
发表于 2019-4-28 07:46:35 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
本帖最后由 lovees 于 2019-4-28 22:34 编辑

Smart需要的知轩藏书的爬虫,源码放出
依旧是Python + pyspider ,因为pyspider框架可以WEB进行管理,方便管理,只要把代码复制进去运行就可
博客中文章地址:http://www.sxsay.com/872.html
  1. #!/usr/bin/env python
  2. # -*- encoding: utf-8 -*-
  3. # Created on 2019-04-28 1:24:37
  4. # Project: Zxcs

  5. from pyspider.libs.base_handler import *
  6. import re
  7. import os
  8. import codecs
  9. import sys
  10. import urllib2,HTMLParser,re

  11. class Handler(BaseHandler):
  12.     global Datos
  13.     Datos = {}
  14.     global P_dir
  15.     #小说下载保存路径
  16.     P_dir = '/Home/Book'
  17.     headers= {
  18.     'Accept':'text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,*/*;q=0.8',
  19.     'Accept-Encoding':'gzip, deflate, sdch',
  20.     'Accept-Language':'zh-CN,zh;q=0.8',
  21.     'Cache-Control':'max-age=0',
  22.     'Connection':'keep-alive',
  23.     'User-Agent':'Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/41.0.2272.101 Safari/537.36'
  24.     }
  25.     crawl_config = {
  26.         'headers' : headers,
  27.         'timeout' : 300
  28.     }
  29.     crawl_config = {
  30.     }
  31.     def __init__(self):
  32.         #网址请自行修改
  33.         self.base_url1 = 'http://***.me/sort/'
  34.         self.base_url2 = 'page/'
  35.         self.CaterId = []
  36.         self.CaterIds = ['23', '25', '26', '27', '28', '29', '36', '37', '38', '39', '40', '41', '42', '43', '44', '45', '55']
  37.         self.page_num = 1
  38.         self.total_num = 5  

  39.     @every(minutes=24 * 60)
  40.     def on_start(self):
  41.         global Cater_Name
  42.         #自定义一下分类的名称(习惯了,因为自己入库时候需要用到)
  43.         Cater_Name = []
  44.         while self.page_num <= self.total_num:
  45.             for self.CaterId in self.CaterIds:
  46.                 if self.CaterId  == '26':
  47.                      Cater_Name = '玄幻'
  48.                 if self.CaterId  == '38':
  49.                      Cater_Name = '玄幻'
  50.                 if self.CaterId  == '39':
  51.                      Cater_Name = '玄幻'
  52.                 if self.CaterId  == '25':
  53.                      Cater_Name = '武侠'
  54.                 if self.CaterId  == '36':
  55.                     Cater_Name = '武侠'
  56.                 if self.CaterId  == '37':
  57.                     Cater_Name = '武侠'
  58.                 if self.CaterId  == '28':
  59.                     Cater_Name = '历史'
  60.                 if self.CaterId  == '42':
  61.                     Cater_Name = '历史'
  62.                 if self.CaterId  == '43':
  63.                     Cater_Name = '历史'
  64.                 if self.CaterId  == '23':
  65.                     Cater_Name = '都市'
  66.                 if self.CaterId  == '27':
  67.                     Cater_Name = '科幻'
  68.                 if self.CaterId  == '40':
  69.                     Cater_Name = '科幻'
  70.                 if self.CaterId  == '41':
  71.                     Cater_Name = '科幻'
  72.                 if self.CaterId  == '29':
  73.                     Cater_Name = '游戏'
  74.                 if self.CaterId  == '44':
  75.                     Cater_Name = '游戏'
  76.                 if self.CaterId  == '45':
  77.                     Cater_Name = '游戏'
  78.                 if self.CaterId  == '55':
  79.                     Cater_Name = '都市'
  80.                 print self.CaterId
  81.                 url = self.base_url1 + str(self.CaterId) + self.base_url2 + str(self.page_num) + "/"         
  82.                 self.crawl(url, callback=self.index_page,save=Cater_Name)
  83.             self.page_num += 1

  84.     @config(age=10 * 24 * 60 * 60)
  85.     def index_page(self, response):
  86.         for each in response.doc('#plist dd > div > a[href^="http"]').items():
  87.             self.crawl(each.attr.href, callback=self.domain_page)
  88.     def domain_page(self, response):
  89.         for each in response.doc('div[class="filecont"] a[href^="http"]').items():
  90.             Down = each.attr.href
  91.             Name = response.doc('.filetit > a').text()
  92.             self.crawl(each.attr.href, callback=self.detail_page)
  93.     @config(priority=2)
  94.     def detail_page(self, response):
  95.         file_name = response.doc('h2').text()
  96.         for each in response.doc('.panel-body a[href^="http"]').items():
  97.             Down = each.attr.href
  98.             if(self.download(P_dir,file_name,Down)):
  99.                 print('attachment url is ' + Down)
  100.             return {
  101.             "url": response.url,
  102.             "title": response.doc('title').text(),
  103.             "Down": Down,
  104.             "file_name":response.doc('h2').text(),
  105.         }
  106.     #文件下载   
  107.     def download(self, P_dir, file_name, Down):
  108.         file = P_dir + "/" + file_name + ".rar"
  109.         f = open(file, "wb+")
  110.         print f
  111.         response = urllib2.urlopen(Down)
  112.         f.write(response.read())
  113.         f.close()
复制代码

有空再放出入库源码和POST提交源码,方便对接比如火车头之类的发布接口
@Smart
2#
发表于 2019-4-28 09:38:25 | 只看该作者
您的请求带有不合法参数,已被网站管理员设置拦截!

可能原因:

    您提交的内容包含危险的攻击请求
3#
发表于 2019-4-28 09:46:45 | 只看该作者
知轩藏书网站这个是wordpress做的啊。
4#
发表于 2019-4-28 11:22:53 来自手机 | 只看该作者
感谢,还在整那个pyspider框架,老是安装出错
5#
发表于 2019-4-28 12:33:55 | 只看该作者
dengwen168 发表于 2019-4-28 09:46
知轩藏书网站这个是wordpress做的啊。

emlog吧
cherbim 该用户已被删除
6#
发表于 2019-4-28 13:53:44 | 只看该作者
提示: 作者被禁止或删除 内容自动屏蔽
cherbim 该用户已被删除
7#
发表于 2019-4-28 17:53:22 | 只看该作者
提示: 作者被禁止或删除 内容自动屏蔽
8#
发表于 2019-4-28 17:57:01 | 只看该作者
本帖最后由 Smart 于 2019-4-28 17:58 编辑
cherbim 发表于 2019-4-28 17:53
代码倒数第二行f.write(Down),这一步是不是错了。down是下载链接啊,这不相当于只把链接写进去,应该改为f ...


好像是错的,我用2.7下载的全是4kb的文件
9#
 楼主| 发表于 2019-4-28 22:36:24 | 只看该作者
cherbim 发表于 2019-4-28 17:53
代码倒数第二行f.write(Down),这一步是不是错了。down是下载链接啊,这不相当于只把链接写进去,应该改为f ...

抱歉,这是我昨天晚上00:55回到家后01:05左右花了20分钟写好的,没经过严谨的测试就发了,现已修复,感谢!!!
10#
 楼主| 发表于 2019-4-28 22:38:56 | 只看该作者
Smart 发表于 2019-4-28 17:57
好像是错的,我用2.7下载的全是4kb的文件

抱歉,这是我昨天晚上00:55回到家后01:05左右花了20分钟写好的,没经过严谨的测试就发了,现已修复,感谢!!!!!!!
您需要登录后才可以回帖 登录 | 注册

本版积分规则

Archiver|手机版|小黑屋|全球主机交流论坛

GMT+8, 2026-1-15 00:25 , Processed in 0.061539 second(s), 11 queries , Gzip On, MemCache On.

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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