吾爱破解 - 52pojie.cn

 找回密码
 注册[Register]

QQ登录

只需一步,快速开始

查看: 19994|回复: 642
上一主题 下一主题
收起左侧

[Windows] 人民日报pdf电子版下载器v1.0.0

    [复制链接]
跳转到指定楼层
楼主
嘻哈星星 发表于 2024-3-12 17:58 回帖奖励
这个是人民日报的官方电子版地址,可以在网页中查看。本软件只是方便下载到本地查看,只默认下载当日的报纸。
使用python语言编写,pyinstaller打包为exe程序,无任何添加后台功能,提供浏览和其他处理,开源python初学者代码,以供学习测试。

蓝奏云:https://wwl.lanzout.com/ir67w1r5rx6f   密码:e5fn
CD贡献地址: 下载地址.txt (62 Bytes, 下载次数: 270)

使用方法:打开软件,选择目录,点击下载,你选择的目录就是下载保存的路径。

杀毒检测:因为打包安装超过了腾讯哈勃上传30M的限制,无法检测,使用火绒杀毒未发现风险。


python开源,以供学习。
[Python] 纯文本查看 复制代码
import os
import PyPDF2
import random
import time
from urllib.parse import urljoin
import re
import requests
from lxml import etree
import shutil

url = "http://paper.people.com.cn/rmrb/paperindex.htm"
headers = {
    "user-agent": "Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/94.0.4606.71 Safari/537.36 SE 2.X MetaSr 1.0"
}

resp_init = requests.get(url, headers=headers)
resp_init.encoding = "UTF-8"
resp_content = resp_init.text
resp_init.close()

skip_url = re.compile(r'HTTP-EQUIV="REFRESH".*?URL=(?P<skip_url>.*?)"></head>', re.S)
obj_list = skip_url.finditer(resp_content)

for element in obj_list:
    ul = element.group("skip_url")
    skip_url = urljoin(url, ul)
print(skip_url)

resp_index = requests.get(skip_url, headers=headers)
resp_index.encoding = "UTF-8"
tree = etree.HTML(resp_index.text)
resp_index.close()

pdf_name = tree.xpath("//*[@id='main']/div[2]/div[1]/p[1]/text()")[0].strip().replace("\r\n", "")
pdf_name = re.sub(r'\s+', ' ', pdf_name)
print(pdf_name)

pdf_href = tree.xpath("//*[@id='main']/div[1]/div[2]/p[2]/a/@href")[0]
download_pdf_href = urljoin(skip_url, pdf_href)
print(download_pdf_href)
hrefs = tree.xpath("//*[@id='main']/div[2]/div[2]/div/div/a/@href")


def save_pdf(download_path, pdf_href, pdf_detail_name):
    resp_download_pdf = requests.get(pdf_href, headers=headers)
    resp_download_pdf.close()

    # 创建文件夹,不存在就创建
    path = f"{download_path}/temp_file"
    if not os.path.exists(path):
        os.mkdir(rf"{download_path}/temp_file")

    with open(f"{download_path}/temp_file/{pdf_detail_name}", mode="wb") as f:
        f.write(resp_download_pdf.content)
    print(f"{pdf_detail_name} 下载完成")


def init_download(download_path):
    for href in hrefs:
        detail_page = urljoin(skip_url, href)
        resp_detail = requests.get(detail_page, headers=headers)
        resp_detail.encoding = "UTF-8"
        tree = etree.HTML(resp_detail.text)
        resp_detail.close()

        pdf_href = tree.xpath("//*[@id='main']/div[1]/div[2]/p[2]/a/@href")[0]
        download_pdf_href = urljoin(skip_url, pdf_href)
        pdf_detail_name = pdf_href.split("/")[-1]
        num = random.randint(1, 5)
        print(f"{detail_page}, {pdf_detail_name}, 随机暂停时间:{num}秒")
        save_pdf(download_path, download_pdf_href, pdf_detail_name)
        time.sleep(num)


def merge_pdfs(file_list, output):
    pdf_merger = PyPDF2.PdfMerger()
    for file in file_list:
        with open(file, 'rb') as f:
            pdf_merger.append(f)
    with open(output, 'wb') as f:
        pdf_merger.write(f)


