PythonとScrapyを使用したWebクロールの初心者向けガイド。

Webクロールとは何ですか?

Webスクレイピングには、Webサイトで利用可能なデータの収集が含まれます。これは、人間またはロボットによって手動で行うことができます。これは、ウェブサイトから情報とデータを抽出し、取得した情報を構造化データに変換してさらに分析するプロセスです。Webスクレイピングは、WebコレクションまたはWebデータ抽出とも呼ばれます。

Webクロールが必要

Webスクレイピングは、傾向、パフォーマンス、および価格監視の分析のためのデータを取得するのに役立ちます。ニュース記事の洞察、市場データの集約、予測分析、および多くの自然言語処理プロジェクトを取得するための消費者感情分析に使用できます。Webスクレイピングでは、次のようなさまざまなPythonライブラリが使用されます。

  • パターン
  • Scrapy
  • 美しいスープ
  • リクエスト、商品化、セレンなど。

Scrapyは、Pythonで記述された完全なウェブスクレイピングフレームワークであり、解析用のHTMLをダウンロードします。ただし、Beautiful Soupは、HTMLからデータを解析および抽出するためのライブラリです。

ウェブスクレイピングに関連する手順

  1. ドキュメントのロード/ダウンロード:HTMLページ全体をロードします
  2. 解析と抽出:ドキュメントを解釈し、ドキュメントから情報を収集します
  3. 変換:収集したデータを変換します。

以下のために、ダウンロード、Pythonの使用要求htmlページをダウンロードするには、ライブラリを。Scrapyには組み込みのリクエストメソッドがあります。

ただし、ドキュメントを解析するときは、ハイパーテキストマークアップ言語(HTML)に精通している必要があります。HTMLは、Webページの作成に使用される標準のマークアップ言語です。これは、コンテンツの表示方法をブラウザに指示する一連の要素/タグ名で構成されています。HTML要素はで構成されています

<開始タグ>ここにコンテンツ</終了タグ>

HTMLは、タグ名/ノードを含むツリー構造として表現できます。ここでは、親、子、兄弟などのノード間に関係があります。

ダウンロード後、CSSセレクターまたはXPATHロケーターを使用してHTMLソースからデータを抽出します

XPathはXMLパスとして定義されています。これは、XMLパス式を使用してWebページ上の任意の要素を検索するための文法または言語です。XPathは、HTMLDOM構造を使用してWebページ上の要素の位置を見つけるために使用されます。

XPATHロケーターの使用を開始する

絶対Xpath:ルート要素から目的の要素への完全なパスが含まれます。

相対Xpath:これは、単に必要な要素を参照し、特定の位置から開始するようなものです。要素をテストするために常に相対パスを使用します

指示付きのXPATHの例

練習用にこのHTMLスクリプトを作成し、説明で使用するために(.html)としてコピーして保存します

<html>
     <head><title>Store</title></head>
     <body>
         <musicshop id="music"><p><h2>MUSIC</p></h2>
            <genre><h3><p>Hip-Hop</p></h3>
                <ul>
                    <li>Travis Scott</li>
                    <li>Pop Smoke</li>
                </ul>
            </genre>
            <genre country="korea"><h3><p>K-pop</p></h3>
                <ul>
                    <li>G Dragon</li>
                    <li>Super Junior</li>
                </ul>
            </genre>
        </musicshop>
        <bookstore id='book'><p><h2>BOOKS</p></h2>
            <bookgenre class = "fiction"><p><h3>Fiction</h2></p>
                <ul>
                    <li><booktitle><h5><p>The Beetle</p></h5></booktitle></li>
                    <li><booktitle><h5><p>The Bell Jar</p></h5></booktitle></li>
                    <li><booktitle><h5><p>The Book Thief</p></h5></booktitle></bookgenre></li>
                </ul>
            <bookgenre class="horror"><p><h2>Horror</h2></p>
                <ul>
                    <li><booktitle><h5><p><a href='www.goodreads.com/book/show/3999177-the-bad-seed'>The Bad Seed</a></p></h5></booktitle></li>
                    <li><booktitle><h5><p>House of Leaves</p></h5></booktitle></li>
                    <li><booktitle><h5><p>The Hanting of Hill House</p></h5></booktitle></bookgenre></li>
                </ul>
        </bookstore>
    </body>
</html>
复制

作成されたHTMLは、下の図のWebページを生成します

ブラウザ(Chrome)リンクでXPATHとCSSロケーターを練習する

  1. F12を押してChromeDevToolsを開きます。
  2. 「要素」パネルはデフォルトで開かれているはずです。
  3. Ctrl + Fを押して、パネルでDOM検索を有効にします。
  4. 評価のためにXPathまたはCSSセレクターを入力します。
  5. 一致する要素がある場合、それらはDOMで強調表示されます。

キャラクター

  • ノード名-指定された名前のノードを選択します
  • ルートノードから「/」を選択
  • "//"-前世代のラベルを無視し、選択に一致する現在のノードから開始します
  • 「@」-「指定された属性を持つノード」を選択します。XPATHと上記のHTMLドキュメントを使用して

2番目のヒップホップを選択します

絶対パス:-/ html / body / musicshop / genre / ul / li [2]インデックスは指定されておらず、デフォルトは1です。

相対パス:-// musicshop // li [2]抽出するために、名前/ text()を含めて
// musicshop // li [2] / text()を指定します

属性名で選択

// bookstore / bookgenre [@ class = 'fiction'] `` `

// bookstore / bookgenre [contains(@ class、 'fiction')]も使用できます

Webクロール

Nairalandの最初のページからニュースリンクとトピックを抽出します。

まず、Nairalandと使用するxpathLocatorを確認します

リンクの場合:// table [@ summary = 'links] // a / @ href

トピックの場合:// table [@ summary = 'links] // a / text()は直接的な解決策である必要がありますが、

タグにはテキストが含まれているため、// table [contains(@ class、 'boards')] [2] // tr [2] // a [descendant-or-self :: text()]を使用します

その後、主要な情報を入手したので、ライブラリをインポートしました

import scrapy

from scrapy.crawler import CrawlerProcess

スパイダークラスを作成し、scrapyからスパイダーを継承します

class Spider(scrapy.Spider):
  name = 'yourspider'
  # start_requests method
  def start_requests( self ):
    yield scrapy.Request(url = "https://www.nairaland.com/", callback=self.parse)

  def parse(self, response):
    blocks = response.xpath("//table[contains(@class,'boards')][2]//tr[2]")
    News_Titles = blocks.xpath(".//a[descendant-or-self::text()]").extract()
    News_Links= blocks.xpath(".//a/@href").extract()
    for crs_title, crs_descr in zip( News_Titles, News_Links ):
      dc_dict[crs_title] = crs_descr

だから私たちはクローラーを開始します

process = CrawlerProcess()
process.crawl(Spider)
process.start()
print(dc_dict)


自分で作成したPython学習グループ:721195303を引き続きお勧めします。全員がPythonを学習しています。Pythonを学習したい、または学習している場合は、ぜひ参加してください。誰もがソフトウェア開発パーティーであり、時から乾物を共有しています。最新のPythonの高度な資料のコピーと、2021年に私が編集したゼロベースの教育を含む(Pythonソフトウェア開発関連のみ)。高度でPythonに興味のある友人を歓迎します。

おすすめ

転載: blog.csdn.net/aaahtml/article/details/113029974