41 ポイント 投稿者 GN⁺ 2024-02-21 | 5件のコメント | WhatsAppで共有

Python Webスクレイピングの利点

  • シンプルな文法: すばやくコーディング可能
  • 組み込みライブラリ: urllib、lxml などスクレイピングに役立つ
  • 成熟したスクレイピングライブラリ: Beautiful Soup、Scrapy など
  • 汎用性: データパイプライン構築に活用可能
  • 相互運用性: 他言語との統合や性能が重要な場合にも有効

Python Webスクレイピングライブラリ

  • BeautifulSoup: HTML/XML の解析、柔軟な探索と検索
  • Scrapy: 高速で拡張可能、ミドルウェア、分散クローリング機能
  • Selenium: ブラウザ自動化、JavaScript 中心のサイト処理
  • lxml: 非常に高速な XML/HTML パーサー
  • pyquery: jQuery スタイルの文法で HTML 要素にアクセス

スクレイピングのための準備事項

  • 仮想環境の設定を推奨
  • 必要なライブラリ: Requests、BeautifulSoup、OS

スクレイピング対象のWebサイト選定

  • Wikipedia の「犬の品種一覧」ページを選択
  • よく構造化された HTML、多様なデータフィールド、画像を含む

スクレイピングコードの作成

  • 必要なライブラリをインポート
  • User-Agent を使用してブラウザを装う
  • requests を通じて HTML ページをダウンロードし、有効性を検証
  • BeautifulSoup で HTML を解析
  • CSS セレクタでデータを抽出
  • 画像をダウンロードして保存

Webスクレイピングの実際の課題とベストプラクティス

  • 動的コンテンツ処理: Selenium または Scrapy の splash 統合を使用
  • ブロック回避: リクエスト速度の調整、ブラウザの模倣、ユーザーエージェントおよびプロキシのローテーション
  • レート制限: クロール遅延を尊重、プロキシ使用、リクエストの自動調整
  • 複雑な HTML 解析: lxml のような強力なパーサーを使用し、セレクタを強化

GN⁺の見解

  • 最も重要な点: Python はWebスクレイピングのための強力な言語であり、シンプルな文法と豊富なライブラリを提供することで、さまざまな規模のWebスクレイピングプロジェクトに適している。
  • 興味深い理由: Webスクレイピングはデータ収集と分析に不可欠な技術であり、このガイドは初級ソフトウェアエンジニアが実際のプロジェクトに適用できる実用的な知識を提供する。
  • 役立つ理由: Webスクレイピングはさまざまな分野で応用でき、このガイドは実際の課題とベストプラクティスを通じて、実践に強いスクレイピング技術の開発に役立つ。

5件のコメント

 
yangeok 2024-02-26

JavaScriptのレンダリングはPlaywrightが最強です。対応言語の幅がかなり広かったです。

Scrapyと組み合わせて使えば、相乗効果がありそうですね。

 
ikbzbcg15 2024-02-21

いや、今どきならPlaywrightを使うべきだろう

 
bandoche 2024-02-21

実際にスクレイピングを業務でやっていると、思った以上に面倒なのはブラウザの扱い(しばしばエラーが発生する Chrome WebDriver)とブロック(さまざまな CAPTCHA)を回避することが一番大きいですね。

 
GN⁺ 2024-02-21
Hacker News のコメント
  • ウェブクローリングとスクレイピングを分けて考えることが重要。クローリングは URL を見つけて HTML コンテンツを取得する段階で、スクレイピングは HTML から構造化データを抽出する段階。両者を分離しておけば、後でスクレイパーを修正して既存データにすばやく再適用できる。
  • Python のウェブスクレイピングツールとして Playwright を推奨。非常に強力で設計のよいブラウザ自動化ツールで、コマンドラインから直接ウェブページをスクレイピングできる shot-scraper CLI ツールを使っている。
  • SaaS 企業がブログ記事で自社製品を宣伝するのはマーケティングの一部だが、初心者に最初に問題を紹介しながら自社製品を解決策として提示するのは、いつも興味深い。
  • ウェブサイトをスクレイピングする際は、有用な情報がある <domain>/robots.txt を確認することと、HTML タグをパースする代わりに構造化メタデータからデータを抽出するのが役立つことがある。これを JSON として抽出するライブラリもある。
  • Python ではなく Node.js を使ったウェブスクレイピングが人気なことに疑問を呈している。npm には DOM パース用のよくできたパッケージがあり、JavaScript を使うのでより自然な DOM 機能を利用できる。
  • pandas の read_html を使えばリンクを簡単に取得できる。これにより、ウェブサイトのテーブルデータを簡単に抽出できる。
  • 反復的で創造性のないウェブスクレイピング作業に疲れ、今は LLM(Large Language Models)を使って全工程を自動化しようとしている。LLM を使ってウェブサイトの変更に適応するスクレイパーコードを生成・調整するのは効率的。
  • Python スクレイピングの「完全ガイド」がどれほど多いのかに疑問を呈している。
  • 現代的なウェブスクレイピング環境にはブラウザエージェントが必要で、主要なソーシャルメディアプラットフォームやニューヨーク・タイムズの記事などからデータを取得するには独自ツールを構築する必要があるかもしれない。
  • スクレイピング作業中は requests-cache ライブラリが役立つ。これは requests ライブラリの代替だが、すべてのレスポンスを SQLite データベースにキャッシュするため、サイト側で制限を受けた際にスクリプトを調整するのに有用。
 
xguru 2024-02-21

このコメントで重要なのは

SaaS企業がブログ記事で自社製品を宣伝するのはマーケティングの一部だが、初心者に初めて問題を紹介しながら、自社製品を解決策として提示するのはいつも面白い。

これですね。こういう記事は、最後に必ず自社製品の宣伝が入っていることを念頭に置いて読むべきです。
逆に言えば、国内企業もこうしたやり方は基本的に使うべきだと思います。