全球主机交流论坛

标题: 【python】放出杰奇后台全自动多线程采集,同步目标站最... [打印本页]

作者: jsenet    时间: 2015-9-12 10:46
标题: 【python】放出杰奇后台全自动多线程采集,同步目标站最...
本帖最后由 jsenet 于 2015-9-13 13:02 编辑

以前就弄好了,忘了放出来,懂的拿去用吧。
多线程采集,字数对比,目标站更新一版30秒内同步。

转载注明作者:vpskk.com(还未上线,嘿嘿)   

  1. #!coding=UTF-8
  2. import urllib
  3. import urllib2
  4. import commands
  5. import time
  6. import threading
  7. import os
  8. import re
  9. import sys

  10. thlen = 10
  11. #定义同时采集的线程数
  12. books = []
  13. #定义需要采集的书库
  14. tsk = []
  15. #定义采集线程数组
  16. bookdict = {}
  17. #定义已采集图书字典,key为目标站书号,value为字数


  18. domain = 'yoursite.domain.com'
  19. adminuser = 'admin'
  20. adminpass = '******'
  21. siteid = '23'
  22. # notaddnew = '0'

  23. frompage = 'http://all.17k.com/lib/book/2_0_0_0_0_0_2_0_1.html'



  24. def addbooklist():
  25.     while 1:
  26.         time.sleep(30)
  27.         print '[' + time.strftime('%H:%M:%S')  + '] 采集更新列表线程启动。'
  28.         start = time.time()
  29.         try:
  30.             response = urllib2.urlopen(frompage, timeout = 12)
  31.             content = response.read()
  32.         except:
  33.             continue
  34.         response.close()
  35.         elapsed = (time.time() - start)
  36.         bookattr = re.findall(r'<a class="jt" rel="/tip\.xhtml\?book\.id=([0-9]+)\&difference[^>]+>([^<]+)</a>*[\s\S]*?<td class="td5">([0-9]+)</td>',content,re.M)
  37.         print '[' + time.strftime('%H:%M:%S')  + '] 采集更新列表结束,用时:' + str(elapsed) + '秒'
  38.         for ii in range(len(bookattr)):
  39.             newbookid = bookattr[ii][0]
  40.             newbookname = bookattr[ii][1]
  41.             newbooksize = bookattr[ii][2]
  42.             inlist = False
  43.             for tt in range(len(books)):
  44.                 if (books[tt][0]==newbookid):
  45.                     inlist = True
  46.             if not inlist:
  47.             #书号不在待采集数组里
  48.                 if (newbookid in bookdict.keys()):
  49.                 #书号在已采集过的字典里(需要根据字数来判断是否有更新)
  50.                     if (int(newbooksize)>int(bookdict[newbookid])):
  51.                     #采集到书籍字数大于已采集字典里的字数(添加到待采集列表)
  52.                         books.append([newbookid,newbookname,newbooksize])
  53.                         print '书号:' + newbookid + '有更新,旧字数:'+ bookdict[newbookid] + ' 新字数:'+ newbooksize + '  添加到待采集列表。'
  54.                 else:
  55.                 #书号不在已采集过的字典里(添加到待采集列表)
  56.                     books.append([newbookid,newbookname,newbooksize])
  57.                     print '书号:' + newbookid + '最近未采集,添加到待采集列表。'
  58.         print '[' + time.strftime('%H:%M:%S')  + '] 采集更新列表线程完成,线程休眠。'


  59. def caiji(bookid,bookname,booksize):
  60.         print '正在采集 书号[' + bookid + '] 书名:' + bookname   
  61.         url = 'http://'+ domain + '/modules/article/admin/batchcollect.php?action=bcollect&siteid=' + siteid + '&batchids=' + bookid + '&jieqi_username=' + adminuser + '&jieqi_userpassword=' + adminpass
  62.         start = time.time()
  63.         page = urllib2.urlopen(url,timeout=3600)
  64.         data = page.read(8192)
  65.         while data:
  66.            data = page.read(8192)
  67.         page.close()
  68.         elapsed = (time.time() - start)
  69.         time.sleep(5) #采集完等5秒生成全书
  70.         print '书号[' + bookid + '] 书名:' + bookname + '字数:' + booksize + 'k 采集完成! 用时:' + str(elapsed) + '秒'
  71.         print '书号[' + bookid + '] 书名:' + bookname + '字数:' + booksize + 'k 添加到最近采集书目字典。'


  72. # 从网页获取要采集的文章ID和文章名字(首次)   
  73. start = time.time()
  74. response = urllib2.urlopen(frompage, timeout = 12)
  75. content = response.read()
  76. response.close()
  77. elapsed = (time.time() - start)
  78. getattr = re.findall(r'<a class="jt" rel="/tip\.xhtml\?book\.id=([0-9]+)\&difference[^>]+>([^<]+)</a>*[\s\S]*?<td class="td5">([0-9]+)</td>',content,re.M)
  79. #getsize = re.findall(r'<td class="td5">([0-9]+)</td>',content,re.M)
  80. print '首次获取要采集的文章共' + str(len(getattr)) +'篇,用时:' + str(elapsed) + '秒'
  81. books = books + getattr
  82. if (len(books)<3):
  83.     print('获取列表页失败,退出!')
  84.     exit()

  85. #启动书籍列表采集线程
  86. thaddbooklist = threading.Thread(target=addbooklist,name='taddbooklist')   
  87. thaddbooklist.start()
  88.    
  89. for x in range(thlen):
  90.     bookid = books[0][0]
  91.     bookname = books[0][1]
  92.     booksize = books[0][2]
  93.     tname = 't' + str(x)
  94.     th = threading.Thread(target=caiji,name=tname,args=(bookid,bookname,booksize))
  95.     th.start()
  96.     del books[0]
  97.     bookdict[bookid] = booksize
  98.     tsk.append(th)

  99. #检测空闲线程,当线程闲置时,若待采集列表不为空时,启用该线程进行采集
  100. while 1:
  101.     time.sleep(5)
  102.     for i in range(len(tsk)):
  103.         if not tsk[i].is_alive():
  104.             print tsk[i].name + '线程空闲'
  105.             if len(books) > 0:
  106.                 bookid = books[0][0]
  107.                 bookname = books[0][1]
  108.                 booksize = books[0][2]
  109.                 th = threading.Thread(target=caiji,name=tsk[i].name,args=(bookid,bookname,booksize))
  110.                 th.start()
  111.                 del books[0]
  112.                 bookdict[bookid] = booksize
  113.                 tsk[i] = th
