この記事では、Scrapyクローラーのケースを0から記述し、結果をローカルのjson形式で保存します。これにより、いくつかのファイルの役割が紹介されます。初心者が一緒に学ぶのに適しています。完全で運用可能なコードは、記事の最後に記載されています
1.クロールされたWebサイト
クロールする予定の内容は次のとおりです。http:
//www.itcast.cn/channel/teacher.shtml「チェック」またはF12を右クリックすると、Webサイト上のすべての教師の名前、役職、および情報を表示できます(ノートブックにはFnが必要です)。 + F12)ブラウザ内上記のデバッグページでは、Googleプラグインのxpathヘルパーがダウンロードすることをお勧めします。これは使いやすいです。
次に、クロールの詳細な手順
1.クローラープロジェクトを作成します
クローラープロジェクトを作成するコマンドは次のとおりです
。scrapystartprojectプロジェクト名
この時点で、作成したプロジェクトフォルダーがデスクトップに表示されます。最初の作成内容は次のとおりです。
ここでは、各ファイルの役割について説明します。
プロファイルプロジェクト:scrapy.cfg
スパイダー/:このフォルダー
のinit .pyの下に爬虫類ファイルを書き込みました:通常は空のファイルですが、存在する必要があります。ディレクトリ__init__。pyはありません。彼が単なるディレクトリパッケージ
アイテムではないことを示します。:構造化フィールドを定義し、クロールされたデータを保存するプロジェクトのターゲットファイル
middlewares.py:プロジェクトのミドルウェア
pipelines.py:プロジェクトのパイプラインファイル
setting.py:プロジェクトの設定ファイル
2.クローラーファイルを作成します
作成したプロジェクト(cd ITcast)を
入力して、次のようにクローラーファイルコマンドを作成します
。scrapygenspiderファイル名(ここにクローラーコードを記述します)
このとき、新しく作成されたファイルitcast.pyがspiderフォルダーに表示されます。
3.items.pyを書きます
このファイルは、クロールする特定のコンテンツを定義するために使用されます。これは、データベースのフィールドまたはJavaのPojoクラスに相当します。
import scrapy
class ItcastItem(scrapy.Item):
# define the fields for your item here like:
# 老师姓名
name = scrapy.Field()
# 老师职称
title = scrapy.Field()
# 老师信息
info = scrapy.Field()
4.setting.pyを設定します
このファイルは構成ファイルです。ファイルの内容は次のように変更されます。
まず、学習目的であるため、robots.txtプロトコルに準拠する必要がないため、変更するROBOTSTXT_OBEYを見つけます。
ROBOTSTXT_OBEY = False
次に、ITEM_PIPELINESコメントを削除し、
ITEM_PIPELINES = {
'Teacher.pipelines.TeacherPipeline': 300,
}
上記の2つの手順で、それぞれFalseに変更し、コメントを解除すると、構成が完了します。
5.itcast.pyを記述します
import scrapy
from ITcast.items import ItcastItem
class ItcastSpider(scrapy.Spider):
# 爬虫名 启动爬虫时需要的参数 *必须
name = 'itcast'
# 爬取域范围 允许爬虫在这个域名下面进行爬取 可选
allowed_domains = ['http://www.itcast.cn']
# 起始url列表,爬虫执行后第一批请求,将从这个列表里获取
start_urls = ['http://www.itcast.cn/channel/teacher.shtml']
# 解析响应文件 //div[@class='li_txt']是xpath语法 大家可以学一学
def parse(self, response):
node_list = response.xpath("//div[@class='li_txt']")
items = [] # 用来存储所有的item字段
for node in node_list:
# 创建item字段对象,用来存储信息
item = ItcastItem()
name = node.xpath("./h3/text()").extract()
title = node.xpath("./h4/text()").extract()
info = node.xpath("./p/text()").extract()
# 注意 这里返回的不是文本而是一个xpath对象
# 需要用.extrac()将xpath对象转化为 Unicode字符串
item['name'] = name[0]
item['title'] = title[0]
item['info'] = info[0]
items.append(item)
return items # 返回给engine引擎
6.クロールを開始し、json形式で保存します
次に、必要な情報をクロールを開始cmdのコマンドは次のように。
scrapyクロールプロジェクト名-oプロジェクトname.jsonを
ここに私のコマンドは次のとおりです。scrapyクロールitcast -o itcast.json
ここにもCSV形式で保存することができます。scrapyクロールプロジェクトname- o Project name.csv
ここでは、クロールされた情報がjson形式であり、itcast.jsonのローカルファイルがスパイダーフォルダーの下に表示されていることがわかります。
ここでitcast.jsonファイルを開くと、形式がUnicodeエンコーディングであることがわかり
ます。表示するにはjsonコンバーターが必要です。jsonオンライン解析https://www.json.cn/をクリックし、コピーして解析します。
これまでのところ、スクレイプクロール全体作業が完了しました!
最終的なソースコードの詳細については、
https://github.com/zmk-c/scrapy/tree/master/scrapy_itcastをご覧ください。
メリットの波、scrapyの使用を開始する方法を学ぶビデオ:https://www.bilibili .com / video / BV1jx411b7E3