2017-12-03 5 views
1

私はこのwebsiteを掻き集めようとしていますが、CSSセレクタがScrapyで動作することを理解するのに苦労しています。CSSセレクタをスクラップで掻き集める方法を試すことができません

CSSのビーイングに:標準のCSSセレクタがどのように見えるhttps://ibb.co/eJeZpb

:だからそこドキュメントからscrapyにこの仕事をするために

.css-truncate-target .message 
.js-navigation-open 
time-ago 

それは次のようになります。この場合

.css-truncate-target .message::text 
.js-navigation-open::text 
time-ago::text 

申し訳ありません私はちょうど標準のCSSセレクタを使用することに慣れています。

コード、それは例を参照する場合に役立ちます。それは場合に役立ちます

import scrapy 


class QuotesSpider(scrapy.Spider): 
    name = "quotes" 
    start_urls = [ 
     'https://github.com/scrapy-plugins/scrapy-splash', 
    ] 
#.css-truncate-target .message 
#.js-navigation-open 
#time-ago 




    def parse(self, response): 
     for quote in response.css('time-ago.quote'): 
      yield { 
       'text': quote.css('.js-navigation-open::text').extract_first(), 
       'author': quote.css('.js-navigation-open::text').extract_first(), 
       "tags": quote.css('time-ago::text').extract(), 
      } 




# --- run it --- 

import scrapy.crawler 

c = scrapy.crawler.CrawlerProcess({ 
    'USER_AGENT': 'Mozilla/4.0 (compatible; MSIE 7.0; Windows NT 5.1)', 
    'FEED_FORMAT': 'csv', 
    'FEED_URI': 'quotes.csv' 

}) 
c.crawl(QuotesSpider) 
c.start() 

outputです。

ありがとうございました。

私はまた、次のことを試してみましたことを明確にする必要がありますと

 'text': quote.css('.js-navigation-open::attr(href)').extract_first(), 
     'author': quote.css('.css-truncate-target .message::attr(href)').extract_first(), 
     "tags": quote.css('time-ago::text').extract(), 

ブランクCSV:https://pastebin.com/utuZ6u46

答えて

0

を、私はより明確なDOMのトラバースとあなたのコードを少し編集したが、コアが残りました同じ。
2私はあなたのコードを持っていた問題:

  • 何のクラスquoteがどのtime-agoあなたが
  • textを提供したURLのタグとauthorではありませんが、私は削除して、同じDOM要素からテキストを抽出しているように見えます後者

コード:

import scrapy.crawler 


class QuotesSpider(scrapy.Spider): 
    name = "quotes" 
    start_urls = [ 
     'https://github.com/scrapy-plugins/scrapy-splash', 
    ] 

    def parse(self, response): 
     for quote in response.css('tbody'): 
     rows = quote.css('tr') 
     for row in rows: 
      yield { 
       'text': row.css('.js-navigation-open').css('::text').extract_first(), 
       "tags": row.css('time-ago').css('::text').extract_first(), 
      } 


c = scrapy.crawler.CrawlerProcess({ 
'USER_AGENT': 'Mozilla/4.0 (compatible; MSIE 7.0; Windows NT 5.1)', 
'FEED_FORMAT': 'csv', 
'FEED_URI': 'quotes.csv' 
}) 
c.crawl(QuotesSpider) 
c.start() 

結果:

タグ、テキスト
"2017年3月10日"、たとえば
"2017年3月29日"、
"2017年3月29日" scrapy_splashは、
をテスト「3月30日2016" は、。
coveragerc "2016年4月19日2017年3月10日"、。
gitignore ""、。travis.yml
"2017年3月29日"、CHANGES.rst
"2016年4月11日" 、LIC ENSE.txt
"2015年2月27日"、MANIFEST.in
"2016年7月14日"、README.rst
"2016年4月16日"、pytest.ini
"2016年3月25日"、要件 - py3.txt
"2016年2月15日" requirements.txt
"2015年2月27日" setup.cfg
"March 29、2017"、セットアップ。tox.ini PY
"2017年3月10日"、

関連する問題