0

私はスクレイピングに不慣れです。ポジションで構成されるジョブベースのサイトをスクレイピングしています。つまり、ポジションをクリックすると、フェッチする必要のあるデータで構成される新しいページが開きます。

たとえば、ページには次の形式のテーブルが含まれています。

      Job Title                  Full/Part Time                             Location/Affiliates
1.   Accountant                   Full Time                           Mount Sinai Medical Center (Manhattan)  
2.   Accountant                   Full Time                           Mount Sinai Medical Center (Manhattan) 
3.   Admin Assistant              Full Time                           Mount Sinai Hospital (Queens) 
4.   Administrative Assistant     Full Time                      Mount Sinai Medical Center (Manhattan)  


Page:  1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 

上記のすべての役職はjavascriptで生成されたリンクです、値を含むすべてのjavascriptリンクを送信する必要があります(firebugを使用して検索)一度に複数のフォームを送信する方法、またはすべての役職リンクをループする1つのメソッドを作成する方法そのため、役職のすべてのリンクからデータを取得できます。

また、上記のすべてのページをページ分割する必要があります。2ページをクリックすると、同じテーブル形式でジョブの位置が異なるページが開きます。どのようにすれば、そのページをスクレイプでページ分割できますか。

私のコードは

class MountSinaiSpider(BaseSpider):
   name = "mountsinai"
   allowed_domains = ["mountsinaicss.igreentree.com"]
   start_urls = [
       "https://mountsinaicss.igreentree.com/css_external/CSSPage_SearchAndBrowseJobs.ASP?T=20120517011617&",
   ]

# This method is for submitting starting page with some values for clicking "Find Jobs"
   def parse(self, response):
       return [FormRequest.from_response(response,
                                        formdata={ "Type":"CSS","SRCH":"Search Jobs","InitURL":"CSSPage_SearchAndBrowseJobs.ASP","RetColsQS":"Requisition.Key¤Requisition.JobTitle¤Requisition.fk_Code_Full_Part¤[Requisition.fk_Code_Full_Part]OLD.Description(sysfk_Code_Full_PartDesc)¤Requisition.fk_Code_Location¤[Requisition.fk_Code_Location]OLD.Description(sysfk_Code_LocationDesc)¤Requisition.fk_Code_Dept¤[Requisition.fk_Code_Dept]OLD.Description(sysfk_Code_DeptDesc)¤Requisition.Req¤","RetColsGR":"Requisition.Key¤Requisition.JobTitle¤Requisition.fk_Code_Full_Part¤[Requisition.fk_Code_Full_Part]OLD.Description(sysfk_Code_Full_PartDesc)¤Requisition.fk_Code_Location¤[Requisition.fk_Code_Location]OLD.Description(sysfk_Code_LocationDesc)¤Requisition.fk_Code_Dept¤[Requisition.fk_Code_Dept]OLD.Description(sysfk_Code_DeptDesc)¤Requisition.Req¤","ResultSort":"" },
                                        callback=self.parse_main_list)]

   def parse_main_list(self, response):
       return [FormRequest.from_response(response,
                                        formdata={ "Key":"","Type":"CSS","InitPage":"1","InitURL":"CSSPage_SearchAndBrowseJobs.ASP","SRCH":"earch Jobs","Search":"ISNULL(Requisition.DatePostedExternal, '12/31/9999')¤BETWEEN 1/1/1753 AND Today¥","RetColsQS":"Requisition.Key¤Requisition.JobTitle¤Requisition.fk_Code_Full_Part¤[Requisition.fk_Code_Full_Part]OLD.Description(sysfk_Code_Full_PartDesc)¤Requisition.fk_Code_Location¤[Requisition.fk_Code_Location]OLD.Description(sysfk_Code_LocationDesc)¤Requisition.fk_Code_Dept¤[Requisition.fk_Code_Dept]OLD.Description(sysfk_Code_DeptDesc)¤Requisition.Req¤","RetColsGR":"Requisition.Key¤Requisition.JobTitle¤Requisition.fk_Code_Full_Part¤[Requisition.fk_Code_Full_Part]OLD.Description(sysfk_Code_Full_PartDesc)¤Requisition.fk_Code_Location¤[Requisition.fk_Code_Location]OLD.Description(sysfk_Code_LocationDesc)¤Requisition.fk_Code_Dept¤[Requisition.fk_Code_Dept]OLD.Description(sysfk_Code_DeptDesc)¤Requisition.Req¤","ResultSort":"[sysfk_Code_Full_PartDesc]" },
                                        dont_click = True,
                                        callback=self.parse_fir_pag_urls)]


   def parse_fir_pag_urls(self, response):
       print response'
4

1 に答える 1

1

重要な機能はコールバックです。たとえば、parseメソッド。からのページがダウンロードされたときに呼び出され、そのページの応答がパラメーターとしてメソッドにstart_urls渡されます。parse

このparse方法では、通常使用しているページを分析(解析)し、HtmlXPathSelectorそのページから必要なデータを収集して、ページをに入れますItem。必要なものをすべて収集した場合yield、そのアイテムとスクレイプはそれがアイテムであることを検出し、パイプラインに渡します。

解析しているページにデータが含まれていない場合(たとえば、カテゴリページ)、または必要なデータの一部のみが含まれていて、代わりに[追加の]データを含む他のページへのリンクが見つかった場合yieldアイテムを作成するRequestと、他のページのURLと別のコールバックを持つインスタンスが生成されます。

FormRequestはのサブクラスであるため、必要な数のsを解析メソッドからRequest生成できます。FormRequest

最終的に必要なページに到達したら、対応する解析メソッドでデータを抽出し(HtmlXPathSelectorを使用)Item、メソッドからインスタンスを生成します。

于 2012-05-21T15:02:24.883 に答える