From a2fb937b8fe8864ab8437b3f9a5b8a95ea4d48ad Mon Sep 17 00:00:00 2001 From: oscar Date: Wed, 23 Oct 2024 08:27:29 +0800 Subject: [PATCH] add crawling files. --- scripts/aabook_list.py | 119 ++++ scripts/config.py | 31 + scripts/get_aabook.py | 210 +++++++ scripts/get_aabook_list.py | 363 +++++++++++ scripts/get_javdb.py | 132 ++++ scripts/get_u9a9.py | 117 ++++ scripts/javdb/CWPBD_all.txt | 161 +++++ scripts/javdb/DRGBD_all.txt | 23 + scripts/javdb/DSAMBD_all.txt | 39 ++ scripts/javdb/LAFBD_all.txt | 87 +++ scripts/javdb/MKBD_all.txt | 173 +++++ scripts/javdb/S2MBD_all.txt | 279 +++++++++ scripts/javdb/SKYHD_all.txt | 173 +++++ scripts/javdb/SMBD_all.txt | 220 +++++++ scripts/javdb/all.txt | 1148 ++++++++++++++++++++++++++++++++++ 15 files changed, 3275 insertions(+) create mode 100644 scripts/aabook_list.py create mode 100644 scripts/config.py create mode 100644 scripts/get_aabook.py create mode 100644 scripts/get_aabook_list.py create mode 100644 scripts/get_javdb.py create mode 100644 scripts/get_u9a9.py create mode 100644 scripts/javdb/CWPBD_all.txt create mode 100644 scripts/javdb/DRGBD_all.txt create mode 100644 scripts/javdb/DSAMBD_all.txt create mode 100644 scripts/javdb/LAFBD_all.txt create mode 100644 scripts/javdb/MKBD_all.txt create mode 100644 scripts/javdb/S2MBD_all.txt create mode 100644 scripts/javdb/SKYHD_all.txt create mode 100644 scripts/javdb/SMBD_all.txt create mode 100644 scripts/javdb/all.txt diff --git a/scripts/aabook_list.py b/scripts/aabook_list.py new file mode 100644 index 0000000..419e445 --- /dev/null +++ b/scripts/aabook_list.py @@ -0,0 +1,119 @@ + +# 定义小说映射 +novel_map_new = { + 269: '雪域往事', + 156643: '都市偷心龙爪手', + 85227: '明星潜规则之皇', + 88155: '娇娇师娘(与爱同行)', + 12829: '女人四十一枝花', + 116756: '风雨里的罂粟花', + 320500: '豪门浪荡史', + 329495: '女市长迷途沉沦:权斗', + 159927: '豪乳老师刘艳', + 308650: '山里的女人', + 163322: '翁媳乱情', + 103990: '欲望之门', + 59793: '红尘都市', + 231646: '那山,那人,那情', + 61336: '妻欲:欲望迷城(H 版)', + 104929: '都市奇缘', + 239682: '叶辰风流', +} +# 定义小说映射 +novel_map = { +} + + +novel_map_done = { + 261481: '我本风流', + 171107: '爱与欲的升华', + 171029: '亲爱的不要离开我', + 5049: '红楼春梦', + 5479: '倚天屠龙记(成人版)', + 71468: '襄阳战记', + 29242: '仙剑淫女传', + 237271: '新倚天行', + 231192: '神雕侠绿', + 31882: '新编蜗居H版', + 230877: '黄蓉的改变', + 187150: '黄蓉襄阳淫史', + 316162: '洛玉衡的堕落(大奉打更人H)', + 7678: '射雕别记(黄蓉的故事)', + 185302: '天地之间(精修版)', + 54344: '情欲两极 (情和欲的两极)', + 2072: '父女情', + 214610: '大黄的故事', + 2211: '隔墙有眼', + 221453: '当维修工的日子', + 153792: '荒村红杏', + 186052: '食色男女', + 68: '童年+静静的辽河', + 322665: '乡村活寡美人沟', + 160528: '我和我的母亲(改写寄印传奇)', + 23228: '风流人生', + 181617: '红楼遗秘', + 219454: '寻秦记(全本改编版)', + 49051: '情色搜神记', + 5860: '天若有情(一家之主)', + 161497: '步步高升', + 51870: '母爱的光辉', + 258388: '露从今夜白', + 202281: '异地夫妻', + 1960: '北方的天空', + 164544: '少妇的悲哀', + 158872: '我的极品老婆', + 3975: '出轨的诱惑', + 26442: '爱满江城', + 7776: '小城乱事', + 179710: '淫男乱女(小雄性事)', + 79161: '情迷芦苇荡:山乡艳事', + 99885: '江南第一风流才子(唐伯虎淫传)', + 54426: '水浒潘金莲', + 327794: '枕瑶钗([清]东涧老人)', + 161243: '我的青年岁月', + 137885: '破碎的命运', + 159266: '我的好儿媳(极品好儿媳)', + 166534: '女友与睡在隔壁的兄弟', + 40646: '女子医院的男医生', + 61535: '魅骨少妇(苏樱的暧昧情事)', + 13166: '青春性事:一个八零后的情欲往事', + 21563: '幸福的借种经历', + 51916: '乱情家庭', + 26787: '少妇人妻的欲望', + 59610: '金瓶梅(崇祯原本)', + 322155: '少年阿宾', + 89532: '宋家湾那些事儿', + 297078: '熟透了的村妇', + 350314: '多情村妇', + 53823: '蛮荒小村的风流韵事', + 82570: '潭河峪的那些事儿', + 72429: '杨家将外传_薛家将秘史', + 410: '农村的妞', + 37443: '山里人家', + 28478: '追忆平凡年代的全家故事', + 199014: '风流岁月', + 59737: '丝之恋-我与一对母女的故事', + 14733: '乡村乱情|奇思妙想', + 43: '空空幻', + 3858: '绿头巾', + 13483: '乡野欲潮:绝色村嫂的泛滥春情', + 67423: '欲海沉沦:一个换妻经历者的良心忏悔', + 51776: '我成了父亲与妻子的月老', + 54192: '郝叔和他的女人', + 68339: '和护士后妈生活的日子', + 15168: '妻子的会客厅:高官的秘密', + 7064: '男欢女爱', + 50555: '人生得意须纵欢', + 67114: '潜色官迹:小所长孽欲涅盘', + 1487: '神雕风流', + 4951: '合租情缘(出租屋里的真实换妻记录)', + 4701: '艰难的借种经历', + 162845: '人妻牌坊——我和人妻的故事', + 183692: '幸福家庭背后的隐私', + 203144: '我的校长生涯', + 140605: '东北大炕', + 24344: '淫乱一家亲(超级乱伦家庭)', + 25154: '全家人互爱共乐的日子', + 16941: '平凡的激情', + 70767: '合家欢', +} \ No newline at end of file diff --git a/scripts/config.py b/scripts/config.py new file mode 100644 index 0000000..27942b9 --- /dev/null +++ b/scripts/config.py @@ -0,0 +1,31 @@ +import logging +import os +import inspect +from datetime import datetime + +# MySQL 配置 +db_config = { + 'host': '172.18.0.3', + 'user': 'root', + 'password': 'mysqlpw', + 'database': 'stockdb' +} + +# 设置日志配置 +def setup_logging(log_filename=None): + # 如果未传入 log_filename,则使用当前脚本名称作为日志文件名 + if log_filename is None: + # 获取调用 setup_logging 的脚本文件名 + caller_frame = inspect.stack()[1] + caller_filename = os.path.splitext(os.path.basename(caller_frame.filename))[0] + + # 获取当前日期,格式为 yyyymmdd + current_date = datetime.now().strftime('%Y%m%d') + # 拼接 log 文件名,将日期加在扩展名前 + log_filename = f'./log/{caller_filename}_{current_date}.log' + + logging.basicConfig(level=logging.INFO, format='%(asctime)s %(levelname)s [%(filename)s:%(lineno)d] (%(funcName)s) - %(message)s', + handlers=[ + logging.FileHandler(log_filename), + logging.StreamHandler() + ]) \ No newline at end of file diff --git a/scripts/get_aabook.py b/scripts/get_aabook.py new file mode 100644 index 0000000..1ef5823 --- /dev/null +++ b/scripts/get_aabook.py @@ -0,0 +1,210 @@ +""" +Script Name: +Description: 获取 aabook.xyz 数据, prompt: + 我们需要访问 https://aabook.xyz/read-{chapid}.html 这个地址,并解析其中的元素,发起下载链接,格式化返回的数据,以下是需求详细描述: + chapid 参数,它代表的是小说编号,我们定义一个映射,比如 novel_map = {350316:'novel1', ...} 等等 + + 我们遍历 novel_map,对每一个key值,假设为 novel_id,传入上面的URL,组成一个访问地址,获取它的内容,它是一个HTML页面;把对应的 value 记为 novel_name;创建 {novel_name}.txt 文件; + 我们解析它的 body 中的