if __name__ == '__main__':
    dir_path = "C:/Users/it/Desktop/人民日报"
    init_download(dir_path)

    # 获取文件夹下pdf文件
    pdf_lst = [f for f in os.listdir(f"{dir_path}/temp_file") if f.endswith('.pdf')]
    # 合成绝对路径
    file_list = [os.path.join(f"{dir_path}/temp_file", filename) for filename in pdf_lst]
    print(file_list)

    output = f'{dir_path}/{pdf_name}.pdf'
    merge_pdfs(file_list, output)
    if os.path.exists(f"{dir_path}/temp_file"):
        shutil.rmtree(f"{dir_path}/temp_file")
    print(f"下载已完成:{output}")

免费评分

参与人数 159吾爱币 +139 热心值 +140 收起 理由
muzizli + 1 + 1 我很赞同!
obiru + 1 谢谢@Thanks!
whsmark + 1 + 1 谢谢@Thanks!
wfygyeeqy + 1 谢谢@Thanks!
莫云遥 + 1 + 1 我很赞同!
xyl2008 + 1 + 1 热心回复! 老爸的报纸就不需要订了
zxyfy + 1 用心讨论,共获提升!
lisuo + 1 + 1 我很赞同!
mochiyouyu + 1 鼓励转贴优秀软件安全工具和文档!
ysw1236 + 1 我很赞同!
Zed丶小灰狼 + 2 + 1 谢谢@Thanks!
lpjiayou666 + 1 + 1 我很赞同!
马超龙雀 + 1 + 1 感谢发布原创作品,吾爱破解论坛因你更精彩!
mhtsqj + 1 + 1 谢谢@Thanks!
suhaoge + 1 + 1 我很赞同!
Sander是沙子 + 1 + 1 谢谢@Thanks!
woko009 + 1 我很赞同!
xuna2009 + 1 + 1 我很赞同!
hailan20 + 1 + 1 谢谢@Thanks!
smoky + 1 谢谢@Thanks!
RobertXia233 + 1 + 1 谢谢@Thanks!
wjily999 + 1 + 1 谢谢@Thanks!
fengwen18245 + 1 + 1 我很赞同!
Sky19991012 + 1 + 1 谢谢@Thanks!
DUDU666 + 1 + 1 谢谢@Thanks!
radishC + 1 谢谢@Thanks!
yzyuan007 + 1 + 1 热心回复!
HarleyQuinn + 1 + 1 这个好用,感谢分享!
tvrcfdfe + 1 + 1 我很赞同!
yxpp + 1 谢谢@Thanks!
杰洛特666 + 1 + 1 谢谢@Thanks!
wallacebai + 1 + 1 我很赞同!
alexxi0571 + 1 谢谢@Thanks!
诸葛文诚 + 1 + 1 谢谢@Thanks!
mmqk + 1 谢谢@Thanks!
liuyukk + 1 + 1 我很赞同!
jsyczxyh + 1 谢谢@Thanks!
Axc45 + 1 + 1 谢谢@Thanks!
cdaly + 1 谢谢@Thanks!
skyci2007 + 1 + 1 我很赞同!
wantu3 + 1 + 1 谢谢@Thanks!
helloworld0011 + 1 我很赞同!
Shanghanzu + 1 + 1 我很赞同!
Dplay + 1 + 1 谢谢@Thanks!
GTH1314 + 1 鼓励转贴优秀软件安全工具和文档!
lbaiwjw + 1 + 1 我很赞同!
XieLC + 1 + 1 我很赞同!
Nnico + 1 + 1 热心回复!
a29662167 + 1 我很赞同!
MojoDojo + 1 + 1 我很赞同!
Ricardo41 + 1 + 1 热心回复!
lyslxx + 1 + 1 我很赞同!
sealoyal + 1 鼓励转贴优秀软件安全工具和文档!
qq9953 + 1 谢谢@Thanks!
Zhaofeiyan + 1 我很赞同!
hnulyt + 1 + 1 热心回复!
Cmzlwc + 1 + 1 谢谢@Thanks!
mhaitao + 1 + 1 我很赞同!
南方的邮 + 1 + 1 谢谢@Thanks!
qianshaoyan + 1 谢谢@Thanks!
wzx223 + 1 + 1 这真是厉害哈,谢谢分享。
aaa999jiujiujiu + 1 + 1 谢谢大佬
zhongyihaitun + 1 谢谢@Thanks!
hqu8808 + 1 我很赞同!
Ldn2740488086 + 1 谢谢@Thanks!
weidechan + 1 + 1 感谢发布原创作品,吾爱破解论坛因你更精彩!
john_cust + 1 + 1 谢谢@Thanks!
糯米牛 + 1 谢谢@Thanks!
ag129 + 1 + 1 谢谢@Thanks!
renshaowei + 1 + 1 谢谢@Thanks!
liaohexlxw + 1 + 1 谢谢@Thanks!
icehoo + 1 + 1 谢谢@Thanks!
bluewatercom + 1 + 1 我很赞同!
rwzhhflying + 1 + 1 之前已经使用,补谢
adsl25 + 1 + 1 谢谢@Thanks!
mei251617 + 1 + 1 我很赞同!
tanglang1026 + 1 + 1 谢谢@Thanks!
zkn1873964zkn + 1 + 1 谢谢@Thanks!
ind + 1 + 1 谢谢@Thanks!
小猪佩奇007 + 1 + 1 谢谢@Thanks!
yx69 + 1 + 1 我很赞同!
yslf1007 + 1 + 1 热心回复!
seapipi + 2 + 1 真棒!
lso2vu + 1 + 1 谢谢@Thanks!
Issacclark1 + 1 谢谢@Thanks!
corleoneYellow + 1 + 1 我很赞同!
yunzhongxianke + 1 + 1 谢谢@Thanks!
litostee + 1 + 1 谢谢@Thanks!
nneko + 1 用心讨论,共获提升!
jyys1860 + 1 谢谢@Thanks!
blindcat + 1 + 1 谢谢@Thanks!
sshawn + 1 + 1 用心讨论,共获提升!
GJXOL + 1 + 1 感谢发布原创作品,吾爱破解论坛因你更精彩!
dracogo + 1 + 1 我很赞同!
c199188177c + 1 + 1 热心回复!
Alveus + 1 鼓励转贴优秀软件安全工具和文档!
yuzc + 1 + 1 我很赞同!
Sheldog + 1 谢谢@Thanks!
qq63 + 1 + 1 谢谢@Thanks!
ericcui + 1 我很赞同!

