0

PDF ファイルが存在する Web ページ上のすべてのリンクにアクセスし、これらの PDF ファイルをシステムに保存したいと考えています。

from scrapy.spider import BaseSpider
from scrapy.selector import HtmlXPathSelector
from scrapy.http import Request
from bs4 import BeautifulSoup


class spider_a(BaseSpider):
    name = "Colleges"
    allowed_domains = ["http://www.abc.org"]
    start_urls = [
        "http://www.abc.org/appwebsite.html",
        "http://www.abc.org/misappengineering.htm",
    ]

    def parse(self, response):
        soup = BeautifulSoup(response.body)
        for link in soup.find_all('a'):
            download_link = link.get('href')
            if '.pdf' in download_link:
                pdf_url = "http://www.abc.org/" + download_link
                print pdf_url

上記のコードを使用すると、pdf ファイルが存在する意図したページのリンクを見つけることができます

from scrapy.spider import BaseSpider
from scrapy.selector import HtmlXPathSelector

class FileSpider(BaseSpider):
    name = "fspider"
    allowed_domains = ["www.aicte-india.org"]
    start_urls = [
        "http://www.abc.org/downloads/approved_institut_websites/an.pdf#toolbar=0&zoom=85"
    ]

    def parse(self, response):
        filename = response.url.split("/")[-1]
        open(filename, 'wb').write(response.body)

このコードを使用すると、 にリストされているページの本文を保存できますstart_urls

クローラーを実行してこれらの pdf を保存できるように、これらの両方のスパイダーに参加する方法はありますか?

4

1 に答える 1

2

なぜ 2 つのクモが必要なのですか?

from urlparse import urljoin
from scrapy.http import Request
from scrapy.selector import HtmlXPathSelector

class spider_a(BaseSpider):
    ...
    def parse(self, response):
        hxs = HtmlXPathSelector(response)
        for href in hxs.select('//a/@href[contains(.,".pdf")]'):
            yield Request(urljoin(response.url, href),
                    callback=self.save_file)

    def save_file(self, response):
        filename = response.url.split("/")[-1]
        with open(filename, 'wb') as f:
            f.write(response.body)
于 2013-04-23T00:50:10.970 に答える