2013-07-31 12 views
45

私は、スクラピーを使用してウェブページから製品情報をスクラップしようとしています。私に-掻き取りするWebページは次のようになります。product_listページでセレンと動的ページの治療

  • 開始を10の製品
  • 「次へ」ボタン負荷をクリックして次の10の製品(URLは2本のページの間で変更されません。私は次のボタン-AJAX呼び出しを複製しようとしましたが、そう、働いて得ることができません製品ページに各製品のリンクをたどる、と私は

を必要とするすべての情報を取得するためにLinkExtractorを使用)

  • 私はセレンを試しています。私は別のスクリプトでセレンのwebdriverを実行することができますが、私はどのようにscrapyと統合するのか分かりません。私はどこでセレンの部分を私の蜘蛛の蜘蛛の巣に入れますか?

    私のクモは、次のように、かなり標準です:

    class ProductSpider(CrawlSpider): 
        name = "product_spider" 
        allowed_domains = ['example.com'] 
        start_urls = ['http://example.com/shanghai'] 
        rules = [ 
         Rule(SgmlLinkExtractor(restrict_xpaths='//div[@id="productList"]//dl[@class="t2"]//dt'), callback='parse_product'), 
         ] 
    
        def parse_product(self, response): 
         self.log("parsing product %s" %response.url, level=INFO) 
         hxs = HtmlXPathSelector(response) 
         # actual data follows 
    

    任意のアイデアが高く評価されています。ありがとうございました!

  • 答えて

    78

    実際にどのようにサイトを削る必要があり、どのようにしてどのようなデータを取得したいかによって異なります。ここで

    あなたはScrapy + Seleniumを使用してeBayで改ページをたどることができる方法の例です:ここでは

    import scrapy 
    from selenium import webdriver 
    
    class ProductSpider(scrapy.Spider): 
        name = "product_spider" 
        allowed_domains = ['ebay.com'] 
        start_urls = ['http://www.ebay.com/sch/i.html?_odkw=books&_osacat=0&_trksid=p2045573.m570.l1313.TR0.TRC0.Xpython&_nkw=python&_sacat=0&_from=R40'] 
    
        def __init__(self): 
         self.driver = webdriver.Firefox() 
    
        def parse(self, response): 
         self.driver.get(response.url) 
    
         while True: 
          next = self.driver.find_element_by_xpath('//td[@class="pagn-next"]/a') 
    
          try: 
           next.click() 
    
           # get the data and write it to scrapy items 
          except: 
           break 
    
         self.driver.close() 
    

    は "セレンスパイダー" のいくつかの例は以下のとおりです。


    ScrapySeleniumを使用することに代わるものもあります。場合によっては、ScrapyJS middlewareを使用するだけでページの動的部分を処理できます。サンプルの実世界の使用方法:あなたの助けのための

    +0

    感謝。実際、私の最大の問題はnext.click()の後の部分です。たびに新しいページが表示されますが、LinkExtractorを使用して商品のURLをすべて抽出し、コールバックを使用して解析することはできますか? –

    +2

    'self.driver.get(response.url)'を使わずに、既にscrapyで取得したレスポンスを再利用する方法はありますか? – Ethereal

    +0

    @ Z.Linはまだ説明した問題ですか?あなたがそれを解決したら、解決策を分かち合うことができますか?ありがとう。それが助けられたら、答えを受け入れることを検討してください。 – alecxe