2017-12-27 2 views
0

나는 스 커리 (scrapy) 라이브러리를 사용하여 웹 사이트에서 여러 페이지를 긁어 모으는 지침서를 사용하고있었습니다. 이 자습서에서는 yield 문을 사용하여 CSS 선택기 및 xpath 선택기를 사용하여 페이지의 HTML 및 CSS 구조에서 정보를 가져옵니다. if 문을 사용하여 검색 쿼리가 결과를 찾았는지 확인하고 else 문을 사용하여 검색 쿼리가 결과를 얻지 못할 때 수행 할 작업을 출력하기로 결정했습니다. 문제는 코드가 회사 이름을 추출하는 else 문을 실행하고 Location 및 Sales 필드에 'Not Found'를 전달하는 사용자 정의 출력 문자열을 원할 때 발생합니다. 나는 다음과 같은 오류가 스크립트를 실행하면검색 python을 사용하여 검색 쿼리를 찾을 수 없을 때 Yield 문을 사용하여 출력 반환

는 :

File "C:\Users\....\hoover-scraper\scraper.py", line 28 

'Location': 'Not Found' 
     ^

을 나는이 내가 구문 에러 메시지가 무엇입니까 왜 yield 문을 사용하는 올바른 방법이 아니다라고 생각합니다. 따라서 검색어가 빈 검색을 만날 때 영업 및 위치 입력란에 '찾을 수 없음'문자열을 출력 할 수있는 방법이 있는지 궁금합니다.

내 코드의이 부분 :

def parse(self, response): 
    NAME_SELECTOR ="td a::text" 
    LOCATION_SELECTOR ='.//tr/td/text()' #using xpath to grab information for Location and Sales 
    SALES_SELECTOR = './/tr/td/text()' 

if response.css(NAME_SELECTOR).extract_first(): #Checks to see if the company name field has data if not prints 'No results found' 
     yield { 

      'Company Name': response.css(NAME_SELECTOR).extract_first(), 
      'Location' : response.xpath(LOCATION_SELECTOR)[0].extract(), #Location comes first inside the td tags thus the [0] 
      'Sales' : response.xpath(SALES_SELECTOR)[1].extract(), 
     } 

    else: 
     yield { 
      'Company Name': response.css("dd.value.term::text").extract_first() #identifies company name which data was not found 
      'Location': 'Not Found' 
      'Sales': 'Not Found' 
     } 
+0

항목 : https://stackoverflow.com/questions/231767/what-does-the-yield-keyword-do – MrT

답변

2

yield 만 발전기에 사용됩니다. 당신은 당신의 방법으로 그 가치를 되돌리고 싶습니까? 그런 다음 yieldreturn으로 바꾸십시오.

나중에 같은 방법으로 값을 사용해야하는 경우 사전에 변수를 할당하십시오. 마찬가지로

if response.css(NAME_SELECTOR).extract_first(): #Checks to see if the company name field has data if not prints 'No results found' 
     result = { 

      'Company Name': response.css(NAME_SELECTOR).extract_first(), 
      'Location' : response.xpath(LOCATION_SELECTOR)[0].extract(), #Location comes first inside the td tags thus the [0] 
      'Sales' : response.xpath(SALES_SELECTOR)[1].extract(), 
     } 

    else: 
     result = { 
      'Company Name': response.css("dd.value.term::text").extract_first(), #identifies company name which data was not found 
      'Location': 'Not Found', 
      'Sales': 'Not Found' 
     } 
    # do something with result 
    ... 
    # or just: 
    return result 
+0

그래, 난 그렇게 사전 작업으로 변환, 나중에이 값을 사용할 필요가 나를 위해. 방금 else 문에 각 사전 항목 다음에 혼수 상태를 추가하고 작동했습니다. –

관련 문제