复制代码



效果演示:同步17k,当然,我只采集VIP小说。后台挂着,只要17k有vip小说更新,则自动同步。
(, 下载次数: 11)
作者: 分享吧    时间: 2015-9-12 10:47
帮顶下,  虽然什么都看不懂,
作者: adochina    时间: 2015-9-12 10:50
很需要,但是要研究下怎么用
作者: jsenet    时间: 2015-9-12 10:51
配合后台采集规则。当然 这个py里的那个获取源站列表的正则要自己改下。
其他全自动了。
作者: lqtest    时间: 2015-9-12 10:52
谢谢楼主啊
作者: jsenet    时间: 2015-9-12 10:54
比crontab后台采集好处很多:
1.crontab你不能确定采集一次要多长时间,会重复采集造成章节出错。
2.多线程,速度远快于用crontab
3.字数比对,不用浪费时间去检测。
4.因为带了比对和多线程,采集间隔我设置是30秒检测,这样源站一旦更新,30秒内就能同步。

其他自己体会吧,这个是我自己小说站写的,放弃关关
作者: 天也就这么大    时间: 2015-9-12 10:55
提示: 作者被禁止或删除 内容自动屏蔽
作者: jsenet    时间: 2015-9-12 10:58
天也就这么大 发表于 2015-9-12 10:55
还是看不懂,用关关不是好很多吗

实测,采集效率比关关高的多。

当然还有个很重要的原因,用这个,则不需要windows,全linux做个小说站不是很酷炫吗?

windows用关关,我挺怕毒的
作者: 判官    时间: 2015-9-12 11:01
提示: 作者被禁止或删除 内容自动屏蔽
作者: jsenet    时间: 2015-9-12 11:01
补充运行输出:

