2017-12-30 50 views
1

で一つ一つ私がIndeedから1ページのソースをダウンロードし、私はそのために私は、このXPathを使用しています、そこからすべてのジョブ・タイトルを取得しようとしている結果:選択しscrapy

response.xpath('//*[@class=" row result"]//*[@class="jobtitle"]//text()').extract() 

問題は、結果が故に1行ではなく、ということである。この結果取得:

私がしたいことは一つ一つのプロセスにジョブを選択することで、データの残りの部分とマッピングする問題がある
[u'\n ', 
u'Data', 
u' ', 
u'Scientist', 
u' Experto SQL con conocimiento en R', 
u'\n ', 
u'\n ', 
u'Data', 
u' Analytic con Python', 
u'\n ', 
u'\n ', 
u'Data', 
u' Analytic con R', 

、何かをextract_first()と似ています

response.xpath('//*[@class=" row result"]').extract_first() 

ただし、任意のインデックスとデータの処理を継続するオプションがあります。 私はこの試みた:

current_job = response.xpath('//*[@class=" row result"]').extract_first() 
current_job = TextResponse(url='',body=current_job,encoding='utf-8') 

をしかし、それは唯一の最初の結果のために働く、それは私にはニシキヘビのアプローチのようには見えません。

+0

何か? @KlausD。 –

+0

私はscrapyに組み込まれたものを探しているので、TextResponse()を毎回使用する必要はありません。存在するかどうかはわかりません。 –

+0

'for'ループを使用できませんか? – furas

答えて

2

まず私はatext()extract()なし)になるだろうと、私はタイトルの文字列に要素を連結するために、すべてのseparatelly a、およびjoin()text()extract()を使用するようにforを使用します。

import scrapy 

class MySpider(scrapy.Spider): 

    name = 'myspider' 

    start_urls = ['https://www.indeed.cl/trabajo?q=Data%20scientist&l='] 

    def parse(self, response): 
     print('url:', response.url) 

     results = response.xpath('//h2[@class="jobtitle"]/a') 
     print('number:', len(results)) 

     for item in results: 
      title = ''.join(item.xpath('.//text()').extract()) 
      print('title:', title) 

# --- it runs without project and saves in `output.csv` --- 

from scrapy.crawler import CrawlerProcess 

c = CrawlerProcess({ 
    'USER_AGENT': 'Mozilla/5.0', 
}) 
c.crawl(MySpider) 
c.start() 

結果:

number: 10 
title: Data Scientist 
title: CONSULTOR DATA SCIENCE SANTIAGO DE CHILE 
title: Líder Análisis de Datos MCoE Minerals Americas 
title: Ingeniero Inteligencia Mercado, BI 
title: Ingeniero Inteligencia de Mercado, Business Intelligence 
title: Data Scientist 
title: Data Scientist 
title: Data Scientist (Machine Learning) 
title: Data Scientist/Ml Scientist 
title: Young Professional - Spanish LatAm 
+0

ありがとうございます。ドットが2番目のXPathで使用されていない場合、結果は異なりますが、これはなぜですか? –

1

はそれをやってみます。プロジェクトに合わせてスクリプトを少し変更する必要があります。上記の問題を解決することができます。

import requests 
from scrapy import Selector 

res = requests.get("https://www.indeed.cl/trabajo?q=Data%20scientist") 
sel = Selector(res) 
for item in sel.css("h2.jobtitle a"): 
    title = ' '.join(item.css("::text").extract()) 
    print(title) 

出力: `:`場合list_item.strip()のような

Data Scientist 
CONSULTOR DATA SCIENCE SANTIAGO DE CHILE 
Líder Análisis de Datos MCoE Minerals Americas 
Ingeniero Inteligencia Mercado, BI 
Ingeniero Inteligencia de Mercado, Business Intelligence 
Data Scientist 
Data Scientist 
Young Professional - Spanish LatAm 
Data Scientist (Machine Learning) 
Data Scientist/Ml Scientist 
関連する問題