

scrapyにおいてstart_urlを毎回変更したいです。  
概略として、ネット英語辞書であるweblioを使用して英単語を入力したときに  
scrapyを用いて意味を出力するようにしたいです。

[code]

    import scrapy
    from scrapy.linkextractors import LinkExtractor
    from scrapy.spiders import CrawlSpider, Rule
    import logging
    from elscrapy.items import ElscrapyItem
    class WordSpider(scrapy.Spider):
        name = 'word'
        allowed_domains = ['ejje.weblio.jp']
        #start_urls = ['http://ejje.weblio.jp/']
      
    
        def __init__(self, query='', *args, **kwargs):
            super(WordSpider, self).__init__(*args, **kwargs)
            self.start_urls = ['https://ejje.weblio.jp/content/' + query]
    
    
    
        def parse(self, response):
            word=response.xpath('//*[@id="summary"]/div[2]/p/span[2]/text()').get()
            yield{
                'word':word
            }
    
[/code]

以下コマンドで単語を指定することで、start_urlsを毎回変更しています。

[code]

    scrapy crawl word -a query=relative
    
[/code]

しかし結果としては、以下のようになっていたり、csv出力コマンドを実行しても空白になっているため  
正しく実行されていないと思います。

[code]

    ERROR: Error processing {'word': '\n                比較上の、相対的な、相関的な、(…と)関係があって、関連して、(…に)呼応して、比例して、関係を示す、関係詞に導かれた'}
    
[/code]

csvに書き込みができるようにしたいです。


CC BY-SA 4.0
2022-08-05T14:44:30.600
90389
2022-08-06T00:05:16.987
52935
question
python web-scraping
start_urlsを都度変更したい


結果は正しいです。  
該当部分のhtmlは

[code]

                <span class="content-explanation  ej">
                    比較上の、相対的な、相関的な、(…と)関係があって、関連して、(…に)呼応して、比例して、関係を示す、関係詞に導かれた</span>
    
[/code]

ですから、spanタグの中身は  
改行1個と16個の空白から始まっています。  
つまり **正しく** とれています。  
質問者さんが **取りたい** ものと食い違っているだけです。

例えば、

[code]

    word=response.xpath('//*[@id="summary"]/div[2]/p/span[2]/text()').get().replace('\n', '').strip()
    
[/code]

などとして明な改行除去と、前後空白文字の除去をしたりすればいいんじゃないでしようか。  
（中に改行がこないと分かっているなら`.strip()`だけで十分ですが）


CC BY-SA 4.0
2022-08-06T00:05:16.987
90393
2022-08-06T00:05:16.987
12274
90389
answer