用Python 爬虫批量下载PDF文档

综合讨论 14959 6 1
flzt
flzt 发表于:2021-06-27 21:20:49

hello!我想请问一下大家有没用Python 爬虫批量下载PDF文档的代码可供参考一下?比如这个网站 https://data.eastmoney.com/report/macresearch.jshtml?orgcode=80894586的报告pdf能否统一下载呢?谢谢~


本帖完毕
回帖
  • 李健
    6楼
    李健 2021-07-01 16:25:15
    Y先生第一步,使用js代码把页面的url打印出来,代码是:
    let b = document.getElementsByTagName("tbody")[0].getElementsByTagName("a");
    let sum = "";
    for (var i = 0; i < b.length; i++) {
    if (b[i].innerText.length >= 6) { sum += b[i].href;
    sum += "\n" }
    }
    console.log(sum)
    第二步,把打印出的网址复制保存在文件夹中,使用requests库依次访问,获取每个网页对应pdf的url
    python代码:
    import requests as req
    import time
    from bs4 import BeautifulSoup
    from tqdm import tqdm

    all_pdf = []
    with open("./pdf_url.txt","r",encoding="utf-8") as f:
    web_url = [i.strip() for i in f.readlines()]
    header = {'user-agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/91.0.4472.114 Safari/537.36 Edg/91.0.864.54'}

    for url in tqdm(web_url):
    result = req.get(url,headers=header)
    bs_obj = BeautifulSoup(result.text, 'lxml')
    pdf_url = bs_obj.find_all(class_ ="pdf-link")[0].get("href")
    all_pdf.append(pdf_url)
    time.sleep(0.5)
    print(all_pdf)
    这样就可以获取所有的pdf链接,使用requests库继续获取所有的pdf就可以了
    python代码:
    import os
    if not os.path.exists("./pdf_results/"):os.mkdir("pdf_results")
    for index, pdf_url in tqdm(enumerate(all_pdf)):
    result = req.get(pdf_url, headers=header)
    with open(f"./pdf_results/{index}.pdf", "wb") as f:
    f.write(result.content)
    time.sleep(0.5)
    最终结果我也保存在百度云里了,分享给你

    链接:https://pan.baidu.com/s/16_QpPGWGpUvRwAiveQSO_g
    提取码:0000
    👍👍👍
  • Y先生
    5楼
    Y先生 2021-07-01 13:25:17
    Y先生第一步,使用js代码把页面的url打印出来,代码是:
    let b = document.getElementsByTagName("tbody")[0].getElementsByTagName("a");
    let sum = "";
    for (var i = 0; i < b.length; i++) {
    if (b[i].innerText.length >= 6) { sum += b[i].href;
    sum += "\n" }
    }
    console.log(sum)
    第二步,把打印出的网址复制保存在文件夹中,使用requests库依次访问,获取每个网页对应pdf的url
    python代码:
    import requests as req
    import time
    from bs4 import BeautifulSoup
    from tqdm import tqdm

    all_pdf = []
    with open("./pdf_url.txt","r",encoding="utf-8") as f:
    web_url = [i.strip() for i in f.readlines()]
    header = {'user-agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/91.0.4472.114 Safari/537.36 Edg/91.0.864.54'}

    for url in tqdm(web_url):
    result = req.get(url,headers=header)
    bs_obj = BeautifulSoup(result.text, 'lxml')
    pdf_url = bs_obj.find_all(class_ ="pdf-link")[0].get("href")
    all_pdf.append(pdf_url)
    time.sleep(0.5)
    print(all_pdf)
    这样就可以获取所有的pdf链接,使用requests库继续获取所有的pdf就可以了
    python代码:
    import os
    if not os.path.exists("./pdf_results/"):os.mkdir("pdf_results")
    for index, pdf_url in tqdm(enumerate(all_pdf)):
    result = req.get(pdf_url, headers=header)
    with open(f"./pdf_results/{index}.pdf", "wb") as f:
    f.write(result.content)
    time.sleep(0.5)
    最终结果我也保存在百度云里了,分享给你

    链接:https://pan.baidu.com/s/16_QpPGWGpUvRwAiveQSO_g
    提取码:0000
    flzt谢谢!👍
    不客气,互相帮助. btw我觉得这个网站挺不错的😝
  • flzt
    4楼
    flzt (楼主) 2021-07-01 09:07:39
    Y先生第一步,使用js代码把页面的url打印出来,代码是:
    let b = document.getElementsByTagName("tbody")[0].getElementsByTagName("a");
    let sum = "";
    for (var i = 0; i < b.length; i++) {
    if (b[i].innerText.length >= 6) { sum += b[i].href;
    sum += "\n" }
    }
    console.log(sum)
    第二步,把打印出的网址复制保存在文件夹中,使用requests库依次访问,获取每个网页对应pdf的url
    python代码:
    import requests as req
    import time
    from bs4 import BeautifulSoup
    from tqdm import tqdm

    all_pdf = []
    with open("./pdf_url.txt","r",encoding="utf-8") as f:
    web_url = [i.strip() for i in f.readlines()]
    header = {'user-agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/91.0.4472.114 Safari/537.36 Edg/91.0.864.54'}

    for url in tqdm(web_url):
    result = req.get(url,headers=header)
    bs_obj = BeautifulSoup(result.text, 'lxml')
    pdf_url = bs_obj.find_all(class_ ="pdf-link")[0].get("href")
    all_pdf.append(pdf_url)
    time.sleep(0.5)
    print(all_pdf)
    这样就可以获取所有的pdf链接,使用requests库继续获取所有的pdf就可以了
    python代码:
    import os
    if not os.path.exists("./pdf_results/"):os.mkdir("pdf_results")
    for index, pdf_url in tqdm(enumerate(all_pdf)):
    result = req.get(pdf_url, headers=header)
    with open(f"./pdf_results/{index}.pdf", "wb") as f:
    f.write(result.content)
    time.sleep(0.5)
    最终结果我也保存在百度云里了,分享给你

    链接:https://pan.baidu.com/s/16_QpPGWGpUvRwAiveQSO_g
    提取码:0000
    谢谢!👍
  • 团团
    板凳
    团团 2021-06-30 15:53:20
    Y先生第一步,使用js代码把页面的url打印出来,代码是:
    let b = document.getElementsByTagName("tbody")[0].getElementsByTagName("a");
    let sum = "";
    for (var i = 0; i < b.length; i++) {
    if (b[i].innerText.length >= 6) { sum += b[i].href;
    sum += "\n" }
    }
    console.log(sum)
    第二步,把打印出的网址复制保存在文件夹中,使用requests库依次访问,获取每个网页对应pdf的url
    python代码:
    import requests as req
    import time
    from bs4 import BeautifulSoup
    from tqdm import tqdm

    all_pdf = []
    with open("./pdf_url.txt","r",encoding="utf-8") as f:
    web_url = [i.strip() for i in f.readlines()]
    header = {'user-agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/91.0.4472.114 Safari/537.36 Edg/91.0.864.54'}

    for url in tqdm(web_url):
    result = req.get(url,headers=header)
    bs_obj = BeautifulSoup(result.text, 'lxml')
    pdf_url = bs_obj.find_all(class_ ="pdf-link")[0].get("href")
    all_pdf.append(pdf_url)
    time.sleep(0.5)
    print(all_pdf)
    这样就可以获取所有的pdf链接,使用requests库继续获取所有的pdf就可以了
    python代码:
    import os
    if not os.path.exists("./pdf_results/"):os.mkdir("pdf_results")
    for index, pdf_url in tqdm(enumerate(all_pdf)):
    result = req.get(pdf_url, headers=header)
    with open(f"./pdf_results/{index}.pdf", "wb") as f:
    f.write(result.content)
    time.sleep(0.5)
    最终结果我也保存在百度云里了,分享给你

    链接:https://pan.baidu.com/s/16_QpPGWGpUvRwAiveQSO_g
    提取码:0000
    点赞👍
  • 852
    椅子
    852 2021-06-28 12:03:35
    Y先生第一步,使用js代码把页面的url打印出来,代码是:
    let b = document.getElementsByTagName("tbody")[0].getElementsByTagName("a");
    let sum = "";
    for (var i = 0; i < b.length; i++) {
    if (b[i].innerText.length >= 6) { sum += b[i].href;
    sum += "\n" }
    }
    console.log(sum)
    第二步,把打印出的网址复制保存在文件夹中,使用requests库依次访问,获取每个网页对应pdf的url
    python代码:
    import requests as req
    import time
    from bs4 import BeautifulSoup
    from tqdm import tqdm

    all_pdf = []
    with open("./pdf_url.txt","r",encoding="utf-8") as f:
    web_url = [i.strip() for i in f.readlines()]
    header = {'user-agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/91.0.4472.114 Safari/537.36 Edg/91.0.864.54'}

    for url in tqdm(web_url):
    result = req.get(url,headers=header)
    bs_obj = BeautifulSoup(result.text, 'lxml')
    pdf_url = bs_obj.find_all(class_ ="pdf-link")[0].get("href")
    all_pdf.append(pdf_url)
    time.sleep(0.5)
    print(all_pdf)
    这样就可以获取所有的pdf链接,使用requests库继续获取所有的pdf就可以了
    python代码:
    import os
    if not os.path.exists("./pdf_results/"):os.mkdir("pdf_results")
    for index, pdf_url in tqdm(enumerate(all_pdf)):
    result = req.get(pdf_url, headers=header)
    with open(f"./pdf_results/{index}.pdf", "wb") as f:
    f.write(result.content)
    time.sleep(0.5)
    最终结果我也保存在百度云里了,分享给你

    链接:https://pan.baidu.com/s/16_QpPGWGpUvRwAiveQSO_g
    提取码:0000
    👍
  • Y先生
    沙发
    Y先生 2021-06-28 12:02:35
    第一步,使用js代码把页面的url打印出来,代码是:
    let b = document.getElementsByTagName("tbody")[0].getElementsByTagName("a");
    let sum = "";
    for (var i = 0; i < b.length; i++) {
    if (b[i].innerText.length >= 6) { sum += b[i].href;
    sum += "\n" }
    }
    console.log(sum)
    第二步,把打印出的网址复制保存在文件夹中,使用requests库依次访问,获取每个网页对应pdf的url
    python代码:
    import requests as req
    import time
    from bs4 import BeautifulSoup
    from tqdm import tqdm

    all_pdf = []
    with open("./pdf_url.txt","r",encoding="utf-8") as f:
    web_url = [i.strip() for i in f.readlines()]
    header = {'user-agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/91.0.4472.114 Safari/537.36 Edg/91.0.864.54'}

    for url in tqdm(web_url):
    result = req.get(url,headers=header)
    bs_obj = BeautifulSoup(result.text, 'lxml')
    pdf_url = bs_obj.find_all(class_ ="pdf-link")[0].get("href")
    all_pdf.append(pdf_url)
    time.sleep(0.5)
    print(all_pdf)
    这样就可以获取所有的pdf链接,使用requests库继续获取所有的pdf就可以了
    python代码:
    import os
    if not os.path.exists("./pdf_results/"):os.mkdir("pdf_results")
    for index, pdf_url in tqdm(enumerate(all_pdf)):
    result = req.get(pdf_url, headers=header)
    with open(f"./pdf_results/{index}.pdf", "wb") as f:
    f.write(result.content)
    time.sleep(0.5)
    最终结果我也保存在百度云里了,分享给你

    链接:https://pan.baidu.com/s/16_QpPGWGpUvRwAiveQSO_g
    提取码:0000