[11:10:44] 采集更新列表线程启动。
[11:10:45] 采集更新列表结束,用时:0.368046998978秒
书号:1257715无更新,旧字数:508549 新字数:508549  忽略。
书号:437108无更新,旧字数:3070245 新字数:3070245  忽略。
书号:590918无更新,旧字数:3810696 新字数:3810696  忽略。
书号:620124无更新,旧字数:4076192 新字数:4076192  忽略。
书号:751367无更新,旧字数:483636 新字数:483636  忽略。
书号:1025286无更新,旧字数:1010276 新字数:1010276  忽略。
书号:1209867无更新,旧字数:402752 新字数:402752  忽略。
书号:1236313无更新,旧字数:412536 新字数:412536  忽略。
书号:1248996无更新,旧字数:624019 新字数:624019  忽略。
书号:1069691无更新,旧字数:632495 新字数:632495  忽略。
书号:1238897无更新,旧字数:1446324 新字数:1446324  忽略。
书号:450860无更新,旧字数:5390083 新字数:5390083  忽略。
书号:963814无更新,旧字数:2842104 新字数:2842104  忽略。
书号:1044983无更新,旧字数:862496 新字数:862496  忽略。
书号:1178582无更新,旧字数:1016061 新字数:1016061  忽略。
书号:1255119无更新,旧字数:616432 新字数:616432  忽略。
书号:864061无更新,旧字数:3370699 新字数:3370699  忽略。
书号:1274700无更新,旧字数:420318 新字数:420318  忽略。
书号:1023720无更新,旧字数:1166304 新字数:1166304  忽略。
书号:1294239无更新,旧字数:427892 新字数:427892  忽略。
书号:957915无更新,旧字数:2136523 新字数:2136523  忽略。
书号:1277060无更新,旧字数:402957 新字数:402957  忽略。
书号:1249950无更新,旧字数:474150 新字数:474150  忽略。
书号:1031064无更新,旧字数:1588539 新字数:1588539  忽略。
书号:1045140无更新,旧字数:420024 新字数:420024  忽略。
书号:1085231无更新,旧字数:1275791 新字数:1275791  忽略。
书号:1151002无更新,旧字数:591414 新字数:591414  忽略。
书号:947110无更新,旧字数:394048 新字数:394048  忽略。
书号:1027863无更新,旧字数:1080509 新字数:1080509  忽略。
书号:1190382无更新,旧字数:750707 新字数:750707  忽略。
[11:10:45] 采集更新列表线程完成,线程休眠。
t0线程空闲
t1线程空闲
t2线程空闲

作者: kvmgo    时间: 2015-9-12 11:03
技术贴,@欧阳小妖 不加精么

科普:  linux 装好php杰奇 用python自动入库  就不需要windows了
作者: lqtest    时间: 2015-9-12 11:08
球详细步骤。。。。。。。。。。。。。。。。。。。。。小白
作者: 天也就这么大    时间: 2015-9-12 11:10
提示: 作者被禁止或删除 内容自动屏蔽
作者: adochina    时间: 2015-9-12 11:10
再顶,感觉真的很有用,就是技术太高了点
作者: opear2008    时间: 2015-9-12 11:19
大神,求教程。。。。不太会弄,一直用关关,现在采17K还用的是你那个PHP外挂。
作者: jpk    时间: 2015-9-12 11:23
求详细教程,学习中
作者: a644326772    时间: 2015-9-12 11:27
这个怎么用 求详细教程
作者: cw723    时间: 2015-9-12 11:43
jsenet 发表于 2015-9-12 11:01
补充运行输出:

[11:10:44] 采集更新列表线程启动。

不支持混采是吧?

规则得手工写?
作者: jsenet    时间: 2015-9-12 12:40
opear2008 发表于 2015-9-12 11:19
大神,求教程。。。。不太会弄,一直用关关,现在采17K还用的是你那个PHP外挂。 ...

17k改版了 主要是列表页更新了,规则要更新下。我的vip外挂还是可以用的。
前段时间不能用是因为17k在弄cdn,节点有问题,现在我测试可以的。
作者: opear2008    时间: 2015-9-12 12:56
jsenet 发表于 2015-9-12 12:40
17k改版了 主要是列表页更新了,规则要更新下。我的vip外挂还是可以用的。
前段时间不能用是因为17k在弄c ...

