2014-04-09 4 views
2

메인 페이지가 index.html이고 하위 페이지가 4 개인 1.html … 4.html입니다. 모든 페이지는 동일한 방식으로 기본 페이지에 연결됩니다.특정 링크를 따라 가고 치료를 사용하여 콘텐츠를 긁는 방법?

어떻게 이러한 특정 링크를 파이썬의 scrapy으로 따라 가며 반복적 인 패턴으로 내용을 다룰 수 있습니까?

index.html을

<body> 
<div class="one"><p>Text</p><a href="1.html">Link 1</a></div> 
… 
<div class="one"><p>Text</p><a href="4.html">Link 4</a></div> 
</body> 

1.html ... 4.html

<body> 
<div class="one"><p>Text to be scraped</p></div> 
</body> 

내가 scrapy에 spider을 설정합니다 방법 : 여기

는 설정이다 index.html에서 추출한 링크를 따라가시겠습니까?

내가 많이 나를 여기에 도움이되지 않습니다 튜토리얼에서 예제 같은 느낌 :

scrapy.spider 수입 스파이더에서

class IndexSpider(Spider): 
    name = "index" 
    allowed_domains = ["???"] 
    start_urls = [ 
     "index.html" 
    ] 

참고 :이 단순화 된 예입니다. 원래 예제에서 모든 URL은 웹에서 왔으며 index.html1…4.html보다 훨씬 많은 링크가 포함되어 있습니다.

질문은 extact 링크를 따라하는 방법입니다.이 링크는 목록으로 제공 될 수 있지만 결국 xpath 선택기에서 비롯됩니다. 테이블의 마지막 열을 선택하고 다른 모든 행은 선택합니다.

+0

기본적으로 문제는 로컬로 저장하는 HTML 파일을 구문 분석하는 방법에 대해입니다? – alecxe

+0

@alecxe 아니요, 예제를 단순화했습니다. 문제는 특정 링크만을 따르는 것입니다. '[ "url1.com/...", "url2.com/..."]'와 같은 목록을 만들 수 있습니다. 불분명하다면, 나는 질문을 연장 할 수있다 ... – mcbetz

답변

1

사용 CrawlSpiderSmglLinkExtractor에 대한 규칙을 지정합니다

from scrapy.selector import HtmlXPathSelector 
from scrapy.contrib.spiders import CrawlSpider, Rule 
from scrapy.contrib.linkextractors.sgml import SgmlLinkExtractor 

class MySpider(CrawlSpider): 
    name = "mydomain" 
    allowed_domains = ["www.mydomain"] 
    start_urls = ["http://www.mydomain/index.html",] 

    rules = (Rule(SgmlLinkExtractor(allow=('\d+.html$',),), callback="parse_items", follow=True),) 

    def parse_items(self, response): 
     hxs = HtmlXPathSelector(response) 
     # get the data 
+0

고마워, 나는 이것을 시험 할 것이다, 그것은 나에게 매우 유망 해 보인다. .. – mcbetz

관련 문제