查看全部评分

本帖被以下淘专辑推荐:

发帖前要善用论坛搜索功能,那里可能会有你要找的答案或者已经有人发布过相同内容了,请勿重复发帖。

来自 80#
 楼主| 嘻哈星星 发表于 2024-3-13 09:54 |楼主
人民日报官网的链接没有在首页显示,这是链接地址,可以直接在网页中查看报纸。
http://paper.people.com.cn/rmrb/paperindex.htm

免费评分

参与人数 2吾爱币 +2 热心值 +2 收起 理由
tanpopo + 1 + 1 谢谢@Thanks!
yunwei925 + 1 + 1 谢谢@Thanks!

查看全部评分

推荐
KTV 发表于 2024-3-14 09:13
萝卜天王 发表于 2024-3-13 00:13
我想下载50-70年代的人民日报,有办法吗??

JOJO看报:https://reader.jojokanbao.cn

免费评分

参与人数 6吾爱币 +5 热心值 +6 收起 理由
乡间人 + 1 + 1 为什么每天的报纸都只能看到第一页
skyci2007 + 1 + 1 我很赞同!
dtadsl + 1 + 1 我很赞同!
wllowkey + 1 + 1 热心回复!
Ptty + 1 + 1 热心回复!
EliteQQ + 1 热心回复!

查看全部评分