第三章 惊人的任务

标签,获得对应的 title; + 我们解析它的 body 中的
标签,得到里面的链接地址,拼上访问域名,就是 next_page 的地址;如果标签不存在,则说明已经全部读取完毕; + 在 body中有一段 javascript 代码,$.get("./_getcontent.php?id="+chapid+"&v=f2cd0JFa_wH0alpBjF4xgS2WFKyo0mQijsHgPQhZmBEjKCEP0wes", 我们需要解析出它访问的地址,加上域名,得到真正的内容 content_url; + 访问 content_url ,获取它的内容,解析 body 中所有

标签的内容,每一部分都是一个段落,我们定义为 part; + 解析part中的内容,把其中诸如 feng情书库 这样的内容直接去掉,它是网站的隐藏水印;其特征是用 任意 HTML 标签包裹着的部分, <{label} class="" >XXXX 其中label可能为任意的字符串; + 我们把 title 写入到 {novel_name}.txt 中;并循环写入所有的 part ,注意每次写入一个part,都添加换行。 + 如果有 next_page, 那么就继续这个过程,一直到全部完成,这样我们就完成了 novel_id 对应的小说的下载。 + 继续遍历 novel_map,完成所有小说的下载。 + + 请你理解上述需求,并写出对应的python代码。 + +Author: [Your Name] +Created Date: YYYY-MM-DD +Last Modified: YYYY-MM-DD +Version: 1.0 + + +Modification History: + - YYYY-MM-DD [Your Name]: + - YYYY-MM-DD [Your Name]: + - YYYY-MM-DD [Your Name]: +""" + +import re +import os +import requests +from bs4 import BeautifulSoup +import time +import random +import logging +import config # 日志配置 +from aabook_list import novel_map + +config.setup_logging() + +# User-Agent 列表 +user_agents = [ + "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/93.0.4577.63 Safari/537.36", + "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/93.0.4577.82 Safari/537.36", + "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/91.0.4472.124 Safari/537.36 Edg/91.0.864.67", + "Mozilla/5.0 (X11; Ubuntu; Linux x86_64; rv:90.0) Gecko/20100101 Firefox/90.0", + "Mozilla/5.0 (Linux; Android 10; SM-G973F) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/91.0.4472.124 Mobile Safari/537.36" +] + +dir_prefix = './aabook' + +# 定义获取页面内容的函数,带重试机制 +def get_page_content(url, max_retries=100, sleep_time=5, default_timeout=10): + retries = 0 + # 随机选择一个 User-Agent + headers = { + 'User-Agent': random.choice(user_agents) + } + + while retries < max_retries: + try: + response = requests.get(url, headers=headers, timeout=default_timeout, stream=True) + response.raise_for_status() + return response.text # 请求成功,返回内容 + except requests.RequestException as e: + retries += 1 + logging.info(f"Warn fetching page {url}: {e}. Retrying {retries}/{max_retries}...") + if retries >= max_retries: + logging.error(f"Failed to fetch page {url} after {max_retries} retries.") + return None + time.sleep(sleep_time) # 休眠指定的时间,然后重试 + + +# 解析内容中的水印部分 +def clean_watermarks(html): + """ + 过滤掉带有 class 属性的水印标签及其内部内容,保留其他标签结构。 + """ + # 使用正则表达式匹配并移除任何带有 class 属性的 HTML 标签及其内容 + cleaned_html = re.sub(r'<[^>]+class="[^"]+">.*?]+>', '', html, flags=re.DOTALL) + return cleaned_html + +def process_paragraph(paragraph): + # 获取完整的 HTML 结构,而不是 get_text() + paragraph_html = str(paragraph) + + # 移除水印标签 + cleaned_html = clean_watermarks(paragraph_html) + + # 使用 BeautifulSoup 解析移除水印标签后的 HTML 并提取文本 + soup = BeautifulSoup(cleaned_html, 'html.parser') + cleaned_text = soup.get_text().strip() + + return cleaned_text + +# 从 script 标签中提取 content_url +def extract_content_url(soup, base_url, chapid): + # 找到所有