스크래피 스파이더에서 사용자 정의 인수를 전달하는 방법
사용자 정의 인수를 스크래피 스파이더에 전달하려고합니다. 누구든지 그 방법에 대해 제안 할 수 있습니까?
-a
어딘가 에서 매개 변수에 대해 읽었 지만 사용 방법을 모릅니다.
옵션을 crawl
사용하여 명령 에서 스파이더 인수가 전달됩니다 -a
. 예를 들면 :
scrapy crawl myspider -a category=electronics -a domain=system
스파이더는 속성으로 인수에 액세스 할 수 있습니다.
class MySpider(scrapy.Spider):
name = 'myspider'
def __init__(self, category='', **kwargs):
self.start_urls = [f'http://www.example.com/{category}'] # py36
super().__init__(**kwargs) # python3
def parse(self, response)
self.log(self.domain) # system
Scrapy 문서에서 발췌 : http://doc.scrapy.org/en/latest/topics/spiders.html#spider-arguments
업데이트 2013 : 두 번째 인수 추가
2015 업데이트 : 문구 조정
2016 업데이트 : 최신 기본 클래스를 사용하고 @Birla에게 감사드립니다.
2017 업데이트 : Python3 super 사용
# previously
super(MySpider, self).__init__(**kwargs) # python2
2018 업데이트 : @eLRuLL이 지적했듯이 스파이더는 인수에 속성으로 액세스 할 수 있습니다.
이전 답변은 정확했지만 __init__
스크래피 스파이더를 코딩 할 때마다 생성자 ( ) 를 선언 할 필요는 없습니다 . 이전과 같이 매개 변수를 지정할 수 있습니다.
scrapy crawl myspider -a parameter1=value1 -a parameter2=value2
스파이더 코드에서 스파이더 인수로 사용할 수 있습니다.
class MySpider(Spider):
name = 'myspider'
...
def parse(self, response):
...
if self.parameter1 == value1:
# this is True
# or also
if getattr(self, parameter2) == value2:
# this is also True
그리고 그것은 작동합니다.
크롤링 명령으로 인수를 전달하려면
스크래피 크롤링 myspider -a category = 'mycategory'-a domain = 'example.com'
scrapyd에서 실행할 인수를 전달하려면 -a 를 -d로 바꿉니다.
curl http://your.ip.address.here:port/schedule.json -d spider = myspider -d category = 'mycategory'-d domain = 'example.com'
스파이더는 생성자에서 인수를받습니다.
class MySpider(Spider):
name="myspider"
def __init__(self,category='',domain='', *args,**kwargs):
super(MySpider, self).__init__(*args, **kwargs)
self.category = category
self.domain = domain
Scrapy puts all the arguments as spider attributes and you can skip the init method completely. Beware use getattr method for getting those attributes so your code does not break.
class MySpider(Spider):
name="myspider"
start_urls = ('https://httpbin.org/ip',)
def parse(self,response):
print getattr(self,'category','')
print getattr(self,'domain','')
Spider arguments are passed while running the crawl command using the -a option. For example if i want to pass a domain name as argument to my spider then i will do this-
scrapy crawl myspider -a domain="http://www.example.com"
And receive arguments in spider's constructors:
class MySpider(BaseSpider):
name = 'myspider'
def __init__(self, domain='', *args, **kwargs):
super(MySpider, self).__init__(*args, **kwargs)
self.start_urls = [domain]
#
...
it will work :)
참고URL : https://stackoverflow.com/questions/15611605/how-to-pass-a-user-defined-argument-in-scrapy-spider
'IT story' 카테고리의 다른 글
iOS Nested View Controllers view inside UIViewController 's view? (0) | 2020.09.15 |
---|---|
git gc fatal을 처리하는 방법 : 잘못된 개체 참조 / 원격 / 원본 / HEAD 오류 : 재팩을 실행하지 못했습니다. (0) | 2020.09.15 |
Android Fragment onClick 버튼 방법 (0) | 2020.09.15 |
+를 사용하여 람다에 대한 함수 포인터 및 std :: function에 대한 모호한 오버로드 해결 (0) | 2020.09.14 |
CoordinatorLayout이란 무엇입니까? (0) | 2020.09.14 |