2013-06-10 5 views
5

이 질문에 Python과 Scrapy를 사용하고 있습니다.페이지 내에서 Scrapy를 사용하여 크롤링하는 방법은 무엇입니까?

내가 웹 웹 페이지 B1 링크, B2, B3의 목록을 포함하는에게, 크롤링을 시도하고, ...B 페이지가 다른 페이지로의 링크, C1, C2 포함 C3, ..., 이미지가 들어 있습니다. Scrapy를 사용

그래서, 의사 코드에서 아이디어는 그러나

links = getlinks(A) 
for link in links: 
    B = getpage(link) 
    C = getpage(B) 
    image = getimage(C) 

, Scrapy 하나 이상의 페이지를 구문 분석 할 때 나는 문제로 실행하고 있습니다. 나는이 일에 대해 갈 것이라고 어떻게

def parse(self, response): 
    hxs = HtmlXPathSelector(response) 
    links = hxs.select('...') 

    items = [] 
    for link in links: 
     item = CustomItem() 
     item['name'] = link.select('...') 
     # TODO: Somehow I need to go two pages deep and extract an image. 
     item['image'] = .... 

: 여기 내 코드는?

(참고 : 제 질문은 Using multiple spiders at in the project in Scrapy과 유사하지만 확실 얼마나 Scrapy의 요청 객체에서 "반환"값.) 구문 분석 방법을 사용하여 더 발행해야하는 경우 새로운 요청을 반환해야 scrapy에서

답변

6

요청 (발전기로 잘 작동하는 것처럼 yield 사용). 이 요청 내에서 원하는 함수에 대한 콜백을 설정할 수 있습니다 (재귀 적으로 다시 parse을 전달). 그게 페이지에 기어 들어가는 방법입니다.

def parse(self, response): 
    b_pages_links = getlinks(A) 
    for link in b_pages_links: 
     yield Request(link, callback = self.visit_b_page) 

def visit_b_page(self, response): 
    url_of_c_page = ... 
    yield Request(url_of_c_page, callback = self.visit_c_page) 

def visit_c_page(self, response): 
    url_of_image = ... 
    yield Request(url_of_image, callback = self.get_image) 

def get_image(self, response): 
    item = CustomItem() 
    item['name'] = ... # get image name 
    item['image'] = ... # get image data 
    yield item 

는 또한 scrapy documentationthese random code snippets을 확인하십시오

당신은 당신의 예를 다음 예를

으로 this recursive crawler을 확인할 수의 변화는 다음과 같이 될 것이다. 그들은 많은 것을 도울 수 있습니다 :)

+0

고마워, 이건 최고야. 'parse' 메쏘드에서'CustomItem'을 만들고 싶다면 메타 속성을 사용하여 그것을 전달합니까? – sdasdadas

+0

또한 항목 목록 ('items = []')을 반환하고 싶습니다. 위의 내용을 어떻게 사용하고 완성시 목록에 항목을 추가합니까? – sdasdadas

+0

거미 전용 기능은 페이지를 방문하여 데이터를 추출하여 반환합니다 (최종 '수익률 항목'). 모든 항목을 목록에 넣는 것과 같이 데이터를 집계하려면'pipelines' 모듈에 함수를 만들어야합니다 (이것은 관례에 불과합니다). [이 예제 파이프 라인] (https://github.com/bcap/wikipedia-music/blob/master/crawler/crawler/pipelines.py)은 크롤링 된 모든 음악 장르를 기반으로 도트 파일을 만듭니다. –

관련 문제