-
Notifications
You must be signed in to change notification settings - Fork 0
/
nettruyen.py
121 lines (114 loc) · 4.44 KB
/
nettruyen.py
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
import requests
from bs4 import BeautifulSoup
from os.path import join
from os import makedirs
import sys
import random
import time
user_agent_list = [
"Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/77.0.3865.90 Safari/537.36",
"Mozilla/5.0 (Windows NT 6.1; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/79.0.3945.130 Safari/537.36",
"Mozilla/5.0 (iPad; CPU OS 15_6 like Mac OS X) AppleWebKit/605.1.15 (KHTML, like Gecko) CriOS/104.0.5112.99 Mobile/15E148 Safari/604.1",
"Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/124.0.0.0 Safari/537.3",
"Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/124.0.0.0 Safari/537.36 Edg/124.0.0"
]
reffer_list=[
'https://nettruyenco.vn/',
'https://nettruyencc.com/'
]
thisfoldir = sys.path[0]
download_dir = join(thisfoldir,"nettruyen_download_results")
makedirs(download_dir,exist_ok=True)
def onechapter(web, headers):
res = requests.get(web, headers=headers)
html_content = res.text
soup = BeautifulSoup(html_content, 'html.parser')
#debug
#print(soup)
img_links = []
for x in soup.find_all("div", class_="page-chapter"):
for y in x.find_all("img"):
img_links.append(y.get("data-src"))
#debug
#print(img_links)
parts = web.split("/")
folder = join(download_dir,parts[-3],parts[-2])
makedirs(folder, exist_ok=True)
for index, link in enumerate(img_links):
print(link)
file = join(folder,f"image_{index}.jpg")
while True:
try:
response = requests.get(link, headers=headers)
break
except:
print("Error. Retrying...")
with open(file, "wb") as f:
f.write(response.content)
time.sleep(1)
print(" ")
print("Xong.")
def multichapters(web, headers):
res = requests.get(web,headers=headers)
html_content = res.text
soup = BeautifulSoup(html_content, 'html.parser')
#debug
#with open(debug_html, 'w') as f:
# f.write(soup)
# Find all <a> tags within the specified <div>
links = []
for item in soup.find_all("div", class_="list-chapter"):
for link in item.find_all("a"):
links.append(link.get("href"))
links.reverse()
#debug
#print(links)
print("Chọn chế độ tải: ")
print("(T) Toàn bộ chương hiện có")
print("(K) Một khoảng chương (từ chương nào đó đến chương nào đó theo thứ tự).")
print("(C) Chỉ định các chương muốn tải.")
c = str(input("Chọn chế độ: "))
if c == "T":
for x in range(1,len(links)+1):
#print(x) #debug
onechapter(links[x],headers)
elif c == "K":
k = str(input("Vui lòng điền khoảng chương (VD: 25, 30): "))
a = list(map(int,k.split(",")))
for x in range(a[0],a[1]+1):
onechapter(links[x],headers)
elif c == "C":
m = str(input("Vui lòng điền danh sách các chương bạn muốn tải (VD: 5, 10, 15, 20,...): "))
b = list(map(int,m.split(",")))
for x in b:
onechapter(links[x],headers)
web = str(input("Nhập đường link của truyện: "))
print("**!** Tool còn nhiều hạn chế, và mình sẽ luôn cố gắng cập nhật để bắt kịp với trang web.")
referer = f'https://{web.split("/")[2]}/'
if referer in reffer_list:
print(referer,"OK.")
print("Running...")
else:
print("Phát hiện tên miền mới chưa có trong danh sách hỗ trợ:",referer)
print("Tool vẫn sẽ chạy nhưng có thể gặp lỗi.")
time.sleep(5)
print("Running...")
headers = {
'Connection': 'keep-alive',
'Cache-Control': 'max-age=0',
'Upgrade-Insecure-Requests': '1',
'User-Agent': random.choice(user_agent_list),
'Accept': 'text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,image/apng,*/*;q=0.8',
'Accept-Encoding': 'gzip, deflate',
'Accept-Language': 'en-US,en;q=0.9,fr;q=0.8',
#'referer': random.choice(reffer_list)
'referer': referer
}
if "chapter" in web:
onechapter(web, headers)
elif "chuong" in web:
onechapter(web, headers)
else:
print("Có vẻ như đây là đường link của cả một truyện?")
print("Nếu vậy, chờ một lát, công cụ sẽ tải toàn bộ tất cả các chương đang có của truyện")
multichapters(web, headers)