资讯专栏INFORMATION COLUMN

批量抓取网页pdf文件

icyfire / 3900人阅读

摘要:任务批量抓取网页文件有一个,里面有数千条指向下载链接的网页地址,现在,需要批量抓取这些网页地址中的文件。利用,具体逻辑是正常情况下,按次序下载文件,如果同一文件,下载失败次数超过,则跳过,下载下一个文件,并记录错误信息。

任务:批量抓取网页pdf文件

有一个excel,里面有数千条指向pdf下载链接的网页地址,现在,需要批量抓取这些网页地址中的pdf文件。
python环境:

anaconda3
openpyxl
beautifulsoup4
读取excel,获取网页地址

使用openpyxl库,读取.xslx文件;
(曾尝试使用xlrd库读取.xsl文件,但无法获取超链接)

安装openpyxl

pip install openpyxl

提取xslx文件中的超链接

示例文件构造

公告日期 证券代码 公告标题
2018-04-20 603999.SH 读者传媒:2017年年度报告
2018-04-28 603998.SH 方盛制药:2017年年度报告
def  readxlsx(path):
    workbook = openpyxl.load_workbook(path)
    Data_sheet = workbook.get_sheet_by_name("sheet1")
    rowNum = Data_sheet.max_row #读取最大行数
    c =  3  # 第三列是所需要提取的数据
    server =  "http://news.windin.com/ns/"
    for  row  in  range(1, rowNum  +  1):
        link = Data_sheet.cell(row=row, column=c).value
        url = re.split(r""", link)[1]
        print(url)
        downEachPdf(url, server)
获取网页pdf下载地址

进入读者传媒:2017年年度报告,在chrome浏览器中可以按F12查看网页源码,以下截取部分源码:

可见,herf下载链接在a标签中,可以通过解析html源码获取下载链接。
这里使用BeautifulSoup解析html。

Beautiful Soup 是用Python写的一个HTML/XML的解析器,它可以很好的处理不规范标记并生成剖析树(parse tree)。 它提供简单又常用的导航(navigating),搜索以及修改剖析树的操作。它可以大大节省你的编程时间。

安装BeautifulSoup4

pip install beautifulsoup4

获取pdf下载链接并下载

def  downEachPdf(target, server):
    req = requests.get(url=target)
    html = req.text
    bf = BeautifulSoup(html, features="lxml")
    a = bf.find_all("a")
    for each in a:
        url = server + each.get("href")
        print("downloading:", each.string, url)
        urllib.request.urlretrieve(url, "./report/" + each.string)
同一ip重复访问同一服务器被拒绝

利用以上方法已经能够实现批量网页pdf的下载了,但是,在实际操作过程中,会发现如果同一ip频繁地访问某一服务器,访问会被拒绝(可能被误判为DOS攻击,通常做了Rate-limit的网站都会停止响应一段时间,你可以Catch这个Exception,sleep一段时间,参考)。因此,对下载逻辑进行了调整。
利用try-catch,具体逻辑是:正常情况下,按次序下载文件,如果同一文件,下载失败次数超过10,则跳过,下载下一个文件,并记录错误信息。

import os
import time
def  downloadXml(flag_exists, file_dir, file_name, xml_url):
    if  not flag_exists:
        os.makedirs(file_dir)
        local = os.path.join(file_dir, file_name)
    try:
        urllib.request.urlretrieve(xml_url, local)
    except  Exception  as e:
        print("the first error: ", e)
        cur_try =  0
        total_try =  10
        if cur_try < total_try:
            cur_try +=  1
            time.sleep(15)
            return downloadXml(flag_exists, file_dir, file_name, xml_url)
    else:
        print("the last error: ")
        with  open(test_dir +  "error_url.txt", "a") as f:
            f.write(xml_url)
        raise  Exception(e)

文章版权归作者所有,未经允许请勿转载,若此文章存在违规行为,您可以联系管理员删除。

转载请注明本文地址:https://www.ucloud.cn/yun/43180.html

相关文章

  • 批量抓取网页pdf文件

    摘要:任务批量抓取网页文件有一个,里面有数千条指向下载链接的网页地址,现在,需要批量抓取这些网页地址中的文件。利用,具体逻辑是正常情况下,按次序下载文件,如果同一文件,下载失败次数超过,则跳过,下载下一个文件,并记录错误信息。 任务:批量抓取网页pdf文件 有一个excel,里面有数千条指向pdf下载链接的网页地址,现在,需要批量抓取这些网页地址中的pdf文件。python环境: anaco...

    pubdreamcc 评论0 收藏0
  • Puppeteer 初探

    摘要:获取获取上下文句柄执行计算销毁句柄除此之外,还可以使用意为在浏览器环境执行脚本,可传入第二个参数作为句柄,而则针对选中的一个元素执行操作。 我们日常使用浏览器或者说是有头浏览器时的步骤为:启动浏览器、打开一个网页、进行交互。 无头浏览器指的是我们使用脚本来执行以上过程的浏览器,能模拟真实的浏览器使用场景。 有了无头浏览器,我们就能做包括但不限于以下事情: 对网页进行截图保存为图片或 ...

    appetizerio 评论0 收藏0
  • 爬虫 - 收藏集 - 掘金

    摘要:在这之前,还是有必要对一些概念超轻量级反爬虫方案后端掘金前言爬虫和反爬虫日益成为每家公司的标配系统。 爬虫修炼之道——从网页中提取结构化数据并保存(以爬取糗百文本板块所有糗事为例) - 后端 - 掘金欢迎大家关注我的专题:爬虫修炼之道 上篇 爬虫修炼之道——编写一个爬取多页面的网络爬虫主要讲解了如何使用python编写一个可以下载多页面的爬虫,如何将相对URL转为绝对URL,如何限速,...

    1fe1se 评论0 收藏0
  • Python读取PDF内容

    摘要:,引言晚上翻看网络数据采集这本书,看到读取内容的代码,想起来前几天集搜客刚刚发布了一个抓取网页内容的抓取规则,这个规则能够把内容当成来做网页抓取。,把转换成文本的源代码下面的源代码,读取文件内容互联网上的或是本地的,转换成文本,打印出来。 showImg(https://segmentfault.com/img/bVwER8); 1,引言 晚上翻看《Python网络数据采集》这本书,看...

    callmewhy 评论0 收藏0
  • Node 批量爬取头条视频并保存

    摘要:目标网站西瓜视频项目功能下载头条号维辰财经下的最新个视频项目地址地址姊妹项目批量下载美女图集简介一般批量爬取视频或者图片的套路是,使用爬虫获得文件链接集合,然后通过等方法逐个保存文件。然而在批量下载时,逐个手动的获取视频链接显然不可取。 目标网站:西瓜视频 项目功能:下载头条号【维辰财经】下的最新20个视频 项目地址:Github 地址 姊妹项目:批量下载美女图集 简介 一般批量...

    Jioby 评论0 收藏0

发表评论

0条评论

最新活动
阅读需要支付1元查看
<