|
|
|
|
from bs4 import BeautifulSoup
|
|
|
|
|
import requests
|
|
|
|
|
import os
|
|
|
|
|
import csv
|
|
|
|
|
|
|
|
|
|
urls = ['https://www.tadu.com/book/rank/list/0-hour72-0-0-{}'.format(numbers) for numbers in range(1, 21)]
|
|
|
|
|
bookname = []
|
|
|
|
|
|
|
|
|
|
save_folder = "book_images"
|
|
|
|
|
if not os.path.exists(save_folder):
|
|
|
|
|
os.makedirs(save_folder)
|
|
|
|
|
|
|
|
|
|
# 循环遍历每个链接
|
|
|
|
|
for i in urls:
|
|
|
|
|
headers = {"User-Agent": 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) '
|
|
|
|
|
'Chrome/125.0.0.0 Safari/537.36 Edg/125.0.0.0'}
|
|
|
|
|
# 发送GET请求到当前链接,并获取响应内容
|
|
|
|
|
res = requests.get(i, headers=headers)
|
|
|
|
|
html = res.text # 将响应内容存储为字符串
|
|
|
|
|
|
|
|
|
|
soup = BeautifulSoup(html, "lxml")
|
|
|
|
|
# 在页面中找到所有包含小说名称的元素
|
|
|
|
|
y = soup.find_all("span", class_='bookname_name')
|
|
|
|
|
# 在页面中找到所有包含作者信息的元素
|
|
|
|
|
j = soup.find_all("div", class_='booknick')
|
|
|
|
|
# 在页面中找到所有包含小说描述的元素
|
|
|
|
|
a = soup.find_all("div", class_='bookdes')
|
|
|
|
|
|
|
|
|
|
# 在页面中找到所有包含小说图片的元素
|
|
|
|
|
imgs = soup.select("div.bookimg img")
|
|
|
|
|
|
|
|
|
|
for k, v, h, img in zip(y, j, a, imgs):
|
|
|
|
|
l = k.get_text()
|
|
|
|
|
t = v.text.strip().split('\n')[0]
|
|
|
|
|
t2 = v.text.strip().split('\n')[1].split('· ')[1]
|
|
|
|
|
p = h.get_text().strip().replace('\r\n', '').replace('\n', '')
|
|
|
|
|
bookname.append([l, t, t2, p])
|
|
|
|
|
|
|
|
|
|
# 提取小说图片的URL
|
|
|
|
|
img_url = img.get('src')
|
|
|
|
|
# 发送HTTP请求到小说图片的URL
|
|
|
|
|
response = requests.get(img_url, headers=headers)
|
|
|
|
|
# 使用小说的索引和名称作为文件名
|
|
|
|
|
file_name = f"book_{len(bookname)}_{l.replace(' ', '_')}.jpg"
|
|
|
|
|
|
|
|
|
|
# 将图片保存到文件夹中
|
|
|
|
|
save_path = os.path.join(save_folder, file_name)
|
|
|
|
|
with open(save_path, "wb") as f:
|
|
|
|
|
f.write(response.content)
|
|
|
|
|
|
|
|
|
|
# 将小说信息写入CSV文件
|
|
|
|
|
with open("book.csv", "w", encoding="utf-8", newline="") as f:
|
|
|
|
|
writer = csv.writer(f)
|
|
|
|
|
writer.writerow(["书名", "作者", "小说类型", "简介"])
|
|
|
|
|
# 遍历bookname列表,将每一行数据写入CSV文件
|
|
|
|
|
for row in bookname:
|
|
|
|
|
writer.writerow(row)
|