

wikipediaのサイトをscrapyでスクレイピングしたところ、うまくwebをクローリングしてくれません。  
具体的には下記のメッセージが表示されているので情報をうまく取れていないと思います。

メッセージ一部抜粋

[code]

    INFO: Crawled 0 pages (at 0 pages/min), scraped 0 items (at 0 items/min)
    
[/code]

下記にてspiderファイルとitemファイルを共有いたします。  
考えられる修正点をご教示いただけますでしょうか。

クローリング先のサイトは下記です。

日本酒の銘柄一覧  
<https://ja.wikipedia.org/wiki/%E6%97%A5%E6%9C%AC%E9%85%92%E3%81%AE%E9%8A%98%E6%9F%84%E4%B8%80%E8%A6%A7>

県名(prefecture)、酒造(syuzo)、日本酒名(sake_name)を取得したいと思っております。

scrapy_sake.py

[code]

    # -*- coding: utf-8 -*-
    import scrapy
    from sake.items import SakeItem
    
    class ScrapySakeSpider(scrapy.Spider):
        name = 'scrapy_sake'
        allowed_domains = ['ja.wikipedia.org']
        start_urls = ['https://ja.wikipedia.org/wiki/%E6%97%A5%E6%9C%AC%E9%85%92%E3%81%AE%E9%8A%98%E6%9F%84%E4%B8%80%E8%A6%A7']
    
        def parse(self, response):
            """
            レスポンスに対するパース処理
            """
            items = []
            for post in response.css('.mw-parser-ouput div ul li'):
                # items に定義した Post のオブジェクトを生成して次の処理へ渡す            
                item = SakeItem()
                item["prefecture"] = post.css('.mw-parser-ouput .mw-headline::text').extract()
    
                item["syuzo"] = post.css('.mw-parser-ouput div p b a::text').extract()
                if syuzo != None:
                        syuzo = syuzo
                else:
                    syuzo=post.css('.mw-parser-ouput div p b::text').extract()
                item["sake_name"] = post.css('.mw-parser-ouput div ul li::text').extract()
                items.append(item)
                return items
    
[/code]

item.py

[code]

    import scrapy
    
    
    class SakeItem(scrapy.Item):
        prefecture = scrapy.Field()
        syuzo = scrapy.Field()
        sake_name = scrapy.Field()
        pass
    
[/code]


CC BY-SA 4.0
2020-04-06T03:28:43.553
65387
2020-04-06T19:24:03.180
2020-04-06T06:31:32.360
3060
39424
question
python web-scraping
Scrapyでコーディングしても"INFO: Crawled 0 pages (at 0 pages/min), scraped 0 items (at 0 items/min)"となりクローリングができない


「日本酒の銘柄一覧」のソースコード(HTML)を眺めてみましたが、あまり構造化されていません。とりあえずは必要なタグを全て抽出してインスタンス(SakeItem
class)を作成します。

[code]

    def parse(self, response):
      """
      レスポンスに対するパース処理
      """
      item, items = None, []
      for post in response.css('h3 .mw-headline, h3~div p, h3~p, ul, #脚注'):
        prefecture = post.css('span.mw-headline::text').get(default=False)
        maker = post.css('p ::text').getall()
        label = post.css('ul li ::text').getall()
        end = post.css('#脚注').get(default=False)
    
        if end and item is not None:
          items.append(item)
          break
    
        if prefecture:
          if item is not None:
            items.append(item)
          item = SakeItem({
            'prefecture': prefecture, 'syuzo': [], 'sake_name': []
          })
        elif len(maker) > 0:
          item['syuzo'] += [''.join(maker).strip()]
        elif len(label) > 0:
          item['sake_name'] += label
    
      return items
    
[/code]

**出力結果**

[code]

    [{'prefecture': '北海道',
      'sake_name': ['小樽の貴醸酒（おたるのきじょうしゅ）',
                    '亀甲蔵大吟醸（きっこうぐらだいぎんじょう）',
                    '寳川（たからがわ）',
                            :
      'syuzo': ['田中酒造（小樽市）',
                '男山（旭川市）',
                '高砂酒造（旭川市）',
                            :
    
     {'prefecture': '青森県',
      'sake_name': ['じょっぱり',
                    '豊盃（ほうはい）',
                    '霊峰（れいほう）',
                            :
      'syuzo': ['六花酒造（弘前市）',
                '三浦酒造店（弘前市）',
                '斎藤酒造（弘前市）',
                            :
    
[/code]


CC BY-SA 4.0
2020-04-06T19:24:03.180
65411
2020-04-06T19:24:03.180
65387
answer