2013-02-14 1 views
7

사이트에서 데이터를 긁어 내려고합니다. 데이터는 각각 데이터 집합과 함께 여러 개체로 구성됩니다. 예를 들어, 이름, 나이 및 직업이있는 사람들.여러 페이지에서 데이터를 단일 데이터 구조로 수집하는 방법

제 문제는이 데이터가 웹 사이트의 두 단계로 분리되어 있다는 것입니다.
첫 번째 페이지는 각 개인 프로필 페이지에 대한 링크가있는 이름 및 연령대 목록입니다.
그들의 프로필 페이지는 직업을 나열합니다.

이미 파이썬으로 작성된 스파이더는 최상위 레이어에서 데이터를 수집하고 여러 페이지 매김을 통해 크롤링 할 수 있습니다.
그러나 내부 페이지의 데이터를 적절한 객체에 연결 한 상태에서 데이터를 수집하려면 어떻게해야합니까?

현재, 나는 출력은

{[name='name',age='age',occupation='occupation'], 
    [name='name',age='age',occupation='occupation']} etc 

로 JSON으로 구성 할 수 있습니다 같은 페이지에 걸쳐 구문 분석 함수에 도달?

답변

8

여기에 필요한 조치가 있습니다. 항목에 모든 속성이있을 때 항목을 한 번만 반환하거나 반환해야합니다.

yield Request(page1, 
       callback=self.page1_data) 

def page1_data(self, response): 
    hxs = HtmlXPathSelector(response) 
    i = TestItem() 
    i['name']='name' 
    i['age']='age' 
    url_profile_page = 'url to the profile page' 

    yield Request(url_profile_page, 
        meta={'item':i}, 
    callback=self.profile_page) 


def profile_page(self,response): 
    hxs = HtmlXPathSelector(response) 
    old_item=response.request.meta['item'] 
    # parse other fileds 
    # assign them to old_item 

    yield old_item 
관련 문제