diff --git a/PixivSearch/dao/bangumi.py b/PixivSearch/dao/bangumi.py new file mode 100644 index 0000000..471f1c1 --- /dev/null +++ b/PixivSearch/dao/bangumi.py @@ -0,0 +1,61 @@ +import json +import os +import time + +import django +import requests +import threading +from bs4 import BeautifulSoup + +from PixivSearch.settings import logger + +os.environ.setdefault("DJANGO_SETTINGS_MODULE", "PixivSearch.settings") +django.setup() +from PixivSearch.model.config import mediaInfo, stat + +current_mediaInfo = mediaInfo(id=0, chn_name='null') +flag = True + + +class bangumi(threading.Thread): + begin = 0 + end = 0 + id = 0 + + def __init__(self, begin, end): + threading.Thread.__init__(self) + self.begin = begin + self.end = end + + def save(self): + req = requests.get("https://www.bilibili.com/bangumi/media/md%d" % self.id) + if (req.status_code == 200): + tag = BeautifulSoup(req.text, 'lxml') + script = tag.select("script")[3].text + json_str = script[script.index("=") + 1:script.index("function") - 2] + json_obj = json.loads(json_str) + stat_info = json_obj['mediaInfo']['stat'] + print(json_obj['mediaInfo']['chn_name']) + print(stat_info) + mediaInfo(id=self.id, chn_name=json_obj['mediaInfo']['chn_name']).save() + global current_mediaInfo + current_mediaInfo = mediaInfo.objects.get(pk=self.id) + stat(id=self.id, danmakus=int(stat_info['danmakus']), favorites=stat_info['favorites'], + views=stat_info['views']).save() + + def run(self) -> None: + self.go(self.begin, self.end) + + def get(self): + return current_mediaInfo + + def go(self, start, end): + for num in range(start, end): + if (flag): + time.sleep(1) + logger.info("爬虫进度:%d" % num) + self.id = num + self.save() + else: + logger.info("停止爬虫") + break diff --git a/PixivSearch/model/config.py b/PixivSearch/model/config.py new file mode 100644 index 0000000..2b8e7b0 --- /dev/null +++ b/PixivSearch/model/config.py @@ -0,0 +1,44 @@ +from django.db import models +import json + + +class param(models.Model): + param_name = models.CharField(max_length=10, primary_key=True) + param_value = models.CharField(max_length=128) + + +class stat(models.Model): + id = models.IntegerField(primary_key=True) + danmakus = models.IntegerField() + favorites = models.IntegerField() + views = models.IntegerField() + + # def json(self): + # return bangumi_stat(self['danmakus'],self['favorites'],self['views']) + + +class mediaInfo(models.Model): + id = models.IntegerField(primary_key=True) + chn_name = models.CharField(max_length=128) + + def __str__(self) -> str: + i = {} + i['media_id'] = self.id + i['chn_name'] = self.chn_name + return i + + +class bangumi_list(models.Model): + season_id = models.IntegerField(primary_key=True) + badge = models.CharField(max_length=128) + brief = models.CharField(max_length=128) + copyright = models.CharField(max_length=128) + cover = models.CharField(max_length=128) + favorites = models.IntegerField() + is_finish = models.IntegerField() + newest_ep_index = models.IntegerField() + pub_time = models.DateTimeField() + season_status = models.IntegerField() + title = models.CharField(max_length=128) + total_count = models.IntegerField() + trailer_aid = models.IntegerField() diff --git a/PixivSearch/module/__init__.py b/PixivSearch/module/__init__.py deleted file mode 100644 index e69de29..0000000 diff --git a/PixivSearch/module/config.py b/PixivSearch/module/config.py deleted file mode 100644 index 2eb0653..0000000 --- a/PixivSearch/module/config.py +++ /dev/null @@ -1,5 +0,0 @@ -from django.db import models - -class param(models.Model): - param_name = models.CharField(max_length=10,primary_key=True) - param_value = models.CharField(max_length=128) diff --git a/PixivSearch/pixiv.py b/PixivSearch/pixiv.py index 4a11cd5..1e3822d 100644 --- a/PixivSearch/pixiv.py +++ b/PixivSearch/pixiv.py @@ -11,6 +11,8 @@ import os import zipfile import logging.config +from PixivSearch.model import config + headers = { 'X-Requested-With': 'XMLHttpRequest', 'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) ' @@ -24,7 +26,7 @@ logger = logging.getLogger('file') def get_cookies(): _cookies = {} - array = "p_ab_id=5; p_ab_id_2=9; login_ever=yes; device_token=c8c37fdf24b917b4e7fb191fe11c5ca5; search_tools_toggle=1; _ga=GA1.2.887334537.1498628532; PHPSESSID=25745470_75a76e86ff3145b53e21b440183b4822; a_type=0; is_sensei_service_user=1; module_orders_mypage=%5B%7B%22name%22%3A%22recommended_illusts%22%2C%22visible%22%3Atrue%7D%2C%7B%22name%22%3A%22everyone_new_illusts%22%2C%22visible%22%3Atrue%7D%2C%7B%22name%22%3A%22following_new_illusts%22%2C%22visible%22%3Atrue%7D%2C%7B%22name%22%3A%22mypixiv_new_illusts%22%2C%22visible%22%3Atrue%7D%2C%7B%22name%22%3A%22fanbox%22%2C%22visible%22%3Atrue%7D%2C%7B%22name%22%3A%22featured_tags%22%2C%22visible%22%3Atrue%7D%2C%7B%22name%22%3A%22contests%22%2C%22visible%22%3Atrue%7D%2C%7B%22name%22%3A%22sensei_courses%22%2C%22visible%22%3Atrue%7D%2C%7B%22name%22%3A%22spotlight%22%2C%22visible%22%3Atrue%7D%2C%7B%22name%22%3A%22booth_follow_items%22%2C%22visible%22%3Atrue%7D%5D; __utmt=1; __utma=235335808.887334537.1498628532.1498720739.1498819600.5; __utmb=235335808.1.10.1498819600; __utmc=235335808; __utmz=235335808.1498713152.2.2.utmcsr=baidu|utmccn=(organic)|utmcmd=organic; __utmv=235335808.|2=login%20ever=yes=1^3=plan=normal=1^5=gender=male=1^6=user_id=25745470=1^9=p_ab_id=5=1^10=p_ab_id_2=9=1^11=lang=zh_tw=1".split(';') + array = config.param.objects.get(param_name='pixiv_cookie').param_value.split(';') for row in array: k, v = row.strip().split('=', 1) _cookies[k] = v diff --git a/PixivSearch/settings.py b/PixivSearch/settings.py index 8dc8ad5..928f83d 100644 --- a/PixivSearch/settings.py +++ b/PixivSearch/settings.py @@ -9,7 +9,7 @@ https://docs.djangoproject.com/en/1.11/topics/settings/ For the full list of settings and their values, see https://docs.djangoproject.com/en/1.11/ref/settings/ """ - +import logging.config import os # Build paths inside the project like this: os.path.join(BASE_DIR, ...) @@ -37,7 +37,7 @@ INSTALLED_APPS = [ 'django.contrib.sessions', 'django.contrib.messages', 'django.contrib.staticfiles', - 'PixivSearch.module', + 'PixivSearch.model' ] MIDDLEWARE = [ @@ -122,3 +122,8 @@ STATIC_URL = '/static/' STATICFILES_DIRS = [ os.path.join(os.path.dirname(__file__), 'static').replace('\\', '/'), ] + +curr_dir = os.path.dirname(os.path.realpath(__file__)) +logging.config.fileConfig('%s%slogging.conf' % (curr_dir,os.sep)) +logger = logging.getLogger('file') + diff --git a/PixivSearch/templates/addConfig.html b/PixivSearch/templates/addConfig.html new file mode 100644 index 0000000..63d9962 --- /dev/null +++ b/PixivSearch/templates/addConfig.html @@ -0,0 +1,27 @@ + +
+ +{{tip}}
- {% endfor %} - -{{tip}}
+ {% endfor %} + +