2016-06-21 3 views
1

외부 파일에 스크래핑 규칙을 정의하여 각 웹 사이트에 코어 코드를 변경할 필요가 없도록하고 싶습니다. 이 파일에는 몇 가지 규칙이 있으며 각각 다른 웹 사이트에 적용됩니다. start_urlsallowed_domains에 대한 외부 파일이 있지만 규칙에 대해 가장 바람직한 방법으로 opinon을 얻고 싶습니다.Scrapy - 외부에서 구성 가능한 스크래핑 규칙

xpath 또는 regex 규칙을 사용할 수 있다고 생각합니다.

감사합니다. 추출 규칙에 대한

답변

3

하나의 옵션은 Parsley DSL

parslepy 파이썬에서 the language의 구현입니다 사용하는 것입니다 (면책 조항 : 나는 parslepy 썼다), 당신은 XPath와 CSS 선택기를 사용할 수 있습니다 parslepy으로

합니다. 당신은 파이썬 dict을 다시 얻는다. 외부 파일이 규칙에 JSON 개체가 될 수

# -*- coding: utf-8 -*- 
import parslepy 
import scrapy 


class HnSpider(scrapy.Spider): 
    name = "hn" 
    allowed_domains = ["news.ycombinator.com"] 
    start_urls = (
     'https://news.ycombinator.com/', 
    ) 
    parselet = parslepy.Parselet({ 
     "_items(tr.athing)": [ 
      { 
       "title": "td.title > a", 
       "source": "td.title span a", 
       "rank": "span.rank", 
       "--(./following-sibling::tr[1])": 
       { 
        "score": "span.score", 
        "age": "span.age", 
        "comments": "span.age ~ a:last-child" 
       } 
      } 
     ] 
    }) 

    def parse(self, response): 
     return self.parselet.parse_fromstring(
      response.body).get("_items", []) 

: 여기

규칙에 키가 scrapy의 출력 항목을 들고으로 콜백에서 사용되는 특별한 "_items"를 예를 들어 해커 뉴스 거미의 . 이 JSON 파일의 데이터로 스파이더의 self.parselet 객체를 초기화하면 위의 예와 같이 콜백을 유지할 수 있습니다.

따라야 할 다른 특수 키를 사용하는 경우를 상상해보십시오.