需要使用scrapy下载给定URL中的所有.pdf文件

时间:2018-10-25 12:24:37

标签: python scrapy web-crawler

**我试图运行此拼凑查询以从给定URL下载所有相关的PDF **

我尝试使用“ scrapy crawl mySpider”执行此操作

hello
yes
world
hii

有人可以帮助我吗?预先感谢。

2 个答案:

答案 0 :(得分:0)

您应该在出现scrapy.cfg的目录中运行命令。

答案 1 :(得分:-1)

代码中的缺陷:

http://www.pwc.com/us/en/tax-services/publications/research-and-insights.html 该网址重定向到https://www.pwc.com/us/en/services/tax/library.html

也没有ID为 all_results 的div,因此返回给搜寻器的html响应中不存在div#all_results。因此,parse方法中的第一行代码应产生错误。

要使scrapy crawl命令起作用,您应该位于配置文件 scrapy.cfg 所在的目录中。

修改:希望这段代码对您有所帮助。它会从给定的链接下载所有pdf。

代码

#import urllib ---> Comment this line
import scrapy

from scrapy.http import Request

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

  allowed_domains = ["www.pwc.com"]
  start_urls = ["https://www.pwc.com/us/en/services/consulting/analytics/benchmarking-services.html"]

  def parse(self, response):
    base_url = 'https://www.pwc.com'

    for a in response.xpath('//a[@href]/@href'):
        link = a.extract()
        # self.logger.info(link)

        if link.endswith('.pdf'):
            #link = urllib.parse.urljoin(base_url, link) -> Comment this

            link = base_url + link --> Add this line
            self.logger.info(link)
            yield Request(link, 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)

代码存储库位于: https://github.com/NilanshBansal/File_download_Scrapy