爬取电子书通常涉及以下步骤:
获取目录
使用`requests`库发送HTTP请求获取网页内容。
使用`BeautifulSoup`解析HTML,找到包含目录信息的`div`标签。
提取目录信息,通常在`id="category"`的`div`标签下。
获取书籍列表页
根据目录信息构造URL,再次发送请求获取书籍列表页。
解析列表页,提取每本书的标题和链接。
获取书籍详情页
根据书籍列表页中的链接,构造URL请求书籍详情页。
解析详情页,提取书籍的下载链接。
分析资源地址
在详情页中找到电子书的下载链接。
提取下载链接,可能包含书籍编号或其他参数。
下载并保存
使用`requests`库根据提取的下载链接发送请求下载电子书。
保存下载的电子书到本地指定路径。
形成索引文件(可选):
将下载的书籍信息(如标题、作者、下载链接等)保存到JSON或CSV文件中,便于查找和管理。
import requests
from bs4 import BeautifulSoup
import os
设置请求头
headers = {
'User-Agent': 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_11_4) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/52.0.2743.116 Safari/537.36'
}
保存路径
savepath = "J://kgbook//books//"
主页URL
main_url = "https://kgbook.com/"
获取目录
def get_category():
req_result = requests.get(main_url, headers=headers)
if req_result.status_code == 200:
html_str = req_result.content.decode('utf-8')
soup = BeautifulSoup(html_str, 'lxml')
categorys = soup.find_all(attrs={'id': 'category'}).ul
for li in categorys.find_all('li'):
yield li.text
下载并保存电子书
def download_book(url, path):
response = requests.get(url, headers=headers)
if response.status_code == 200:
with open(os.path.join(path, url.split("/")[-1]), 'wb') as f:
f.write(response.content)
主程序
if __name__ == "__main__":
os.makedirs(savepath, exist_ok=True)
for category in get_category():
print(f"正在处理目录:{category}")
这里可以添加代码获取书籍列表页并解析
然后对每本书籍进行下载
请注意,实际爬取时可能需要处理登录验证、反爬虫机制、动态加载内容等问题。此外,请确保爬取行为符合网站的使用条款和法律法规,以及尊重版权。