2016-03-23 10 views
4

Scrapyスパイダーを使用して、FormRequestを使用してウェブサイトをクロールして、都市固有のページの検索クエリにキーワードを送信しようとしています。私が読んだものとは単純に思えますが、問題があります。 Pythonにはまったく新しいので、何か明白なことがあれば、私は見落としてしまいます。Scipeを使用した検索クエリのPOSTリクエスト

私が助けてくれる主な3つのサイトは次のとおりです。 マウス対Python [1]; Stack Overflow; Scrapy.org [3]私はクロールしています特定のURLのソースコードから

: 私は、検索の名前があると思い<input name="dnn$ctl01$txtSearch" type="text" maxlength="255" size="20" id="dnn_ctl01_txtSearch" class="NormalTextBox" autocomplete="off" placeholder="Search..." /> 「dnn_ct101_txtSearch:私が見つけた特定のページのソースからwww.lkqpickyourpart.com\locations/LKQ_Self_Service_-_Gainesville-224/recents

私が使用した例では、2と引用されていました。車の検索でキーワードとして "toyota"を入力したかったのです。ここで

は、私は今、私のクモの持っている、と私はbegginingに過度のものを輸入しています知っていますコードされています、

import scrapy 
from scrapy.http import FormRequest 
from scrapy.item import Item, Field 
from scrapy.http import FormRequest 
from scrapy.spider import BaseSpider 

class LkqSpider(scrapy.Spider): 
name = "lkq" 
allowed_domains = ["lkqpickyourpart.com\locations/LKQ_Self_Service_-_Gainesville-224/recents"] 
start_urls = ['http://www.lkqpickyourpart.com\locations/LKQ_Self_Service_-_Gainesville-224/recents/'] 

def start_requests(self): 
    return [ FormRequest("www.lkqpickyourpart.com\locations/LKQ_Self_Service_-_Gainesville-224/recents", 
       formdata={'dnn$ctl01$txtSearch':'toyota'}, 
       callback=self.parse) ] 

def parsel(self): 
    print self.status 

は、なぜそれが結果のいずれかの種類を検索したり、印刷されていないです例私は検索バーに入っていないウェブサイトにログインするためだけにコピーしていますか?

おかげで、 ダン初心者のPythonライターここ

答えて

3

はあなたがこすりしようとしているページはAJAX呼び出しによって生成された:)

# -*- coding: utf-8 -*- 
from __future__ import unicode_literals 
import scrapy 
from scrapy.shell import inspect_response 
from scrapy.utils.response import open_in_browser 


class Cars(scrapy.Item): 
    Make = scrapy.Field() 
    Model = scrapy.Field() 
    Year = scrapy.Field() 
    Entered_Yard = scrapy.Field() 
    Section = scrapy.Field() 
    Color = scrapy.Field() 


class LkqSpider(scrapy.Spider): 
    name = "lkq" 
    allowed_domains = ["lkqpickyourpart.com"] 
    start_urls = (
     'http://www.lkqpickyourpart.com/DesktopModules/pyp_vehicleInventory/getVehicleInventory.aspx?store=224&page=0&filter=toyota&sp=&cl=&carbuyYardCode=1224&pageSize=1000&language=en-US', 
    ) 

    def parse(self, response): 
     section_color = response.xpath(
      '//div[@class="pypvi_notes"]/p/text()').extract() 
     info = response.xpath('//td["pypvi_make"]/text()').extract() 
     for element in range(0, len(info), 4): 
      item = Cars() 
      item["Make"] = info[element] 
      item["Model"] = info[element + 1] 
      item["Year"] = info[element + 2] 
      item["Entered_Yard"] = info[element + 3] 
      item["Section"] = section_color.pop(
       0).replace("Section:", "").strip() 
      item["Color"] = section_color.pop(0).replace("Color:", "").strip() 
      yield item 

     # open_in_browser(response) 
     # inspect_response(response, self) 

を行きます。

デフォルトでは、AJAXを含む動的にロードされたJavascriptコンテンツは読み込まれません。ページを下にスクロールしながらデータを動的にロードするほとんどのサイトは、AJAXを使用して実行されます。 ^^トラッピング^^ AJAXコールは、Chrome Dev ToolsまたはFirebug for Firefoxを使用するとかなりシンプルです。 Chrome Dev ToolsまたはFirebugでXHRリクエストを確認するだけです。 XHRはAJAXリクエストです。

ここにそれがどのように見えるかのスクリーンショットです:

Capturing an XHR Request

リンクを見つけたら、その属性を変更する行くことができます。

は、これは、リンクであるクロム開発ツールでXHR要求がくれたこと:

http://www.lkqpickyourpart.com/DesktopModules/pyp_vehicleInventory/getVehicleInventory.aspx?store=224&page=0&filter=toyota&sp=&cl=&carbuyYardCode=1224&pageSize=1000&language=en-US 

私は私のページごとに1000の結果を与えることがあり、最大1000ページのサイズを変更しました。デフォルトは15です。 すべてのデータをキャプチャするまで理想的に増加するページ番号があります。

+0

ありがとうございました!これは本当に役に立ちます。だから開始URLには、 "field ="の前と "&sp"の前に、文字変数 "keyword"や、生成したい結果ページに応じて変更できるものがあるかもしれません。 –

+0

ありがとう!これは本当に役に立ちます。だから開始URLには、 "field ="の後に "&sp"の前に文字変数 "keyword"や、生成したいページの検索に応じて変わる可能性のあるものがありますか?もし私が他のスタートURLから拾い読みされた検索結果でそれをまとめることができるようにしたいのであれば、車と付属画像のリストを保存する最良の方法は何でしょうか。 –

0

Webページがscrapyコード

使用Splashでコンテンツをロードして使用するためdocumentを参照するためにJavaScriptのレンダリング・フレームワークが必要です。

+0

簡単なAJAX呼び出しを取得するためにSplashまたはSeleniumを使用する必要はありません。 このリンクを確認してください:http://stackoverflow.com/questions/16390257/scraping-ajax-pages-using-python – MetalloyD

関連する問題