PythonのScrapyを使ってQiitaトップページからトレンドTOP30をスクレイピングする方法を雑に残しておきます。
#Scrapyのインストール
※環境によっては他にもいろいろインストールが必要かもしれません。
pip install scrapy
#プロジェクト作成
scrapy startproject qiita
#spiderの作成
プロジェクトを作成するとディレクトリが作成されるので、そこに移動してからspiderを作成します。
cd qiita
scrapy genspider qiita_trend qiita.com
#ソースコードの修正
setting.pyに以下を追加
setting.py
FEED_EXPORT_ENCODING = 'utf-8'
setting.pyに以下を有効化し'Accept-Language': 'en'を'ja'に修正
setting.py
DEFAULT_REQUEST_HEADERS = {
# 'Accept': 'text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8',
'Accept-Language': 'ja',
}
ディレクトリqiita配下のqiita_trend.pyを修正。Xpathの取得はchromeの検証を使って取得。
(※1タイトルだけならコメントアウト行を有効化して下の行をコメントアウト)
qiita_trend.py
import scrapy
class QiitaTrend1dSpider(scrapy.Spider):
name = 'qiita_trend'
allowed_domains = ['qiita.com']
start_urls = ['https://qiita.com/']
def parse(self, response):
# title = response.xpath('//article[1]/h2/a/text()').get()
titles = response.xpath('//article/h2/a/text()').getall()
yield{
'titles': titles,
}
#spiderの実行
spiderを実行しqiita_trend.jsonに出力
scrapy crawl qiita_trend -o qiita_trend.json
#出力結果
qiita_trend.json
[
{
"titles": [
"転職活動の面接でいただいた質問集",
"AWS re:Invent 2021で発表された新サービス/アップデートまとめ",
"Nikita Popov、PHP開発から離れる & PHP財団設立のお知らせ",
"エンジニアとして普段よく使うサービスをまとめてみた",
"【CTF】OSINT問題で個人的に使用するツール・サイト・テクニックまとめ",
"地味に便利なdisplay: contents;",
"5行のHTMLで15パズル作ってみた",
"【しくじり先生】失敗続きの未経験からのエンジニア転職1年間を振り返って最短で満足のいく転職をするにはどうすれば良いかを考えてみた",
"【React】【Vue】 など流行りのフレームワークを使うもののためのJS基礎",
"リモートワークの目次 2021.11",
"個人的「Java Bronze試験つまずいた項目」5選",
"同人プロジェクトマネジメント入門:目次",
"Azureの資格取得に向けた勉強法",
"Pythonで人検知の通知機能プログラムを作成してみる",
"launchWhen〇〇〇は止めてrepeatOnLifecycleを使おう!",
"Clean Architecture 輪読会まとめ",
"【Android】Modifier.requiredXXXについて、モヤモヤしなくなるくらいに理解する【Jetpack Compose】",
"TypeScript のインターセクション型は2つの型のプロパティを持った型ではない",
"ffmpeg で low latency DASH server 作ってみた",
"Denoに今後導入される新機能(2021秋ver)",
"CircleCIを使ってAutifyのテスト結果をTeamsに通知する",
"エンジニアコミュニティのやり方&よくある失敗例",
"ALL Pair生成、手作業 vs PictMaster vs GIHOZ",
"アドベントカレンダーに参加しようかまだ迷っている人に",
"転職活動ログ(2021)",
"Rapberry Pi 初期設定の半自動化",
"Pythonのオブジェクトへの参照とガベージコレクション",
"【Jetpack Compose】Composeをオーバーレイ表示する",
"C# の Json.NET を理解する",
"AtCoderをRustでやるのにcargo-compete導入してみた"
]
}
]