嗯。我已经改完了。现在可以正常采了。
作者: 百毒不侵    时间: 2015-9-12 13:13
提示: 作者被禁止或删除 内容自动屏蔽
作者: a644326772    时间: 2015-9-12 13:19
jsenet 发表于 2015-9-12 12:40
17k改版了 主要是列表页更新了,规则要更新下。我的vip外挂还是可以用的。
前段时间不能用是因为17k在弄c ...

撸主 快放出来
作者: 今日说法    时间: 2015-9-12 17:39
撸主求小白教程。
作者: jpk    时间: 2015-9-12 17:48
求VIP外挂
作者: 藐视天地    时间: 2015-9-13 00:30
看起来好叼啊
作者: 大腿    时间: 2015-9-13 11:27
大神
Traceback (most recent call last):
  File "p.py", line 116, in <module>
    if not tsk.is_alive():
AttributeError: 'list' object has no attribute 'is_alive'
提示这个是怎么回事?怎么解决呢 求教
作者: xyhw    时间: 2015-9-13 11:37
高手啊,又学习了
作者: jsenet    时间: 2015-9-13 11:40
大腿 发表于 2015-9-13 11:27
大神
Traceback (most recent call last):
  File "p.py", line 116, in

python版本问题?

我版本是在python2.7测试的
作者: 大腿    时间: 2015-9-13 11:43
jsenet 发表于 2015-9-13 11:40
python版本问题?

我版本是在python2.7测试的

我的是2.6.6
另外这些参赛需要设置吗
thlen = 10
#定义同时采集的线程数
books = []
#定义需要采集的书库
tsk = []
#定义采集线程数组
bookdict = {}
#定义已采集图书字典,key为目标站书号,value为字数

作者: jsenet    时间: 2015-9-13 12:57
thlen自己设置  这个是定义线程个数

其他的不需要,那个是定义空数组
作者: jsenet    时间: 2015-9-13 13:01
大腿 发表于 2015-9-13 11:27
大神
Traceback (most recent call last):
  File "p.py", line 116, in

不好意思  论坛把
  1. [i]
复制代码
给变成斜体了...

tsk应为
  1. tsk[i]
复制代码

作者: jsenet    时间: 2015-9-13 13:03
大腿 发表于 2015-9-13 11:27
大神
Traceback (most recent call last):
  File "p.py", line 116, in

1楼已经更新格式。。。。  被论坛给变成斜体了。。。
作者: 大腿    时间: 2015-9-13 13:24
jsenet 发表于 2015-9-13 13:03
1楼已经更新格式。。。。  被论坛给变成斜体了。。。

多谢大神 ,
作者: jsenet    时间: 2015-9-13 13:32
siteid = '23'
这个是你采集规则的ID  杰奇后台和配置文件里看。
作者: hdwz    时间: 2015-9-13 13:36
提示: 作者被禁止或删除 内容自动屏蔽
作者: 东方星雨    时间: 2015-9-13 15:35
牛人啊
作者: wenguonideshou    时间: 2015-9-14 10:43
要搭配用 只有个脚本无从下手
作者: jsenet    时间: 2015-9-14 11:06
只要弄个后台规则就可以用了。。都到这里了还要啥搭配。。。。
作者: 一直在寻找    时间: 2015-9-14 13:39
如何改错
作者: mxonline    时间: 2015-9-16 00:54
多谢分享
作者: 破论坛早晚出事    时间: 2015-9-16 19:51
提示: 作者被禁止或删除 内容自动屏蔽
作者: 醉卧网络君莫笑    时间: 2015-9-16 20:28
好像很厉害的样子
作者: 啊花    时间: 2015-9-16 23:20
帮顶下
作者: 恢复自我    时间: 2015-9-16 23:32
这个没有17K的VIP也能采集??
作者: skyidea    时间: 2015-9-17 02:57
提示: 作者被禁止或删除 内容自动屏蔽




欢迎光临 全球主机交流论坛 (https://443502.xyz/) Powered by Discuz! X3.4