2017-08-27 4 views
-1

を出力を入力してください:HTMLコードは、このようなものですので enter image description herescrapy - 出力はこのように来て、新しい行に

を:

enter image description here

私は
タグの間でデータを分離することはできません。誰も私にそれをする方法を教えてもらえますか?

# -*- coding: utf-8 -*- 
import scrapy 
class MonsterComSpider(scrapy.Spider): 
name = 'monsterca' 
#allowed_domains = ['www.monster.ca'] 
start_urls = ['https://www.monster.ca/jobs/search/?q=data-analyst&page=1'] 
def parse(self, response): 
    urls = response.css('div.jobTitle > h2 > a::attr(href)').extract() 

    for url in urls: 
     yield scrapy.Request(url = url, callback = self.parse_details) 

#crawling all the pages 
    next_page_url = response.xpath('//head/link[@rel="next"]/@href').extract_first() 

    if next_page_url: 
     next_page_url = response.urljoin(next_page_url) 
     yield scrapy.Request(url = next_page_url, callback = self.parse)    


def parse_details(self,response): 
    if response.css('div[id = JobDescription] > span[id = TrackingJobBody] > ul'): 
      yield {   
        'Job Post' : response.css('div.opening.col-sm-12 > h1::text').extract_first(), 
        'Location' : response.css('div.opening.col-sm-12 > h2::text').extract_first(), 
        'Description' : response.css('div[id = JobDescription] > span[id = TrackingJobBody] > ul > li::text').extract() 
       } 
    elif response.css('div[id = JobDescription] > span[id = TrackingJobBody]'): 
     yield {   
        'Job Post' : response.css('div.opening.col-sm-12 > h1::text').extract_first(), 
        'Location' : response.css('div.opening.col-sm-12 > h2::text').extract_first(), 
        'Description' : response.css('div[id = JobDescription] > span[id = TrackingJobBody]::text').extract() 
       } 

私はmonster.caが異なるページの異なるレイアウトを持っているので、私は標準化したい他の場合は追加しました:

は、ここに私のコードです。この場合、エリフケースを考慮してください。 http://job-openings.monster.ca/Senior-Data-Analyst-Calgary-AB-CA-Precision-ERP/11/186139327?MESCOID=1300087001001&jobPosition=2

それとも誰が​​どのように出力して、これらの特殊文字を削除し、新しい行に特殊文字の後の部分を取得することを伝えることができる場合:ここでは

は私が当たっていたリンクです。ありがとう

+1

ポストあなたがテキストとしてではなく、イメージとして –

+0

共有HTMLをこすりするために使用しているあなたのコードリンクを共有しました – Andersson

+0

@TarunLalwaniが –

答えて

1

私はこのような状況では、CSSを使用する方が好きではありません。むしろ、テキスト部分を取得するためにXPathを使用します。そこでここでは可能な解決策のXPathと

'Description' : "\n".join(response.css('div[id = JobDescription] > span[id = TrackingJobBody] *::text').extract()) 

は、私が使用している

'Description' : "\n".join(response.css('div[id = JobDescription] > span[id = TrackingJobBody]').xpath(".//text()").extract()) 
+0

タルンありがとうございました。あなたはすでにページ構造を見てきましたので、もう1つの質問があります。どのようにして仕事、ロール、責任、資格など)を異なる列に追加します。 これを手伝っていただければ幸いです。 ありがとう –

関連する問題