scrapy의spider에 매개 변수를 전달하는 몇 가지 방법

때때로 프로젝트의 실제 수요에 따라spider에 파라미터를 전달하여spider의 행위를 제어해야 한다. 예를 들어 사용자가 제출한 URL에 따라spider가 기어오르는 사이트를 제어해야 한다.이런 상황에서 두 가지 방법으로spider에 파라미터를 전달할 수 있다.
첫 번째 방법은 명령줄이crawl로 spider를 제어할 때 -a 옵션을 추가합니다. 예를 들어

scrapy crawl myspider -a category=electronics
그리고 스파이더에 이렇게 쓰세요.

import scrapy

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

  def __init__(self, category=None, *args, **kwargs):
    super(MySpider, self).__init__(*args, **kwargs)
    self.start_urls = ['http://www.example.com/categories/%s' % category]
    # ...

즉spider의 구조 함수에 가져온 파라미터를 더하면 된다.
두 번째 방법은 scrapyd로spider를 제어할 때schedule로 제어할 수 있다.json 발송-d 옵션은 매개 변수를 추가합니다. 마찬가지로spider의 구조 함수에서 위와 같이 써야 합니다.예:

$ curl http://localhost:6800/schedule.json -d project=myproject -d spider=somespider -d setting=DOWNLOAD_DELAY=2 -d arg1=val1
또한 scrapy에서 보내는request에 파라미터를 추가해야 한다면request의meta파라미터를 사용하면 되돌아오는respose 대상에서 전송된 파라미터를 얻을 수 있습니다.이것은 어떤 상황에서 상당히 유용하다. 예를 들어 이 URL이 어떤 사용자가 기어오르기를 요청했는지 확인해야 한다. 먼저 상기 두 가지 방법 중 하나로spider에 정보를 전달할 수 있다.spider는 이 정보를request에 추가한 다음에 해당하는 Reponse에서 이 정보를 URL 페이지에서 얻은 정보와 함께 데이터베이스에 저장할 수 있다.예:

def parse_page1(self, response):
  item = MyItem()
  item['main_url'] = response.url
  request = scrapy.Request("http://www.example.com/some_page.html",
               callback=self.parse_page2)
  request.meta['item'] = item
  return request

def parse_page2(self, response):
  item = response.meta['item']
  item['other_url'] = response.url
  return item

scrapy의spider에 매개 변수를 전달하는 몇 가지 방법에 대한 이 글은 여기까지 소개되었습니다. 더 많은 관련scrapyspider에 매개 변수를 전달하는 내용은 저희 이전의 글을 검색하거나 아래의 관련 글을 계속 훑어보십시오. 앞으로 많은 응원 부탁드립니다!

좋은 웹페이지 즐겨찾기