Skip to content

Navigation Menu

Sign in
Appearance settings

Search code, repositories, users, issues, pull requests...

Provide feedback

We read every piece of feedback, and take your input very seriously.

Saved searches

Use saved searches to filter your results more quickly

Sign up
Appearance settings

Commit b5879a0

Browse files
追新番爬取策略
1 parent 2dcd3c4 commit b5879a0

File tree

3 files changed

+72
-4
lines changed

3 files changed

+72
-4
lines changed

‎README.md‎

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -142,6 +142,8 @@ python /path/to/YYeTsBot/yyetsbot/bot.py
142142
- [x] 整理fix资源:初步完成
143143
- [x] 独立网站
144144
- [ ] test case...啊不想写
145+
- [ ] 独立网站网页优化
146+
- [ ] 爬取并同步[追新番](web/追新番爬取策略.md)
145147

146148
# 归档资源下载
147149

‎web/server.py‎

Lines changed: 6 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -26,6 +26,8 @@
2626
enable_pretty_logging()
2727

2828
mongo_host = os.getenv("mongo") or "localhost"
29+
if os.getenv("debug"):
30+
logging.basicConfig(level=logging.DEBUG)
2931

3032

3133
class Mongo:
@@ -119,7 +121,7 @@ def imprisonment(self, ip):
119121
def get_real_ip(self):
120122
x_real = self.tornado.request.headers.get("X-Real-IP")
121123
remote_ip = self.tornado.request.remote_ip
122-
logging.warning("X-Real-IP:%s, Remote-IP:%s", x_real, remote_ip)
124+
logging.debug("X-Real-IP:%s, Remote-IP:%s", x_real, remote_ip)
123125
return x_real or remote_ip
124126

125127

@@ -131,9 +133,9 @@ def get_resource_data(self):
131133
forbidden = False
132134
banner = AntiCrawler(self)
133135
if banner.execute():
134-
logging.info("%s@%s make you happy:-(", self.request.headers.get("user-agent"),
135-
self.request.headers.get("X-Real-IP")
136-
)
136+
logging.warning("%s@%s make you happy:-(", self.request.headers.get("user-agent"),
137+
self.request.headers.get("X-Real-IP")
138+
)
137139
data = {}
138140
forbidden = True
139141
else:

‎web/追新番爬取策略.md‎

Lines changed: 64 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,64 @@
1+
# 如何爬取并同步追新番
2+
3+
尽管人人影视已经倒下了,但是目前看来,追新番依旧在**正常更新熟肉**
4+
5+
本文档将描述如何爬取并同步追新番的大概思路
6+
7+
# 1. 现状分析
8+
9+
[追新番](http://www.zhuixinfan.com/main.php)是人人影视日剧组的别名,主要翻译日剧作品。
10+
11+
好消息是, 目前追新番的网站还能够正常访问,并且还在更新熟肉。
12+
13+
坏消息是,追新番开了JS质询,也就是俗称的CC检测。因此,常规的requests+beautiful soup是行不通的。 在这种情况下,唯一可行的爬虫方式是使用selenium
14+
15+
另外一个更好的消息是,追新番使用的是discuz,因此默认也支持rss订阅。rss链接如下:
16+
http://www.zhuixinfan.com/main.php?mod=rss&pid=1262
17+
18+
rss是结构化的XML数据,非常适合程序处理,因此直接使用feedparser就可以了。
19+
20+
另外一个问题是,不知道服务器原站在哪里。不过这个问题不大。
21+
22+
# 2. 爬取策略
23+
24+
在这种情况下,只需要指定pid,然后用 selenium 去访问,等待cc检测结束之后展示正常页面,把XML保存下来,交给feedparser就可以了
25+
26+
# 3. 合并策略
27+
28+
首先需要搞清楚的问题是,追新番的数据和人人影视的离线数据是什么时候出现了不同步? 鉴于《天国与地狱》是比较新的剧,推测日剧组大概只翻译了1000多部剧集。
29+
30+
不同步的现象分为两种:
31+
32+
* 新播出的剧集:人人影视数据库完全没有记录
33+
* 旧剧新集:已有的剧,新播出了SP或者下一季,这个时候离线数据库的信息也是不准确的
34+
35+
## 3.1 完整合并策略
36+
37+
这里不是很好搞。一个完整的合并策略是这样的:
38+
39+
1. 遍历追新番,从pid=1开始
40+
2. 获取追新番最新一集的名称,如EP02
41+
3. 去数据库里查看是否有这部剧、这集
42+
4. 如果没有,那么补充缺失的信息
43+
44+
想象很美好,但是一定会有问题。总是有一些电影之类的资源的
45+
46+
## 3.2 新剧追加策略
47+
48+
新剧就完全没这个问题了。只需要找到离线数据库中没有的剧集,就可以无脑添加了。可以手动操作
49+
50+
## 3.3 手动策略
51+
52+
指定pid,强制从追新番覆盖离线数据库。这是最简单的方式了,甚至可以通过跑cron完成。
53+
54+
# 4. 实现难点
55+
56+
* 需要配合 selenium,并且需要在selenium中感知到cc检测结束的时候。
57+
* 完整合并很复杂,不好实现
58+
59+
# 5. 建议
60+
61+
1. 目前追新番还活着,但是是否有被关闭的风险还无法得知
62+
2. 爬取代价比较大,可能会考虑使用手动策略,毕竟本站的主要目的之一也是离线归档而不是更新
63+
3. 我太懒了,手动更新太累了,除非有用户给我提issue否则我是不没有更新的想法的
64+
4. 如果能够联系到追新番的负责人,他们能够提供接口或者数据,那么就更容易了。

0 commit comments

Comments
(0)

AltStyle によって変換されたページ (->オリジナル) /