使用Scrapy从网站查找并下载pdf文件

2023-12-31

我的任务是使用 Scrapy 从网站上提取 pdf 文件。我对 Python 并不陌生,但 Scrapy 对我来说却很陌生。我一直在尝试控制台和一些基本的蜘蛛。我找到并修改了这段代码:

import urlparse
import scrapy

from scrapy.http import Request

class pwc_tax(scrapy.Spider):
    name = "pwc_tax"

    allowed_domains = ["www.pwc.com"]
    start_urls = ["http://www.pwc.com/us/en/tax-services/publications/research-and-insights.html"]

    def parse(self, response):
        base_url = "http://www.pwc.com/us/en/tax-services/publications/research-and-insights.html"
        for a in response.xpath('//a[@href]/@href'):
            link = a.extract()
            if link.endswith('.pdf'):
                link = urlparse.urljoin(base_url, link)
                yield Request(link, callback=self.save_pdf)

    def save_pdf(self, response):
        path = response.url.split('/')[-1]
        with open(path, 'wb') as f:
            f.write(response.body)

我在命令行中运行此代码

scrapy crawl mySpider

我什么也没得到。我没有创建 scrapy 项目,因为我想抓取并下载文件,没有元数据。我将不胜感激任何帮助。


蜘蛛的逻辑似乎不正确。

我快速浏览了您的网站,似乎有几种类型的页面:

  1. http://www.pwc.com/us/en/tax-services/publications/research-and-insights.html http://www.pwc.com/us/en/tax-services/publications/research-and-insights.html初始页面
  2. 特定文章的网页,例如http://www.pwc.com/us/en/tax-services/publications/insights/australia-introduces-new-foreign-resident-cgt-withholding-regime.html http://www.pwc.com/us/en/tax-services/publications/insights/australia-introduces-new-foreign-resident-cgt-withholding-regime.html可以从第 1 页导航
  3. 实际的 PDF 位置,例如http://www.pwc.com/us/en/state-local-tax/newsletters/salt-insights/assets/pwc-wotc-precertification-period-extended-to-june-29.pdf http://www.pwc.com/us/en/state-local-tax/newsletters/salt-insights/assets/pwc-wotc-precertification-period-extended-to-june-29.pdf可以从第 2 页进行导航

因此,正确的逻辑如下:首先获取#1 页面,然后获取#2 页面,然后我们可以下载#3 页面。
然而,您的蜘蛛会尝试直接从#1 页面提取指向#3 页面的链接。

EDITED:

我已经更新了您的代码,这是实际有效的代码:

import urlparse
import scrapy

from scrapy.http import Request

class pwc_tax(scrapy.Spider):
    name = "pwc_tax"

    allowed_domains = ["www.pwc.com"]
    start_urls = ["http://www.pwc.com/us/en/tax-services/publications/research-and-insights.html"]

    def parse(self, response):
        for href in response.css('div#all_results h3 a::attr(href)').extract():
            yield Request(
                url=response.urljoin(href),
                callback=self.parse_article
            )

    def parse_article(self, response):
        for href in response.css('div.download_wrapper a[href$=".pdf"]::attr(href)').extract():
            yield Request(
                url=response.urljoin(href),
                callback=self.save_pdf
            )

    def save_pdf(self, response):
        path = response.url.split('/')[-1]
        self.logger.info('Saving PDF %s', path)
        with open(path, 'wb') as f:
            f.write(response.body)
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

使用Scrapy从网站查找并下载pdf文件 的相关文章

