Scrapy Python - 如何传递URL并检索Scraping的URL

时间:2016-11-28 14:30:21

标签: python scrapy-spider

我对Java的编程经验很少。

我正在尝试进入python并且在理解我正在尝试设置的scrapy网络爬虫时遇到问题。

该脚本将从网站上抓取产品等并将它们放入文件中,并递归遍历网站内的所有登陆域,但停在指定的深度。

我无法理解如何将脚本中传出的URL传递给我发现的scrapy示例。

执行我的蜘蛛的代码:

Scrappy Code就在这里--------------------------------

process = CrawlerProcess({
    'USER_AGENT': 'Mozilla/4.0 (compatible; MSIE 7.0; Windows NT 5.1)'
})

process.crawl(UrlScrappyRunner, domain="www.google.com")
process.start()

我的蜘蛛:

class UrlScrappyRunner(scrapy.Spider):

        name = "quotes"

        def start_requests(self):
            urls = [
                'http://quotes.toscrape.com/page/1/',
                'http://quotes.toscrape.com/page/2/',
            ]
            for url in urls:
                yield scrapy.Request(url=url, callback=self.parse)

        def parse(self, response):
            page = response.url.split("/")[-2]
            filename = 'quotes-%s.html' % page
            with open(filename, 'wb') as f:
                f.write(response.body)
            self.log('Saved file %s' % filename)

请您告诉我如何将domain = www.google.com传递给我的蜘蛛,以便抓取谷歌而不是quotes.toscrape.com?

2 个答案:

答案 0 :(得分:1)

您可以在scrapy中使用argumets -a来传递用户定义的值

class UrlScrappyRunner(scrapy.Spider):
            name = "quotes"

           def __init__(self, domain=None, *args, **kwargs):
                self.domain = domain

            def start_requests(self):
                urls = self.domain

以参数

运行
scrapy crawl UrlScrappyRunner -a domain="www.google.com"

从流程运行:

process.crawl(UrlScrappyRunner, domain="www.google.com")

在您的代码中添加__init__并在您的类变量中分配域值

答案 1 :(得分:0)

这是如何将url作为参数传递给Scrapy 1.4.0上的CrawlerProcess蜘蛛:

<强> main.py

from scrapy.crawler import CrawlerProcess
from myspider import MySpider

if __name__ == '__main__':
  process = CrawlerProcess({
    'USER_AGENT': 'Mozilla/4.0 (compatible; MSIE 7.0; Windows NT 5.1)',
    'FEED_URI': destination_file_uri  # URI to destination file
  })
  process.crawl(MySpider, myurls=[
    'http://example.com'
  ])

其中destination_file_uri类似于&#34; file:///path/to/results.json"。

<强> myspider.py

import scrapy
from scrapy.http.request import Request

class MySpider(scrapy.Spider):
    name = 'myspider'

    def __init__(self, *args, **kwargs):
        self.myurls = kwargs.get('myurls', [])
        super(MySpider, self).__init__(*args, **kwargs)

    def start_requests(self):
        for url in self.myurls:
            yield Request(url, self.parse)

    def parse(self, response):
        """ Test: extract quotes """
        for quote in response.xpath('//blockquote').extract():
            yield {"quote": quote}

其中 myurls 是一个尚未使用的属性名称(您可以更改它)。