推荐
shaunkelly 发表于 2024-3-13 00:13
推荐
zjg121 发表于 2024-3-14 18:04
zxh0145 发表于 2024-3-13 12:55
感谢,同样希望能批量下载,另外请增加类似经济日报(http://paper.ce.cn/pc/layout/202403/13/node_01.h ...

# 经济日报可用的代码
from selenium import webdriver
from selenium.webdriver.common.by import By
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC
from selenium.common.exceptions import TimeoutException
from time import sleep
import os
from PyPDF2 import PdfMerger  # 注意这里更改为 PdfMerger
from datetime import datetime


def get_file_time(file_path):
    """获取文件的修改时间"""
    t_epoch = os.path.getmtime(file_path)
    return datetime.fromtimestamp(t_epoch)


def merge_pdfs(folder_path, output_path):
    """合并文件夹中的PDF文件"""
    # 获取文件夹中所有PDF文件的列表
    pdf_files = [f for f in os.listdir(folder_path) if f.endswith('.pdf')]

    # 根据文件的修改时间对它们进行排序
    pdf_files.sort(key=lambda f: get_file_time(os.path.join(folder_path, f)))

    merger = PdfMerger()  # 这里已经更改为 PdfMerger

    for pdf_file in pdf_files:
        file_path = os.path.join(folder_path, pdf_file)
        with open(file_path, 'rb') as file:
            merger.append(file)

    with open(output_path, 'wb') as outfile:
        merger.write(outfile)

    print(f"Merged PDF saved to {output_path}")


# 使用WebDriverWait替代固定的sleep等待,提高程序效率
def wait_for_elements(driver, locator, timeout=10):
    try:
        elements = WebDriverWait(driver, timeout).until(
            EC.presence_of_all_elements_located(locator)
        )
        return elements
    except TimeoutException:
        print("等待元素超时")
        return []


# 初始化Edge浏览器
driver = webdriver.Edge()
driver.maximize_window()  # 最大化浏览器窗口

# 访问网页
driver.get("http://paper.ce.cn/")

# 等待页面上的元素加载完成
# 假设class为"posRelative"的元素是我们感兴趣的元素
locator = (By.CLASS_NAME, "posRelative")
eles = wait_for_elements(driver, locator)

# 打印找到的元素数量
print(f"找到的元素数量: {len(eles)}")

# 遍历元素,点击每个元素内部的链接
for index, ele in enumerate(eles, start=1):  # 使用enumerate函数获取索引和元素
    try:
        # 查找元素内部的第一个<a>标签并点击它
        # 假设每个"posRelative"类元素内部有一个<a>标签需要点击
        print(ele.find_element(By.TAG_NAME, "a").text)
        link = ele.find_element(By.TAG_NAME, "a").find_element(By.TAG_NAME, "a")
        link.click()
        sleep(0.1)
        # 打印当前点击元素的序号
        print(f"点击了第{index}个元素")
    except Exception as e:
        print(f"点击第{index}个元素时出错: {e}")

# 关闭浏览器
driver.quit()
folder_path = 'C:\\Users\\31394\\downloads'  # 替换为你的PDF文件夹路径
output_path = 'C:\\Users\\31394\\downloads\\merged_pdf.pdf'  # 合并后的PDF文件名
merge_pdfs(folder_path, output_path)
print("done")
推荐
jokaka 发表于 2024-3-13 06:08
很好的工具 如果能支持日期指定就更好了 谢谢楼主分享
推荐
blueflame1945 发表于 2024-3-17 12:58
两条建议,一是建议添加可选日期,最好是能批选日期;二是选择目录保存设置,现在是每次打开软件都要设定一下下载目录。
推荐
csj123456789 发表于 2024-3-13 07:55
感谢楼主分享,对于从事档案工作的人来说收集原版信息是很头疼的事(之前为了核实一条信息还专门去找过02年的人民日报),有了这个工具之后就方便多了
推荐
zxh0145 发表于 2024-3-13 12:55
嘻哈星星 发表于 2024-3-13 10:10
可能后续会支持,因为官网有这个日期选项,可以做。

感谢,同样希望能批量下载,另外请增加类似经济日报(http://paper.ce.cn/pc/layout/202403/13/node_01.html)这样的下载器,谢谢。
推荐
weilai8023 发表于 2024-3-13 09:27

感谢楼主分享,及时关注头条信息
推荐
pingty 发表于 2024-3-14 10:23
感谢分享!对文史类学生、学者很有帮助!
沙发
zzh51888 发表于 2024-3-12 23:51
好东西要分享,谢谢!
3#
lavenz 发表于 2024-3-13 00:12
时刻关注人民日报的都是大佬啊
4#
萝卜天王 发表于 2024-3-13 00:13
我想下载50-70年代的人民日报,有办法吗??
6#
starpatrick 发表于 2024-3-13 00:31
谢谢分享!学习一下技术
7#
duduhao 发表于 2024-3-13 00:39
太感谢大佬的好分享!!!
8#
abmabmabm 发表于 2024-3-13 00:39
谢谢分享,培养一下看报纸的习惯
9#
HSX19841230 发表于 2024-3-13 04:47
年纪大了,突然喜欢看报纸了...
10#
gp16518 发表于 2024-3-13 05:55
不错,感谢分享!
您需要登录后才可以回帖 登录 | 注册[Register]

本版积分规则

返回列表

RSS订阅|小黑屋|处罚记录|联系我们|吾爱破解 - LCG - LSG ( 京ICP备16042023号 | 京公网安备 11010502030087号 )

GMT+8, 2024-12-15 21:30

Powered by Discuz!

Copyright © 2001-2020, Tencent Cloud.

快速回复 返回顶部 返回列表