随机推荐

  • 如何在android studio中打开android文档和代码示例

    我已经在 SDK 管理器帮助下下载了所有文档 但是下载后如何在Android Studio中打开这个文档和代码示例呢 根据Android Studio 提示和技巧 https developer android com sdk instal
  • 第一次期望失败后停止茉莉花测试

    我熟悉 python 单元测试测试 如果断言失败 该测试将被标记为 失败 并继续进行其他测试 另一方面 即使其中一个失败 茉莉花也会继续完成所有期望 如何让 Jasmine 在第一个期望失败后停止处理测试 it shouldn t need
  • 读取短信,生成点击,然后以编程方式删除

    使用广播接收器可以完美执行 在清单文件中添加权限 例如
  • 可以在 iOS 和 Android 上跨平台使用静态 .a-library 吗? (.so 和 .dylib 怎么样?)

    我已经使用 Xcode 创建了一个适用于 iOS 的静态库 扩展名为 a 这些是我的构建设置 架构 armv6 armv7 基础 SDK iOS 4 3 仅构建活动架构 否 支持的平台 iphoneos iphonesimulator 有效
  • SwiftUI 依赖注入

    我有一个 SwiftUI 应用程序 它是一个基于选项卡的应用程序 struct Tab View View var body some View TabView Main1 View tabItem Text Blah 1 Image Ta
  • 如何在useEffect中向useRef添加事件监听器

    我正在构建一个自定义挂钩 我想在其中添加事件侦听器到引用 但我不确定如何正确清理 因为listRef and listRef current可以为空 export const myHook MyHook gt const listRef u
  • Poetry 未使用正确版本的 Python

    我最近安装了 Pyenv 和 Poetry 并想创建一个新的 Python 3 8 项目 我已经设置了global and localpython 的版本为3 8 1使用适当的 Pyenv 命令 pyenv global 3 8 1例如 当
  • 如何从 Azure Active Directory 获取邮递员中的用户角色声明?

    我在我的 Azure AD 帐户中添加了一些用户 我想通过以声明的形式从 Postman 调用 Azure API 来获取这些用户的角色和用户信息 我尝试使用以下参数调用以下 URL https login microsoftonline
  • 从列表中删除对象 - 包含字符串 - 比较列表

    我的问题是 如何通过将对象与第二个列表进行比较来从列表中删除对象 List1 第一个列表包含电子邮件地址 List2 第二个列表包含仅域格式为 domain com etc 我想从第一个列表中删除包含第二个列表中的域的对象 电子邮件 例如
  • 在 R 中播种用户提供的随机数生成器

    我在 R 中播种用户定义的 RNG 时遇到了一些麻烦 看起来 set seed 123 kind user normal kind user 实际上并没有通过123到用户定义的 RNG 初始化 我回到了可用的文档 Random user并尝
  • 可以使用单个命令在 Eclipse 中重命名多个 Java 包吗?

    我在 Eclipse 中的 Java 项目结构如下所示 myproject src main java com mypackage mysubpackage1 com mypackage mysubpackage2 com mypackag
  • 意外发生致命信号 16 (SIGSTKFLT)

    今天我遇到了一个奇怪的问题 我在三台设备上安装了我的应用程序 华硕 Transformer Pad Infinity TF700T 三星 I9082 Galaxy Grand Duo LG Optimus L7 II 双 p715 首先 我
  • 64 位应用程序与 32 位进程通信

    我有使用 32 位第三方库的 32 位应用程序 现在我必须将我的应用程序设为 64 位 以便它可以利用 64 位地址空间 大内存 由于我无法将 32 位库加载到 64 位应用程序进程中 因此我正在考虑在第三方库上创建 32 位可执行包装器
  • 忽略 python 文件的其余部分

    我的 python 脚本通常在文件的第一部分包含 可执行代码 函数 类等 在末尾包含 测试代码 交互式实验 I want python py compile pylint c 完全忽略最后的实验内容 我正在寻找类似的东西 if 0 for
  • 如何混合两个ARGB像素?

    如何混合两个 ARGB 像素 Example 这里 A 是 带有 Alpha 的红色 B 是 带有 Alpha 的蓝色 取自您获得图像的同一篇维基百科文章 转换为 0 到 255 范围内的值 rOut rA aA 255 rB aB 255
  • git svn windows linux 空格问题

    我在 Linux 上使用 git 带有 git svn 而一位同事在 Windows 上使用 svn 很多次 git 都会报告空格问题 事实上 由于这些问题 它无法提交线性历史记录并产生合并冲突 在 Windows 和 Linux 上配置
  • 如何将参数传递给用 ActionScript 编写的自定义组件

    我有一个用 ActionScript 编写的自定义组件 它有一个需要一些参数的构造函数 我想像这样在 mxml 中包含该自定义组件 主 mxml
  • 最佳 Ansi Escape 开头

    哪个 Ansi 转义序列是最便携和 或最好的 为什么 1 u001B 32 1mThis is bright green u001B 0m 2 x1B 33 1mThis is bright yellow x1B 0m 3 e 35 4 1
  • 变量的类型(列表)无效

    我正在尝试在 R 中运行方差分析模型 我有一个包含 3 行和 12 列的数据文件 每行都是解释变量特定水平的数据 单元格 i j 是级别 i 的第 j 个响应 该文件的扩展名为 dat 我正在运行以下 R 代码来尝试获取 36 x 2 数据
  • 使用Scrapy从网站查找并下载pdf文件

    我的任务是使用 Scrapy 从网站上提取 pdf 文件 我对 Python 并不陌生 但 Scrapy 对我来说却很陌生 我一直在尝试控制台和一些基本的蜘蛛 我找到并修改了这段代码 import urlparse import scrap