2016-12-15 14 views
1

私は治療に慣れていますが、しばらくPythonを使用しています。私はscrapyのドキュメントとxpathセレクタのレッスンを受けました。さて、小さなプロジェクトをするために知識を変えたいと思います。私はjob links and the associated info like job title, location, emails (if any), phone numbers (if any)をスクラップを使用してジョブボードhttps://www.germanystartupjobs.com/からスクラップしようとしています。スクラピーを使用してhrefと関連情報を取得する方法は?

私は、このスターターコードを持って

import scrapy 

class GermanSpider(scrapy.Spider): 

    # spider name 
    name = 'germany' 

    # the first page of the website 
    start_urls= ['https://www.germanystartupjobs.com/'] 
    print start_urls 

    def parse(self, response): 
     pass 

    def parse_detail(self, response): 
     pass 

parse関数内のクモscrapy runspider germany

を実行します、私はparse_detail関数の内部href sおよび詳細を取得したいと思います。私はchrome開発ツールで言及したページを開いて、リストされたジョブを検査し、私はすべてのジョブがこのul

<ul id="job-listing-view" class="job_listings job-listings-table-bordered"> 

の内側にあり、その後、セパレートジョブが内部の多くに記載されていることがわかり、

仲間に関する情報と

<div class="job-info-row-listing-class">divsは、たとえば、hrefが内部に設けられている<a href="https://www.germanystartupjobs.com/job/foodpanda-berlin-germany-2-sem-manager-mf/">

その他divsは、役職、会社名を提供し、そのよう

  <div> 
      <h4 class="job-title-class"> 
       SEM Manager (m/f)   </h4> 
      </div> 

      <div class="job-company-name"> 
      <normal>foodpanda<normal>   </normal></normal></div> 
      </div> 

    <div class="location"> 
     <div class="job-location-class"><i class="glyphicon glyphicon-map-marker"></i> 
     Berlin, Germany   </div> 
    </div> 
として divs

との位置などは、最初のステップは、その後、responseを使用してparse_details内部に関連した情報をparse機能を使用してhrefを取得し、ためになります。私は、とphoneという数字は、hrefからのリンクを開くときにのみ提供されますが、タイトルと場所は同じページの現在のdivsの中に提供されています。

私が言いましたように、私はPythonで大丈夫なプログラミングスキルを持っていますが、tutorialを持っていてもxpathを使って苦労しています。どのようにリンクや関連情報を見つけるのですか?ほとんど説明がないサンプルコードでは、多くの助けになります。

私は彼らがこれまでにscrapy runspider germany

答えて

2

を使用してクモをruningて後あなたはおそらく以来、簡単にこのサイト上の情報を抽出することができません何も返さないようだコード

# firstly 
    for element in response.css("job-info-row-listing-class"): 

     href = element.xpath('@href').extract()[0] 
     print href 
     yield scrapy.Request(href, callback=self.parse_detail) 

    # secondly 
    values = response.xpath('//div[@class="job-info-row-listing-class"]//a/text()').extract() 

    for v in values: 
     print v 


    # 
    values = response.xpath('//ul[@id="job-listing-view"]//div[@class="job-info-row-listing-class"]//a/text()').extract() 

を使用してみてください実際のジョブリストはPOST要求としてロードされます。

あなたはこれをどのように知っていますか?

  • 端末タイプscrapy shell "https://www.germanystartupjobs.com/"を選択してください。 (これは、あなたが推測したところでは、シェルを推測しました。シェルは、最初にウェブサイトをスクラップするときに、機能やxpathsなどを試してみることができます)
  • シェルには、view(response)と入力してください。これにより、デフォルトのブラウザにレスポンスが表示されます。
  • ページの読み込みが完了すると、求人情報がないことがわかります。これはPOST要求によってロードされるためです。

リクエストの内容はどのようにしてわかりますか?火

  • 放火犯(要素を右クリックするなどしてInspect with Firebugをクリックする。これは、本質的に似ているFirebugのを、開きをアップ(私はそれがChromeで動作する方法がわからない、Firefox用のFirebugで動作します) Chromeの開発ツール。私はそれを好む。ここ
  • あなたがNetwork -tabをクリックすることができます。そこには何も存在しない場合は、ページをリロードしてください。
  • 今、あなたは求人情報がロードされるとのリクエストを見ることができるはずです。

この場合、 stにhttps://www.germanystartupjobs.com/jm-ajax/get_listings/は、JSON -object(JSONをクリック)を返します。

あなたのスパイダーにとって、これは、あなたのxpathsを適用できるようにするために、この要求を取得してHTMLのオブジェクトを処理するように指示する必要があることを意味します。

あなたは、その後の線に沿って何かあなたのクモの上部に輸入によってjson -moduleこれを行うと:あなたがサイトからのすべてのURLを抽出したい場合には、例えば

data = json.loads(response.body) 
html = data['html'] 
selector = scrapy.Selector(text=data['html'], type="html") 

をそれに続いて、xpath、urlが見つかる場所、そしてyieldという新しいURLを指定する必要があります。だから、基本的にあなたは病気のことを言っています。「見て、ここにURLがあります。 xpathの

例は次のようになります。

url = selector.xpath('//a/@href').extract() 

だから、カッコ内のすべてがあなたのXPathです。 ul[@id="job-listing-view"]/からすべてのパスを指定する必要はありません。識別可能なパスであることを確認するだけです。ここでは、例えば、あなたが望む、aタグのURLだけを持っています。他のaタグはサイトにありません。

これはかなり基本的なものです。

xpathsのハングアップを感じるまで、シェルの中で遊ぶことを強くお勧めします。何の要求もなく簡単に見えるサイトを用意して、xpathを使って必要な要素が見つかるかどうか確認してください。

+0

あなたの答えをありがとう、これは本当に役に立ちます。私はあなたに面白いかもしれない 'scrap'に関する別の質問を投稿しました' http:// stackoverflow.com/questions/41178659/how-to-get-the-job-description-using-scrapy' – Chak

関連する問題