ICS MEDIAのトップページからだと各記事の"更新日"がわからない。
エンジニアにとってその情報がメンテされているかどうかの方が、"投稿日"よりも重要だったりするので、"更新日"を一覧で見えるように取得してみた。
▼流れ
- Itemsでデータ構造をつくる
- トップページにアクセスし、話題の記事のURLをスクレイピング
- 各記事をクローリングして、各ページの情報をスクレイピング
Items
まずデータ構造の定義を行うため、items.py
に以下を追加する
items.py
class ArticlesItem(scrapy.Item):
url = scrapy.Field()
title = scrapy.Field()
dateModified = scrapy.Field()
Requests and Responses
エントリポイントのページからさらに深くクローリングするため、リクエストを投げる
ics_request.py
# -*- coding: utf-8 -*-
import scrapy
from tutorial.items import ArticlesItem
class IcsRequestSpider(scrapy.Spider):
name = 'ics_request'
allowed_domains = ['ics.media']
start_urls = ['https://ics.media/']
def parse(self, response):
for href in response.css('.groupFeatures > div a.thumb::attr(href)'):
yield scrapy.Request(href.extract(), callback=self.parse_item)
def parse_item(self, response):
item = ArticlesItem()
item['url'] = response.url
item['title'] = response.css('.pageTitle span::text').extract_first()
item['dateModified'] = response.css('time[itemprop="dateModified"]::attr(datetime)').get()
yield item
実行
scrapy crawl ics_request -o ics-request.json
ics-request.json
[
{
"dateModified": "2018-03-23",
"title": "現場で使えるwebpack 4入門 – JS開発のモジュールバンドラ",
"url": "https://ics.media/entry/12140"
},
{
"dateModified": "2018-03-13",
"title": "絶対つまずかないGulp入門(2018年版) – インストールとSassを使うまでの手順",
"url": "https://ics.media/entry/3290"
},
{
"dateModified": "2017-10-23",
"title": "人工知能Adobe Senseiの画像処理が凄すぎてAdobe MAX 2017の会場は狂喜乱舞に",
"url": "https://ics.media/entry/16643"
},
{
"dateModified": "2018-03-13",
"title": "CSS Grid Layout入門。対応ブラウザが出揃った新しいレイアウト仕様",
"url": "https://ics.media/entry/15649"
}
]