Необходимо скачать все. PDF-файл в указанном URL, используя scrapy - PullRequest
0 голосов
/ 25 октября 2018

** Я пытался запустить этот scrap Query, чтобы загрузить все связанные PDF с указанного URL **

Я пытался выполнить это с помощью «scrapy crawl mySpider»

import urlparse
import scrapy

from scrapy.http import Request

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

    allowed_domains = ["www.sec.gov"]
    start_urls = ["https://secsearch.sec.gov/search?utf8=%3F&affiliate=secsearch&query=exhibit+10"]

    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)

Кто-нибудь может мне с этим помочь ?Заранее спасибо.

Ответы [ 2 ]

0 голосов
/ 25 октября 2018

Недостатки в коде:

http://www.pwc.com/us/en/tax-services/publications/research-and-insights.html этот URL перенаправляет на https://www.pwc.com/us/en/services/tax/library.html

Также нет div с идентификатором all_results , поэтомув ответе html, возвращенном сканеру, отсутствует div # all_results.Таким образом, первая строка кода в методе разбора должна генерировать ошибку.

Чтобы команда 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

0 голосов
/ 25 октября 2018

Вы должны запустить команду в каталоге, где находится scrapy.cfg.

...