Python网络爬虫实战2-下载url下的pdf

1.问题描述

一个url下包含了许多连接,想要下载其中包含的pdf文件。
按一下F12 打开开发者模式,查看网页下是否有pdf的链接。点击想要查看的元素,右击,选择其中的“检查”就可以定位到具体的位置,如下图所示:
该网页为例

在这里插入图片描述
由图可以看出,网页中包含了我们想要的.pdf链接。(大多数网页都会封装编码一下,并不是直接放.pdf链接,所以具体还要看网页结构)pdf链接放在了标签为a的href中,所以下载此网页下所有的pdf可以用以下代码实现:

2.代码实现

# -*-coding:utf-8-*-
import requests
from urllib.parse import urlparse, urljoin
import os
from bs4 import BeautifulSoup

def GetUrlPdf(url,save_path):

    # 确保保存路径存在
    if not os.path.exists(save_path):
        os.makedirs(save_path)

    # 发送HTTP请求获取页面内容
    response = requests.get(url)
    response.raise_for_status()
    # 如果请求失败,则抛出HTTPError异常

    # # 使用BeautifulSoup解析HTML内容
    soup = BeautifulSoup(response.text, 'html.parser')

    # # 找到所有你想要下载的链接(需要根据实际页面结构来定位)
    # # 此页面所有文件链接都是.pdf格式,并且在一个特定的div或class中
    # # 找到所有的‘a’标签的href且结尾是‘.pdf’的
    file_links = soup.find_all('a', href=lambda href: href and href.endswith('.pdf'))

    # 遍历链接并下载文件
    for link in file_links:
        # 构建完整的文件URL(如果链接是相对路径)
        file_url = urljoin(url, link['href'])

        # 下载文件
        response = requests.get(file_url, stream=True)
        response.raise_for_status()

        # 提取文件名(这里需要根据你的URL结构或链接的href属性来提取)
        filename = os.path.basename(urlparse(file_url).path)

        # 将文件保存到本地
        with open(os.path.join(save_path, filename), 'wb') as f:
            for chunk in response.iter_content(1024):
                f.write(chunk)

        print(f'Downloaded: {filename}')

if __name__=='__mian__':
    save_path='./out'
    url='https://kf.joyoung.com/manual/lists.html?product_cid=8&id=&title=&product_sub_cid=&page=9'
    GetUrlPdf(url,save_path)

执行结果:
在这里插入图片描述

3.链接在其他属性标签

Beautiful Soup 常用命令

如果.pdf链接显式的在url,但是在其他标签标识中,使用Beautiful Soup中的find_all其他参数。
在这里插入图片描述
由上图可以看到.pdf连接在标签,属性为data-href。此时需要修改上述代码如下:

# 查找所有带有data-href属性的<a>标签
file_links = soup.find_all('a', attrs={'data-href': True})

很多时候都是封装的,只有通过模拟用户点击才能跳转到真正想要的链接,下篇学习爬虫模拟用户点击。

  • 5
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值