PythonのScrapyを使って、HTMLから文字列を取り出しています。
ガリガリ君の商品名を抜き出すために、以下のコードを書きました。
python
1 2from scrapy.spiders import CrawlSpider, Rule 3from scrapy.linkextractors import LinkExtractor 4 5 6# ガリガリ君 7class AkagiGarigariSpider(CrawlSpider): 8 name = 'garigari' 9 allowed_domains = ['www.akagi.com'] 10 start_urls = ( 11 'https://www.akagi.com/products/garigari/soda_stick.html', 12 'https://www.akagi.com/products/gatsun/mikan_stick.html', 13 ) 14 15 rules = ( 16 17 # 辿ってほしいリンクの条件(ルール)を指定する 18 Rule(LinkExtractor(allow=r'/garigari/.+$'), callback='parse_ice'), 19 20 Rule(LinkExtractor(allow=r'/gatsun/.+$'), callback='parse_ice'), 21 22 ) 23 24 def parse_ice(self, response): 25 26 yield{ 27 # 商品名の要素h1の中には<span>が含まれているため、.xpath('string()')でh1以下のすべてのテキストを取得 28 'item_name': response.css('#contents article h1').xpath('string()').extract(), 29 'image': response.css('article .photo figure img::attr("src")').extract(), 30 } 31
出力結果ですが、以下のように商品名の先頭と最後にメタ文字(\r\n\tなど)が含まれてしまいます。
{ "item_name": [ "\r\n\tガリガリ君コーラ(棒)\r\n" ], "image": [ "content/images/products/200gif/gari_cola_stick.gif" ] }, { "item_name": [ "\r\n\tガリガリ君ソーダ(棒)\r\n" ], "image": [ "content/images/products/200gif/gari_soda_stick_samurai18.gif" ] }, 以下略
item_name を抜き出すための正規表現を変えれば、商品名だけ(たとえば「ガリガリ君コーラ(棒)」)を取り出すことは可能でしょうか?
また、可能であればその正規表現を教えていただけますと幸いです。
よろしくお願いします。
回答1件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2018/05/28 11:23