清晨好,您是今天最早来到科研通的研友!由于当前在线用户较少,发布求助请尽量完整的填写文献信息,科研通机器人24小时在线,伴您科研之路漫漫前行!

用Python 爬虫批量下载PDF文档

综合讨论 13062 6
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
科研通是完全免费的文献互助平台,具备全网最快的应助速度,最高的求助完成率。 对每一个文献求助,科研通都将尽心尽力,给求助人一个满意的交代。
实时播报
naczx完成签到,获得积分0
9秒前
28秒前
LZQ发布了新的文献求助10
31秒前
不愿透露姓名科研人完成签到 ,获得积分10
32秒前
anitachiu1104发布了新的文献求助10
32秒前
39秒前
cdercder应助科研通管家采纳,获得20
55秒前
cdercder应助科研通管家采纳,获得20
55秒前
tianshanfeihe完成签到 ,获得积分10
55秒前
arsenal完成签到 ,获得积分10
1分钟前
1分钟前
adkdad完成签到,获得积分10
1分钟前
Kevin完成签到,获得积分10
1分钟前
青出于蓝蔡完成签到,获得积分10
1分钟前
2分钟前
椒盐皮皮虾完成签到 ,获得积分10
2分钟前
lyy完成签到 ,获得积分10
2分钟前
乐观的星月完成签到 ,获得积分10
2分钟前
科研通AI2S应助科研通管家采纳,获得10
2分钟前
cdercder应助科研通管家采纳,获得20
2分钟前
和谐诗双完成签到 ,获得积分10
2分钟前
ZaZa完成签到,获得积分10
3分钟前
3分钟前
4分钟前
1437594843完成签到 ,获得积分10
4分钟前
4分钟前
涤生发布了新的文献求助10
4分钟前
章铭-111完成签到 ,获得积分10
4分钟前
ybheart完成签到,获得积分10
4分钟前
李爱国应助涤生采纳,获得10
4分钟前
tjbdlyh完成签到 ,获得积分10
4分钟前
彭于晏应助单纯的雅香采纳,获得10
4分钟前
共享精神应助科研通管家采纳,获得10
4分钟前
在水一方应助科研通管家采纳,获得10
4分钟前
哈哈哈发布了新的文献求助10
5分钟前
深情安青应助哈哈哈采纳,获得10
5分钟前
糟糕的翅膀完成签到,获得积分10
5分钟前
5分钟前
huanghe完成签到,获得积分10
6分钟前
6分钟前
热门帖子
关注 科研通微信公众号,转发送积分 3773680
求助须知:如何正确求助?哪些是违规求助? 3319180
关于积分的说明 10193456
捐赠科研通 3033816
什么是DOI,文献DOI怎么找? 1664736
邀请新用户注册赠送积分活动 796293
科研通“疑难数据库(出版商)”最低求助积分说明 757416
最新评论
Z的优势是不是中文资料较多? 3小时前
没有积分了 7小时前
感谢大佬!还有问题想问问。 1、是只能被看做增加顺铂敏感性吗? 2、我看有文献说种皮下可能会出现过度反应,就是对同一个药物,可能皮下的响应更灵敏,请问是这样的吗? 11小时前
文献应助,就是去帮别人下文献 12小时前
没有积分了 13小时前
1.你这么接种不是做耐药的,体外筛选一下耐药株再接种最好。 2. 推荐皮下,这样方便观察 3. 可以用瘤内注射方式 14小时前
我也想问这个问题,怎么可以多点积分 19小时前
非常好用 请赐给我一些积分吧 孩子要毕业了 球球了 1天前