book.py 14 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225
  1. # -*- coding: utf-8 -*-
  2. from content_spider.baseSpider import baseSpider
  3. from content_spider.baseSpider import fixBookInfoSpider
  4. from content_spider.Util import get_category_by_name
  5. import json
  6. import time
  7. category = [{'id': 19, 'name': '斗气升级', 'channel_id': 1, 'category_id': 23, 'category_name': '玄幻奇幻'},
  8. {'id': 20, 'name': '元素魔法', 'channel_id': 1, 'category_id': 23, 'category_name': '玄幻奇幻'},
  9. {'id': 21, 'name': '血族僵尸', 'channel_id': 1, 'category_id': 23, 'category_name': '玄幻奇幻'},
  10. {'id': 22, 'name': '东方玄幻', 'channel_id': 1, 'category_id': 23, 'category_name': '玄幻奇幻'},
  11. {'id': 23, 'name': '西方奇幻', 'channel_id': 1, 'category_id': 23, 'category_name': '玄幻奇幻'},
  12. {'id': 24, 'name': '异世大陆', 'channel_id': 1, 'category_id': 23, 'category_name': '玄幻奇幻'},
  13. {'id': 101, 'name': '异界征战', 'channel_id': 1, 'category_id': 23, 'category_name': '玄幻奇幻'},
  14. {'id': 26, 'name': '传统武侠', 'channel_id': 1, 'category_id': 21, 'category_name': '武侠仙侠'},
  15. {'id': 27, 'name': '古典仙 侠', 'channel_id': 1, 'category_id': 21, 'category_name': '武侠仙侠'},
  16. {'id': 29, 'name': '现代修真', 'channel_id': 1, 'category_id': 21, 'category_name': '武侠仙侠'},
  17. {'id': 30, 'name': '洪荒封神', 'channel_id': 1, 'category_id': 21, 'category_name': '武侠仙侠'},
  18. {'id': 14, 'name': '异术超能', 'channel_id': 1, 'category_id': 54, 'category_name': '都市爱情'},
  19. {'id': 15, 'name': '都市生活', 'channel_id': 1, 'category_id': 54, 'category_name': '都市爱情'},
  20. {'id': 16, 'name': '黑白两道', 'channel_id': 1, 'category_id': 54, 'category_name': '都市爱情'},
  21. {'id': 17, 'name': '官场商战', 'channel_id': 1, 'category_id': 54, 'category_name': '都市爱情'},
  22. {'id': 18, 'name': '青春校园', 'channel_id': 1, 'category_id': 54, 'category_name': '都市爱情'},
  23. {'id': 31, 'name': '架空历史', 'channel_id': 1, 'category_id': 51, 'category_name': '特种军旅'},
  24. {'id': 32, 'name': '军旅战争', 'channel_id': 1, 'category_id': 51, 'category_name': '特种军旅'},
  25. {'id': 102, 'name': '抗战烽火', 'channel_id': 1, 'category_id': 51, 'category_name': '特种 军旅'},
  26. {'id': 5, 'name': '侦探推理', 'channel_id': 1, 'category_id': 22, 'category_name': '西方玄幻'},
  27. {'id': 38, 'name': '灵异惊悚', 'channel_id': 1, 'category_id': 22, 'category_name': '西方玄幻'},
  28. {'id': 103, 'name': '未来世界', 'channel_id': 1, 'category_id': 22, 'category_name': '西方玄幻'},
  29. {'id': 104, 'name': '古武机甲', 'channel_id': 1, 'category_id': 22, 'category_name': '西方玄幻'},
  30. {'id': 105, 'name': '星际时空', 'channel_id': 1, 'category_id': 22, 'category_name': '西方玄幻'},
  31. {'id': 25, 'name': '游戏异界', 'channel_id': 1, 'category_id': 19, 'category_name': '游戏竞技'},
  32. {'id': 34, 'name': '虚拟网游', 'channel_id': 1, 'category_id': 19, 'category_name': '游戏竞技'},
  33. {'id': 35, 'name': '电子竞技', 'channel_id': 1, 'category_id': 19, 'category_name': '游戏竞技'},
  34. {'id': 36, 'name': '体育竞技', 'channel_id': 1, 'category_id': 19, 'category_name': '游戏竞技'},
  35. {'id': 1000, 'name': '名人传记', 'channel_id': 1, 'category_id': 127, 'category_name': '其他作品'},
  36. {'id': 1002, 'name': '经典名著', 'channel_id': 1, 'category_id': 127, 'category_name': '其他作品'},
  37. {'id': 1004, 'name': '传统文化', 'channel_id': 1, 'category_id': 127, 'category_name': '其他作品'},
  38. {'id': 1006, 'name': '人际社交', 'channel_id': 1, 'category_id': 127, 'category_name': '其他作品'},
  39. {'id': 2001, 'name': '科幻未来', 'channel_id': 1, 'category_id': 127, 'category_name': '其他作品'},
  40. {'id': 2002, 'name': '衍生同人', 'channel_id': 1, 'category_id': 127, 'category_name': '其他作品'},
  41. {'id': 2003, 'name': '古风穿越', 'channel_id': 1, 'category_id': 127, 'category_name': '其他作品'},
  42. {'id': 2004, 'name': '魔幻 奇幻', 'channel_id': 1, 'category_id': 127, 'category_name': '其他作品'},
  43. {'id': 2005, 'name': '游戏竞技', 'channel_id': 1, 'category_id': 127, 'category_name': '其他作品'},
  44. {'id': 2006, 'name': '悬疑烧脑', 'channel_id': 1, 'category_id': 127, 'category_name': '其他作品'},
  45. {'id': 2007, 'name': '都市幻想', 'channel_id': 1, 'category_id': 127, 'category_name': '其他作品'},
  46. {'id': 2008, 'name': '神秘灵异', 'channel_id': 1, 'category_id': 127, 'category_name': '其他作品'},
  47. {'id': 2009, 'name': '青春校园', 'channel_id': 1, 'category_id': 127, 'category_name': '其他作品'},
  48. {'id': 2010, 'name': '武侠仙侠', 'channel_id': 1, 'category_id': 127, 'category_name': '其他作品'},
  49. {'id': 2020, 'name': '历史军事', 'channel_id': 1, 'category_id': 127, 'category_name': '其他作品'},
  50. {'id': 48, 'name': '总裁豪门', 'channel_id': 2, 'category_id': 98, 'category_name': '婚恋情感'},
  51. {'id': 49, 'name': '职场白领', 'channel_id': 2, 'category_id': 98, 'category_name': '婚恋情感'},
  52. {'id': 50, 'name': '浪漫言情', 'channel_id': 2, 'category_id': 98, 'category_name': '婚恋情感'},
  53. {'id': 51, 'name': '婚姻家庭', 'channel_id': 2, 'category_id': 98, 'category_name': '婚恋情感'},
  54. {'id': 53, 'name': '情感纪实', 'channel_id': 2, 'category_id': 98, 'category_name': '婚恋情感'},
  55. {'id': 81, 'name': '军婚高干', 'channel_id': 2, 'category_id': 98, 'category_name': '婚恋情感'},
  56. {'id': 55, 'name': '花季雨季', 'channel_id': 2, 'category_id': 104, 'category_name': '青春校园'},
  57. {'id': 56, 'name': '成长励志', 'channel_id': 2, 'category_id': 104, 'category_name': '青春校园'},
  58. {'id': 57, 'name': '青春伤痛', 'channel_id': 2, 'category_id': 104, 'category_name': '青春校园'},
  59. {'id': 58, 'name': '校园生活', 'channel_id': 2, 'category_id': 104, 'category_name': '青春校园'},
  60. {'id': 59, 'name': '女尊天下', 'channel_id': 2, 'category_id': 123, 'category_name': '女尊王朝'},
  61. {'id': 60, 'name': '宫闱情仇', 'channel_id': 2, 'category_id': 120, 'category_name': '宫斗宅斗'},
  62. {'id': 61, 'name': '异国浪漫', 'channel_id': 2, 'category_id': 83, 'category_name': '穿越重生'},
  63. {'id': 62, 'name': '宅门世家', 'channel_id': 2, 'category_id': 120, 'category_name': '宫斗宅斗'},
  64. {'id': 80, 'name': '穿越言情', 'channel_id': 2, 'category_id': 83, 'category_name': '穿越重生'},
  65. {'id': 63, 'name': '仙侣情缘', 'channel_id': 2, 'category_id': 96, 'category_name': '东方玄幻'},
  66. {'id': 64, 'name': '妖精幻情', 'channel_id': 2, 'category_id': 96, 'category_name': '东方玄幻'},
  67. {'id': 65, 'name': '奇幻柔情', 'channel_id': 2, 'category_id': 96, 'category_name': '东方玄幻'},
  68. {'id': 66, 'name': '魔法异能', 'channel_id': 2, 'category_id': 96, 'category_name': '东方玄幻'},
  69. {'id': 67, 'name': ' 重生爱恋', 'channel_id': 2, 'category_id': 96, 'category_name': '东方玄幻'},
  70. {'id': 68, 'name': '反穿时空', 'channel_id': 2, 'category_id': 83, 'category_name': '穿越重生'},
  71. {'id': 69, 'name': '古代王朝', 'channel_id': 2, 'category_id': 83, 'category_name': '穿越重生'},
  72. {'id': 70, 'name': '架空历史', 'channel_id': 2, 'category_id': 83, 'category_name': '穿越重生'},
  73. {'id': 71, 'name': '前世今生', 'channel_id': 2, 'category_id': 83, 'category_name': '穿越重 生'},
  74. {'id': 120, 'name': '文艺', 'channel_id': 2, 'category_id': 83, 'category_name': '穿越重生'},
  75. {'id': 72, 'name': '科幻小说', 'channel_id': 2, 'category_id': 119, 'category_name': '游戏'},
  76. {'id': 73, 'name': '网游小说', 'channel_id': 2, 'category_id': 119, 'category_name': '游戏'},
  77. {'id': 74, 'name': '灵异恐怖', 'channel_id': 2, 'category_id': 119, 'category_name': '游戏'},
  78. {'id': 75, 'name': '推理小说', 'channel_id': 2, 'category_id': 119, 'category_name': '游戏'},
  79. {'id': 76, 'name': '纯爱浪漫', 'channel_id': 2, 'category_id': 106, 'category_name': '耽美同人'},
  80. {'id': 77, 'name': '耽美', 'channel_id': 2, 'category_id': 106, 'category_name': '耽美同人'},
  81. {'id': 78, 'name': '同人', 'channel_id': 2, 'category_id': 106, 'category_name': '耽美同人'},
  82. {'id': 79, 'name': '百合', 'channel_id': 2, 'category_id': 106, 'category_name': '耽美同人'},
  83. {'id': 1001, 'name': '名人传记', 'channel_id': 2, 'category_id': 107, 'category_name': '其他'},
  84. {'id': 1003, 'name': '经典名著', 'channel_id': 2, 'category_id': 107, 'category_name': '其他'},
  85. {'id': 1005, 'name': '传统文化', 'channel_id': 2, 'category_id': 107, 'category_name': '其他'},
  86. {'id': 1007, 'name': '人际社交', 'channel_id': 2, 'category_id': 107, 'category_name': '其他'},
  87. {'id': 2012, 'name': '衍 生言情', 'channel_id': 2, 'category_id': 103, 'category_name': '青春纯爱'},
  88. {'id': 2013, 'name': '衍生纯爱', 'channel_id': 2, 'category_id': 103, 'category_name': '青春纯爱'},
  89. {'id': 2014, 'name': '武侠仙侠', 'channel_id': 2, 'category_id': 96, 'category_name': '东方玄幻'},
  90. {'id': 2015, 'name': '古风历史', 'channel_id': 2, 'category_id': 107, 'category_name': '其他'},
  91. {'id': 2016, 'name': '青春恋爱', 'channel_id': 2, 'category_id': 103, 'category_name': ' 青春纯爱'},
  92. {'id': 2017, 'name': '脑洞幻想', 'channel_id': 2, 'category_id': 107, 'category_name': '其他'},
  93. {'id': 2018, 'name': '游戏悬疑', 'channel_id': 2, 'category_id': 119, 'category_name': '游戏'}]
  94. class BookSpider(baseSpider):
  95. name = 'kanshu'
  96. allowed_domains = ['hezuo.lunjian.com']
  97. source = 'zy_kanshu'
  98. source_name = '看书'
  99. source_id = 19
  100. base_url = 'http://hezuo.lunjian.com/open/ksbook/{}?channel_id=10054'
  101. custom_settings = {
  102. 'DOWNLOAD_DELAY': 0.01,
  103. 'SOURCE': source,
  104. 'LOG_FILE': 'content_spider/log/' + name + time.strftime("%Y-%m-%d", time.localtime()) + '.log'
  105. }
  106. def get_start_url(self):
  107. return self.base_url.format('bookLists')
  108. def bid_list_result(self, response):
  109. result = json.loads(response.text)
  110. if result is None:
  111. return []
  112. result_list = []
  113. for item in result['data']:
  114. result_list.append({'id': item['id']})
  115. return result_list
  116. def get_book_info_url(self, bid):
  117. return self.base_url.format('BookDetail') + '&bookid={}'.format(bid)
  118. def book_info_result(self, response):
  119. result = json.loads(response.text)
  120. if result is None or result.get('data') is None:
  121. return None
  122. result = result['data']
  123. category_info = get_category_by_name(result['category'])
  124. category_id = 0
  125. if category_info is not None:
  126. category_id = category_info['id']
  127. return {
  128. 'bid': result['id'], 'name': result['bookTitle'], 'author': result['author'],
  129. 'intro': result['introduction'], 'cover': result['cover'], 'keyword': result['labels'],
  130. 'status': result['state'], 'category': result['category'],'category_id':category_id,
  131. 'channel': result['channelId']
  132. }
  133. def get_chapter_list_url(self, bid):
  134. return self.base_url.format('ChapterLists') + '&bookid={}'.format(bid)
  135. def chapter_list_result(self, response):
  136. result = json.loads(response.text)
  137. if result is None or result.get('data') is None:
  138. return []
  139. result_list = []
  140. i = 0
  141. for chapter_item in result['data']:
  142. i = i+1
  143. result_list.append({
  144. 'source_chapter_id': chapter_item['id'], 'name': chapter_item['title'],
  145. 'sequence': i, 'is_vip': 1 if chapter_item['isVip'] else 0,
  146. 'size': 0, 'recent_update_at': chapter_item['lastUpdateTime']
  147. })
  148. return result_list
  149. def get_chapter_content_url(self, bid, cid):
  150. return self.base_url.format('ChapterContent') + '&bookid={}&chapterid={}'.format(bid, cid)
  151. def chapter_content_result(self, response):
  152. result = json.loads(response.text)
  153. if result is None:
  154. return {'content': ''}
  155. return {
  156. 'content': result['data']['content'],
  157. 'size': len(result['data']['content'])
  158. }
  159. class BookInfoFixSpider(fixBookInfoSpider):
  160. name = 'kanshubookinfofix'
  161. allowed_domains = ['hezuo.lunjian.com']
  162. source = 'zy_kanshu'
  163. source_name = '看书'
  164. source_id = 19
  165. base_url = 'http://hezuo.lunjian.com/open/ksbook/{}?channel_id=10054'
  166. custom_settings = {
  167. 'DOWNLOAD_DELAY': 0.01,
  168. 'SOURCE': source,
  169. 'LOG_FILE': 'content_spider/log/' + name + time.strftime("%Y-%m-%d", time.localtime()) + '.log'
  170. }
  171. def get_start_url(self):
  172. return self.base_url.format('bookLists')
  173. def bid_list_result(self, response):
  174. result = json.loads(response.text)
  175. if result is None:
  176. return []
  177. result_list = []
  178. for item in result['data']:
  179. result_list.append({'id': item['id']})
  180. return result_list
  181. def get_book_info_url(self, bid):
  182. return self.base_url.format('BookDetail') + '&bookid={}'.format(bid)
  183. def book_info_result(self, response):
  184. result = json.loads(response.text)
  185. if result is None or result.get('data') is None:
  186. return None
  187. result = result['data']
  188. category_info = get_category_by_name(result['category'])
  189. category_id = 0
  190. if category_info is not None:
  191. category_id = category_info['id']
  192. return {
  193. 'bid': result['id'], 'name': result['bookTitle'], 'author': result['author'],
  194. 'intro': result['introduction'], 'cover': result['cover'], 'keyword': result['labels'],
  195. 'status': result['state'], 'category': result['category'],'category_id':category_id,
  196. 'channel': result['channelId']
  197. }