更新
PDF的下载单位、IP信息已删除 (2025-6-4)

科研通是完全免费的文献互助平台,具备全网最快的应助速度,最高的求助完成率。 对每一个文献求助,科研通都将尽心尽力,给求助人一个满意的交代。
实时播报
华仔应助罗成仁采纳,获得10
刚刚
bujiachong完成签到,获得积分10
刚刚
Lily完成签到,获得积分10
刚刚
我是老大应助快乐的寄容采纳,获得10
刚刚
orixero应助詹梓聪采纳,获得30
1秒前
小陈总给小陈总的求助进行了留言
1秒前
汤t完成签到,获得积分10
1秒前
诚心盼海发布了新的文献求助10
1秒前
小薇发布了新的文献求助20
1秒前
2秒前
哈哈镜发布了新的文献求助10
2秒前
小鹿完成签到,获得积分10
2秒前
鲍里斯瓦格完成签到,获得积分10
2秒前
3秒前
3秒前
3秒前
爱尚发布了新的文献求助10
3秒前
FashionBoy应助沿途一天采纳,获得10
3秒前
Akim应助滑腻腻的小鱼采纳,获得10
3秒前
特洛伊发布了新的文献求助10
3秒前
波啦啦发布了新的文献求助10
3秒前
开心匪发布了新的文献求助10
4秒前
4秒前
SciGPT应助张达采纳,获得10
4秒前
happystar发布了新的文献求助30
4秒前
Iris发布了新的文献求助10
4秒前
思源应助xsh采纳,获得10
4秒前
4秒前
5秒前
5秒前
Trista0036发布了新的文献求助10
6秒前
6秒前
胡哲完成签到 ,获得积分10
6秒前
Tina发布了新的文献求助10
7秒前
7秒前
量子星尘发布了新的文献求助10
7秒前
rookie_b0完成签到,获得积分10
7秒前
7秒前
kongzhounandu应助xiyang采纳,获得20
8秒前
8秒前
热门帖子
关注 科研通微信公众号,转发送积分 4576795
求助须知:如何正确求助?哪些是违规求助? 3995951
关于积分的说明 12370915
捐赠科研通 3670012
什么是DOI,文献DOI怎么找? 2022527
邀请新用户注册赠送积分活动 1056628
科研通“疑难数据库(出版商)”最低求助积分说明 943794
最新评论
第一步下载这个领域的高档次文献,然后根据内容列个提纲,整合图,开始写,用ChatGPT润色,最后查文献完稿 43分钟前
非常棒 4小时前
非常棒 5小时前
就应该给那些恶意驳回的严厉惩罚,基础的学术诚信都没有 5小时前
一、核心思路:如何实现“创新性” 综述的创新不在于做原始研究,而在于“整合与前瞻”。具体来说,有以下几个创新点切入角度: 1.跨界融合:将其他领域的最新技术(如AI、纳米技术、新型药物递送系统、物理学手段等)与肿瘤传统研究方向(免疫治疗、靶向治疗等)结合,提出新的交叉学科视角。 2.范式革新:挑战现有认知或治疗范式。例如,从“治疗癌症”转向“与癌共存”,探讨如何将癌症变为可控的慢性疾病;或系统讨论“肿瘤生态学”(TumorEcosystem),而不仅仅是肿瘤细胞本身。 3.瓶颈突破:针对某个热门领域当前面临的巨大瓶颈(如免疫治疗耐药、靶向治疗耐药、肿瘤异质性等),系统梳理最新的解决策略,并指出最有希望的方向。 4.视角升维:从更宏观的角度审视问题。例如,不局限于某种癌症,而是讨论某种机制(如铁死亡Ferroptosis、细胞焦亡Pyroptosis)在所有癌症中的共性和特性。 5.临床转化桥梁:专注于“如何将基础研究转化为临床实践”(BenchtoBedside),重点讨论临床试验的设计、生物标志物的开发、伴随诊断等,这类综述临床价值极高。 二、操作步骤:从选题到成稿 第1步:锁定前沿热点话题(紧跟时事) AI赋能肿瘤学: 选题示例:《人工智能在肿瘤影像、病理与多组学数据整合中的研究进展与挑战》 创新点:不仅总结AI在诊断中的应用,更深入探讨AI如何预测治疗反应、预后、以及指导个性化治疗方案的制定。重点关注多模态融合和可解释性AI。 核药/放射性配体疗法(RLT): 选题示例:《靶向放射性核素疗法:从前列腺癌PSMA到更广谱的肿瘤治疗前景》 创新点:紧随诺华的Pluvicto成功之后,这一领域爆炸式发展。可以综述除了PSMA之外的新靶点(如CLDN18.2,FAP等)、新型放射性核素、以及与其他疗法(如免疫治疗)的联用策略。 新型免疫治疗: 选题示例:《超越PD-1/CTLA-4:下一代免疫检查点(如LAG-3,TIGIT,CD47)的机遇与困境》 选题示例:《肿瘤微环境重塑策略:如何将“冷”肿瘤变为“热”肿瘤》 创新点:聚焦于解决当前免疫治疗耐药难题的新兴方案,如双特异性抗体、CAR-NK/TIL等细胞疗法、癌症疫苗(尤其是mRNA疫苗)的最新临床进展。 第2步:进行系统性文献调研 数据库:PubMed,WebofScience,Scopus,GoogleScholar是基础。 关键词:使用你选定话题的核心关键词及其组合进行检索。 时效性:重点关注近3-5年的文献,特别是近1-2年的高水平论文(CNS及其子刊,行业顶刊如CancerCell,NatureMedicine等)。这是体现“紧跟时事”的关键。 文献管理:使用Zotero,EndNote等工具高效管理文献。 第3步:构建独特的综述框架 不要写成简单的“文献汇编”。一个好的综述框架应该像讲一个科学故事: 1.引言:清晰定义问题,阐述该领域的重要性及当前面临的紧迫挑战。 2.主体部分: 分点论述:将你的主题分解成3-5个逻辑连贯的子话题。 纵横结合:既要有“纵”(历史发展、技术演进),也要有“横”(不同技术路线的对比、不同癌种的应用比较)。 图表辅助:制作精美的总结性图表(如机制图、技术对比表格、临床试验汇总表),这是综述的“眼睛”,能极大提升质量。 3.讨论与展望:这是全文的灵魂,体现你创新性思考的地方。 总结现有研究的共识与争议。 犀利地指出当前研究的空白和局限性。 大胆预测未来5年的发展方向(技术突破、临床转化路径、可能的新范式等)。 4.结论:简明扼要地概括全文核心观点。 第4步:写作与投稿 目标期刊选择:在写作前或写作中就要选定3-5个目标核心期刊。 国内核心:如《中华肿瘤杂志》、《中国癌症杂志》、《肿瘤》等。 SCI核心:影响因子5-10分的众多专业综述期刊(如CancerCommunications,MolecularCancer,JournalofHematology&Oncology)或大综合子刊(如SignalTransductionandTargetedTherapy,MilitaryMedicalResearch)。 看刊风向:仔细阅读目标期刊最近发表的文章,了解其偏好和风格。 注重语言:逻辑清晰,语言地道。如果投英文期刊,建议寻求专业英语编辑服务或母语人士润色。 认真对待审稿意见:审稿人的意见是提升论文质量的宝贵机会,逐条认真回复。 总结 要发一篇肿瘤核心综述,请牢记: 选题是第一生产力:在热门中找冷角,在成熟中找创新。 文献是基础:大量阅读最新顶刊文献,确保前沿性。 视角是灵魂:提出自己独特的、批判性的、前瞻性的观点。 图表是门面:用精美的图表提升文章档次和可读性。 希望这个详细的策略能对您有所帮助!祝您创作顺利,早日发表高分综述! 6小时前
你提问里提到材料组和对照组是同一材料?那你怎么能比较材料组对DPBF的降解性能好坏? 7小时前
很不错 17小时前
非常棒! 17小时前