当当电子书生成pdf示例

本文介绍了如何利用Python和Java抓取当当电子书的目录和页面图片,然后生成PDF。首先,安装Python和PyCharm,接着抓取书目的名录并保存到数据库。然后,通过Python脚本抓取特定书籍的目录信息,Java程序处理数据并存入数据库。之后,使用Python脚本抓取页面图片,最后调用Java程序生成PDF。对于仅限PC阅读的书籍,需要调整Python脚本。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

准备工作

安装 Python 3PyCharm 社区版

安装 pyautogui 命令如下:(参考:pyautogui安装教程

pip install pyautogui
或者
pip install pyautogui -i https://mirrors.aliyun.com/pypi/simple

pyautogui 使用参考:

https://blog.csdn.net/ibiao/article/details/77859997

https://jingyan.baidu.com/article/39810a23440b20b636fda621.html

技术实现

python + java项目

第一步:抓取所有书的名录,保存到本地数据库

python 脚本

#!/usr/bin/python3

import sys
import time
import pyautogui

from PIL import ImageGrab

# 标记图像
imgDir = "D:/dang/python/dang/img"
imgLoadingMark = "%s/%s.bmp" % (imgDir, "loadingMark") # “加载中”标记图像
imgLoadFailMark = "%s/%s.bmp" % (imgDir, "loadFailMark") # “加载失败”标记图像
imgLoginPassMark = "%s/%s.bmp" % (imgDir, "loginPassMark") # “登录失效”标记图像

# 参数配置
bookDir = "D:/book/xxxxxxxxx" # 替换书名
bookDir2 = "D:/tmpbmp" # BMP临时目录(用来抓取标记图像)
pageCount = 300 # 页数
pageArea = (354, 72, 1012, 950) # 页面区域(x1, y1, x2, y2)

# 查找标记图像
def marchMark(fileMark):
	return pyautogui.locateCenterOnScreen(fileMark, grayscale=True)

# 抓取页面图像
def catchImage(area, file):
	im = ImageGrab.grab(bbox=area)
	im.save(file)

# 检查标记图像
def checkMark():
	if markResult := marchMark(imgLoadingMark):
		print("imgLoadingMark", markResult)
		time.sleep(3)
		return checkMark()
	if markResult := marchMark(imgLoadFailMark):
		print("imgLoadFailMark", markResult)
		pyautogui.click(markResult)
		time.sleep(3)
		return checkMark()
	if markResult := marchMark(imgLoginPassMark):
		print("imgLoginPassMark", markResult)
		pyautogui.moveTo(markResult)
		return False
	return True

# 抓取一个页面
def catchPage(i):
	if checkMark():
		# print("catch", i)
		catchImage(pageArea, "%s/%d.jpg" % (bookDir, i))
		catchImage(pageArea, "%s/%d.bmp" % (bookDir2, i))
		return True
	else:
		return False

# 从第 i 页开始抓取
def startImpl(i):
	while i <= pageCount:
		if catchPage(i):
			pyautogui.press('right')
			# time.sleep(1)
			i += 1
		else:
			break
	else:
		return True
	return False

# 从第 i 页开始抓取
def start(i):
	if startImpl(i):
		print("catch success")
	else:
		print("catch fail")

# 抓取标记图像
def catchMark(area, fileMark):
	catchImage(area, fileMark)
	markResult = marchMark(fileMark)
	if markResult:
		print("markResult", markResult)
		pyautogui.moveTo(markResult)


print("ready...")
time.sleep(3)
print("go")

start(1)
# catchPage(1948)

# while True: pyautogui.hotkey('ctrl', 'end') # 下翻操作

# 抓取标记图像
# catchMark((430, 558, 523, 558 + 1), imgLoadingMark)
# catchMark((358, 448, 440, 448 + 1), imgLoadFailMark)
# catchMark((666, 510, 856, 510 + 1), imgLoginPassMark)

# im = pyautogui.screenshot(bookDir + "/1.jpg", region=(0, 0, 300, 400))

进入当当电子书的某个分类,例如“自然科学”,运行脚本中的“下翻操作”,翻开所有书目后,手动保存DOM内容为“自然科学.txt”

java项目

pom.xml

		<dependency>
			<groupId>com.alibaba</groupId>
			<artifactId>fastjson</artifactId>
			<version>1.2.47</version>
		</dependency>

		<dependency>
			<groupId>com.squareup.okhttp3</groupId>
			<artifactId>okhttp</artifactId>
			<version>4.7.2</version>
		</dependency>

		<dependency>
			<groupId>mysql</groupId>
			<artifactId>mysql-connector-java</artifactId>
			<version>8.0.21</version>
		</dependency>

		<!--pdf相关-->
		<dependency>
			<groupId>org.apache.pdfbox</groupId>
			<artifactId>pdfbox</artifactId>
			<version>2.0.11</version>
		</dependency>
		<dependency>
			<groupId>org.apache.pdfbox</groupId>
			<artifactId>fontbox</artifactId>
			<version>2.0.11</version>
		</dependency>

		<!--用于解析html-->
		<dependency>
			<groupId>org.jsoup</groupId>
			<artifactId>jsoup</artifactId>
			<version>1.13.1</version>
		</dependency>

CatchBookTable.java 构建书目记录,方便查找和管理

package com.xnktyu.dangdang;

import com.alibaba.fastjson.JSONArray;
import com.alibaba.fastjson.JSONObject;
import com.xnktyu.utils.*;
import org.jsoup.Jsoup;
import org.jsoup.nodes.Document;
import org.jsoup.nodes.Element;
import org.jsoup.select.Elements;

import java.io.File;
import java.io.FileFilter;
import java.util.HashMap;
import java.util.Map;

public class CatchBookTable
{
	private static final DBHelper local_db = new DBHelper("localhost", "root", "xxxxxxx", "dang");

	private static class tbase
	{
		protected String pack(String field)
		{
			return "f_" + field.toLowerCase();
		}

		@Override
		public String toString()
		{
			return getClass().getSimpleName().toLowerCase();
		}
	}

	private static final class t_book extends tbase
	{
		public final String bookId = pack("bookId");
		public final String note = pack("note");
		public final String title = pack("title");
		public final String author = pack("author");
		public final String time = pack("time");
		public final String vip_li
<think>嗯,用户想下载《逻辑思维训练500题》的PDF版本。首先,我需要确认这个资源是否合法。版权保护很重要,所以直接提供下载链接可能涉及侵权问题。我应该建议用户通过正规渠道获取,比如购买正版书籍或者访问授权平台。 接下来,用户可能需要其他途径来提升逻辑思维。我可以推荐一些免费资源,比如在线题库或者应用程序,比如Khan Academy或者Quizlet,这些地方可能有类似的练习题。另外,图书馆的电子资源也是个不错的选择,比如OverDrive或者Libby,用户可以合法借阅。 还要考虑到用户可能不知道如何有效训练逻辑思维。或许可以给出一些学习方法,比如每天练习一定数量的题目,分析解题思路,或者参加在线课程。同时,提醒用户注意题目的版权,避免使用非法下载的内容,这样既合法又安全。 另外,用户的问题中提到“参考站内引用”,但原问题中没有具体的引用来源。可能需要检查是否有遗漏,或者在回答中避免引用不存在的来源。确保回答中的引用标识如[^1]有对应的注释,但根据示例,用户可能只是希望结构上有引用格式,而实际内容需要自行处理。 最后,生成的相关问题需要围绕逻辑思维训练的方法、免费资源和版权注意事项,这样用户可以得到更全面的信息,解决他们的深层需求,比如如何高效练习或找到替代资源。</think>关于《逻辑思维训练500题》PDF下载的说明: 1. **版权声明** 该书籍受著作权法保护,未经授权传播电子版可能侵犯作者权益。建议通过正规渠道购买纸质书或正版电子书。 2. **合法获取途径** - 在线商城:亚马逊、当当网等平台提供正版购买 - 电子书平台:Kindle、微信读书等支持正版电子书下载 - 图书馆资源:部分城市图书馆提供电子书借阅服务[^1] 3. **替代免费资源** ```markdown - 国家教育资源公共服务平台(官方题库) - MIT开放式课程逻辑学练习题 - 公益组织发布的逻辑训练材料 ```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值