この記事では、Python クローラー フレームワーク Scrapy の使用に関するチュートリアルを紹介します。これには一定の参考価値があります。必要な友人は参照してください。お役に立てば幸いです。
皆さんこんにちは。この記事では、強力な Python クローラー フレームワーク Scrapy について説明します。 Scrapy は使いやすく強力な非同期クローラー フレームワークです。最初にそのインストールを見てみましょう。
Scrapyのインストール
Scrapyのインストールは非常に面倒で、Scrapyを使いたい人にとっては途中で死んでしまう人も少なくありません。ここでは、私のインストール手順とインターネット上でまとめたインストール方法を共有しますので、皆さんがスムーズにインストールできることを願っています。
Windows のインストール
始める前に、Python がインストールされていることを確認する必要があります。この記事では、例として Python3.5 を取り上げます。 Scrapy には多くの依存パッケージがあるので、それらを 1 つずつインストールしましょう。
まず、pip -v を使用して pip が正常にインストールされているかどうかを確認します。正常であれば次のステップに進みます。
pip install Wheel は、前の記事. インストール後、ホイールソフトウェアをインストールできます;
lxmlのインストール. 前回の記事でインストールについて触れましたので、ここで再整理してみます。 whl ファイルアドレス: ここ。対応するバージョンのファイルを見つけます。ダウンロード後、ファイルの場所を見つけて、ファイルのプロパティを右クリックし、セキュリティ ラベルをクリックして、そのパスをコピーします。管理者ツール (cmd) を開き、pip install
PyOpenssl whl ファイル アドレス: ここにします。クリックしてダウンロードし、whl ファイルのインストール方法は上記と同じです;
Twisted Framework このフレームワークは非同期ネットワーク ライブラリであり、Scrapy の中核です。 whl ファイル アドレス: ここ;
Pywin32 これは Pywin32 と互換性のあるライブラリです、ダウンロード アドレス: ここで、ダウンロードするバージョンを選択してください;
上記のライブラリがすべてインストールされている場合、私たちの Scrapy pip installscrapy
は非常に面倒ではありませんか?面倒な作業がしたくない場合は、Windows に非常に便利にインストールすることもできます。次に、前に説明した Anaconda を使用する必要があります。特定のインストールを自分で見つけることも、以前の記事で見つけることもできます。 Scrapy のインストールに必要なのは 1 行だけです:
conda installscrapy
Linux インストール
Linux システムのインストールはより簡単です:
sudo apt-get install build-essential python3-dev libssl-dev libffi-dev libxml2 libxml2-dev libxslt1-dev zlib1g-dev
Mac OS インストール
最初に、いくつかの C 依存ライブラリをインストールする必要があります (xcode -select) --install
コマンド ライン開発ツールをインストールする必要があります。クリックしてインストールします。インストールが完了すると、依存ライブラリもインストールされます。
次に、pip を使用して pip installscrapy を直接インストールします。
上記で、Scrapy ライブラリのインストールは基本的に解決されました。
Scrapy の基本的な使い方
Scrapy の中国語ドキュメントのアドレス: ここ
Scrapy は、Web サイトのデータをクロールし、構造データを抽出するために作成されたアプリケーション フレームワークです。データマイニング、情報処理、履歴データの保存などの一連のプログラムで使用できます。
彼の基本的なプロジェクト プロセスは次のとおりです:
Scrapy プロジェクトを作成する
抽出されたアイテムを定義する
Web サイトをクロールしてアイテムを抽出するスパイダーを作成します
抽出されたアイテム (つまり、データ) を保存するアイテム パイプラインを作成します。
通常、クローラー プロセスは次のとおりです。
インデックス ページをキャッチします。インデックス ページの URL をリクエストし、ソース コード、分析の次のステップを実行します;
コンテンツと次のページ リンクを取得します: ソース コードを分析し、インデックス ページ データを抽出し、次のページ リンクを取得して、クロールの次のステップを実行します。
ページ クロールを切り替える: 次のページの情報を要求し、コンテンツを分析し、次のページのリンクを要求します。
クロール結果を保存: クロール結果を特定の形式とテキストで保存するか、保存します。データベース。
使用方法を段階的に見てみましょう。
プロジェクトの作成
スクレイピングを開始する前に、新しい Scrapy プロジェクトを作成する必要があります。コードを保存するディレクトリを入力し、次のコマンドを実行します (Zhihu Daily を例にします):
scrapy startproject zhihurb
このコマンドは、次の内容を含む zhihu ディレクトリを作成します。 :
zhihurb/
scrapy.cfg zhihurb/ __init__.py items.py pipelines.py settings.py spiders/ __init__.py ...
これらのファイルは次のとおりです:
scrapy.cfg: プロジェクトの構成ファイル zhihurb/: プロジェクトの Python モジュール。後でここにコードを追加します。 zhihurb/items.py: project 内のアイテム ファイル.zhihurb/pipelines.py: project 内のパイプライン ファイル.zhihurb/settings.py: project の設定ファイル.zhihurb/spiders/: スパイダー コードが配置されているディレクトリ
アイテムの定義
このステップでは、Web サイト内のいくつかの URL、Web サイトの記事のコンテンツ、記事の著者などこのステップが定義されている場所は items.py ファイル内です。
importscrapy
class ZhihuItem(scrapy.Item):
name = scrapy.Field() article = scrapy.Field()
Writing Spider
このステップでは、私たちが最もよく知っているクローラーを作成します。 Scrapy フレームワークを使用すると、実装方法を考える必要がなく、クローリング ロジックを記述するだけで済みます。
まず、クローラー ファイルを Spiders/ フォルダーに作成する必要があります (たとえば、spider.py という名前です)。クローラーを作成する前に、最初にいくつかのコンテンツを定義する必要があります。 Zhihu Daily を例に挙げてみましょう: https://daily.zhihu.com/
fromscrapy import Spider
class ZhihuSpider(Spider):
name = "zhihu" allowed_domains = ["zhihu.com"] start_urls = ['https://daily.zhihu.com/']
这里我们定义了什么呢?首先我们导入了Scrapy的Spider组件。然后创建一个爬虫类,在类里我们定义了我们的爬虫名称:zhihu(注意:爬虫名称独一无二的,是不可以和别的爬虫重复的)。还定义了一个网址范围,和一个起始 url 列表,说明起始 url 可以是多个。
然后我们定义一个解析函数:
def parse(self, response):
print(response.text)
我们直接打印一下,看看这个解析函数是什么。
运行爬虫
scrapy crawl zhihu
由于Scrapy是不支持在IDE中执行,所以我们必须在命令行里执行命令,我们要确定是不是cd到爬虫目录下。然后执行,这里的命令顾名思义,crawl是蜘蛛的意思,zhihu就是我们定义的爬虫名称了。
查看输出,我们先看到的是一些爬虫类的输出,可以看到输出的log中包含定义在 start_urls 的初始URL,并且与spider中是一一对应的。我们接着可以看到打印出了网页源代码。可是我们似乎并没有做什么,就得到了网页的源码,这是Scrapy比较方便的一点。
提取数据
接着就可以使用解析工具解析源码,拿到数据了。
由于Scrapy内置了CSS和xpath选择器,而我们虽然可以使用Beautifulsoup,但是BeautifulSoup的缺点就是慢,这不符合我们Scrapy的风格,所有我还是建议大家使用CSS或者Xpath。
由于之前我并没有写过关于Xpath或者CSS选择器的用法,那么首先这个并不难,而且熟悉浏览器的用法,可以很简单的掌握他们。
我们以提取知乎日报里的文章url为例:
from scrapy import Request
def parse(self, response):
urls = response.xpath('//p[@class="box"]/a/@href').extract() for url in urls: yield Request(url, callback=self.parse_url)
这里我们使用xpath解析出所有的url(extract()是获得所有URL集合,extract_first()是获得第一个)。然后将url利用yield语法糖,回调函数给下一个解析url的函数。
使用item
后面详细的组件使用留在下一章讲解,这里假如我们解析出了文章内容和标题,我们要将提取的数据保存到item容器。
Item对象相当于是自定义的python字典。 您可以使用标准的字典语法来获取到其每个字段的值。(字段即是我们之前用Field赋值的属性)。
假如我们下一个解析函数解析出了数据
def parse_url(self, response):
# name = xxxx # article = xxxx # 保存 item = DmozItem() item['name'] = name item['article'] = article # 返回item yield item
保存爬取到的数据
这里我们需要在管道文件pipelines.py里去操作数据,比如我们要将这些数据的文章标题只保留 5 个字,然后保存在文本里。或者我们要将数据保存到数据库里,这些都是在管道文件里面操作。我们后面在详细讲解。
那么最简单的存储方法是使用命令行命令:
scrapy crawl zhihu -o items.json
这条命令就会完成我们的数据保存在根目录的json文件里,我们还可以将他格式保存为msv,pickle等。改变命令后面的格式就可以了。
以上がPython クローラー フレームワーク Scrapy の使用に関するチュートリアルの詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。