2014-04-09 63 views
2

說我有一個主網頁,index.html和四個子頁面,1.html … 4.html。所有頁面都以相同的方式鏈接在主頁面上。如何遵循特定鏈接並使用scrapy刮取內容?

我怎麼能遵循Python的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" 
    ] 

注:這是一個簡單的例子。在最初的例子中,所有網址都從網上index.html包含的不僅僅是1…4.html多了很多環節。

的問題是如何遵循extact環節,它可以作爲一個列表來提供,但最終會從XPath的選擇幹 - 選擇表格最後一欄,只是每隔一行。

+0

基本問題是關於如何解析本地保存的HTML文件(S)? – alecxe

+0

@alecxe不,我只是簡化了這個例子。問題是如何只遵循某些鏈接。我可以創建它們的列表,如'[「url1.com/...」,「url2.com/...」]'。如果不清楚,我能延長問題... – mcbetz

回答

1

使用CrawlSpider並指定SmglLinkExtractor規則:

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