Scrapy は、Web サイト上のデータを簡単にクロールおよび解析できる Python ベースの Web クローラー フレームワークです。 Scrapy を使用する場合、HTML コードの解析は重要な部分です。この記事では、読者が Scrapy の使用法をより深く理解できるように、Scrapy が HTML コードを解析する方法を紹介します。
1. Scrapy の HTML コード解析の原理
Scrapy では、HTML コードを解析する 2 つの方法、XPath と CSS Selector があります。 XPath は、XML ドキュメントのノードを走査して選択できる XML パス言語です。 CSS セレクターは、CSS に似た構文を通じてページ上の要素を選択する CSS スタイル セレクターです。 Scrapy を使用して HTML コードを解析する場合、ページの構造とキャプチャする必要があるデータの種類に基づいて、さまざまな解析方法を選択できます。
2. XPath は HTML コードを解析します
XPath は、Scrapy で HTML コードを解析するための一般的な方法です。 XPath を使用するには、Scrapy に付属の lxml ライブラリまたは Selector ライブラリを使用できます。以下では、Scrapy の Selector を例として、XPath の使用方法を紹介します。
まず、ページのソース コードを取得する必要があります。これは、Scrapy のリクエスト ライブラリを使用して実現できます。
from scrapy import Request def parse(self, response): yield Request(url='http://example.com', callback=self.parse_page) def parse_page(self, response): html = response.body
次に、セレクター ライブラリを使用して HTML コードを解析します。まず、Selector オブジェクトを構築します。
from scrapy.selector import Selector selector = Selector(text=html)
次に、XPath 構文を使用して必要な要素を選択できます。一般的に使用される XPath 構文は次のとおりです。
selector.xpath('//title') #选取所有的title元素 selector.xpath('//div[@class="example"]') #选取class为example的div元素 selector.xpath('//div[contains(@class, "example")and @id="content"]')#选取class包含example、id为content的div元素
selector.xpath('//a/@href') #选取所有a标签的href属性
selector.xpath('//h1/text()') #选取h1标签的文本内容 selector.xpath('//p[contains(text(), "example")]/text()')#选取p标签中包含example文本内容的文本
上記は、Scrapy で XPath を使用する方法です。
3. CSS セレクターは HTML コードを解析します
CSS セレクターは、Scrapy で HTML コードを解析するためによく使用されるもう 1 つの方法です。 XPath とは異なり、CSS セレクターは CSS スタイル セレクターの構文を使用します。以下では、Scrapy に付属するセレクターを例として、CSS セレクターの使用方法を紹介します。
まず、ページのソース コードを取得する必要があります。これは、Scrapy のリクエスト ライブラリを使用して実現できます。
from scrapy import Request def parse(self, response): yield Request(url='http://example.com', callback=self.parse_page) def parse_page(self, response): html = response.body
次に、セレクター ライブラリを使用して HTML コードを解析します。または、最初に Selector オブジェクトを構築します。
from scrapy.selector import Selector selector = Selector(text=html)
CSS セレクター構文を使用して要素を選択します。
selector.css('title') #选取所有的title元素 selector.css('div.example') #选取class为example的div元素 selector.css('div.example#content')#选取class为example、id为content的div元素 selector.css('a::attr(href)') #选取所有a标签的href属性 selector.css('h1::text') #选取h1标签的文本内容 selector.css('p:contains("example")::text') #选取p标签中包含example文本内容的文本
上記はScrapyでCSSセレクターを使用する方法です。
4. 概要
この記事の導入部を通じて、Scrapy が HTML コードを解析するための 2 つの方法、XPath と CSS Selector がわかりました。これら 2 つの方法を使用すると、HTML から必要なデータを簡単に選択できます。解析方法を選択するときは、ページの構造と抽出する必要があるデータの種類に基づいて、適切な方法と構文を選択する必要があることに注意してください。
以上がScrapy が HTML コードを解析する方法の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。