pythonネットワーク爬虫類シリーズチュートリアル-Scrapyフレームワーク応用全解
7609 ワード
全スタックエンジニア開発マニュアル(著者:栾鵬)
pythonチュートリアルの全解
インストール
cmdにScrapyのインストール依存wheel、twiste、lxmlパッケージを入力します.まずpip install wheelでwheelライブラリをインストールし、pip install lxmlでlxmlライブラリをインストールしますが、twistパッケージはオフラインwhlファイルでインストールする必要があります.
に入るhttp://www.lfd.uci.edu/~gohlke/pythonlibs/、twistedを検索して対応するwhlパッケージを見つけ、Twisted‑17.9.0‑cp 36‑cp 36 m‑win_amd64.whlオフラインパッケージのインストールについては、以下を参照してください.http://blog.csdn.net/luanpeng825485697/article/details/77816740
上の依存パッケージのインストールに成功しました.pipでScrapyをオンラインでインストールできます.
ちょっと待って、大功が完成します!
インストールの検証:cmdにScrapyと入力し、インストールに成功したことを示す図を表示します.現在Scrapyは1.4版まで出ています
また、cmdにpywin 32、pyOPENSSL、lxmlパッケージをそれぞれインストールするコマンドを入力する必要があります.
scrapy処理フロー
Scrapy Engine(Scrapyコア)は、各コンポーネント間のデータストリームの流れを担当します.Spiders(爬虫類)はRequestsリクエストを発行し、Scrapy Engine(Scrapyコア)を介してScheduler(スケジューラ)、Downloader(ダウンロード機)Scheduler(スケジューラ)に渡してRequestsリクエストを取得し、Requestsリクエストに基づいてネットワークからデータをダウンロードする.Downloader(ダウンロード機)のResponses応答はSpidersに再伝達されて解析される.必要に応じてItemsを抽出し、Item Pipelineに渡してダウンロードします.SpidersとItem Pipelineは,応答のニーズに応じてユーザが作成する必要がある.このほかにも、Downloaders MddlewaresとSpider Middlewaresの2つのミドルウェアがあり、この2つのミドルウェアはユーザーに提供され、カスタムコードを挿入することでScrapyの機能を拡張し、例えば重さを落とすなどします.ミドルウェアは高度なアプリケーションなので、今回のチュートリアルでは触れないので、あまり説明しません.
github管理:https://github.com/626626cdllp/crawler/tree/master/myscrapy
scrapyプロジェクトdemo
上のプロセスを理解するには、spidersフォルダの下で定義された爬虫類、要求ウェブサイト、応答を取得し、データを解析し、itemsで定義されたクラスエンティティに所望のデータを付与します.最後にpipelinesの下のクラスを自動的に呼び出してitemsのデータを取得し、さらに処理します.
今日は私のcsdnのすべての文章の名前を取得し、本を読む目、私のトップページをリンクすることを実現します.http://blog.csdn.net/luanpeng825485697
1、プロジェクトの作成
プロジェクトを作成し、cmdでプロジェクトパスにcdを入力し、scrapyを使用してプロジェクトを作成します.ここではD:scrapydemoフォルダの下にアイテムを置くのでcmdで実行します
scrapy startprojectは固定コマンドで、後ろのprojectnameは自分が思い出したプロジェクト名です.
このコマンドは、次のprojectnameディレクトリを作成します.
これらのファイルは次のとおりです.
scrapy.cfg:プロジェクトのプロファイル;Projectname/:このプロジェクトのpythonモジュール.その後、Spiderコードが追加されます.projectname/items.py:プロジェクト内のitemファイルで、必要なエンティティクラスprojectname/middlewaresを定義します.py:プロジェクト内のミドルウェア、projectname/pipelinesに関心を持たないでください.py:プロジェクト内のpipelinesファイル;爬虫類を書くための処理ファイルprojectname/settings.py:プロジェクトの設定ファイル、パラメータprojectname/spiders/:spiderコードを配置するディレクトリを定義します.このフォルダの下に爬虫類を置くことを定義します.
2、必要なエンティティクラスitemsを定義します.py
ここでは、必要な記事の名前、リンク、読み取り数を定義します.
3、爬虫類を作る
私たちはこの爬虫類を使ってブログの下の文章名、リンクアドレス、読書数を取得します.
Projectname/spiders/フォルダの下にcrawlを新規作成spider.py,ここではリクエスト,応答,解析のプロセスを実現する.
xpath構文リファレンスhttp://blog.csdn.net/luanpeng825485697/article/details/78410691
4、pipeline処理ファイルの設定
pipelineは主にitemデータに基づいて次の処理を担当しています.例えば、画像をダウンロードしたり、ファイルを保存したりします.ここではitemの文章名、リンク、読書書目だけをファイルに保存します.dataファイルアドレス:https://github.com/626626cdllp/crawler/tree/master/myscrapy/projectname
5、settingsプロファイルを完備する
settings.pyの内容の大部分は自動的に生成され、あまり変更する必要はありません.ここでは辞書の形式で自分のpipelinesの処理クラスを定義するだけです.
私たちが書くべきことをサポートしてくれました
次の図は、ファイルディレクトリ構造です.
6、scrapyプロジェクトの実行
まずcmdのcdを自分のプロジェクトフォルダの下、すなわちscrapyに移動する.cfgが存在するディレクトリでは、cdをD:scrapydemoprojectnameフォルダの下に、次のコードを使用して自分の爬虫類を実行します.myspiderはcrawl_spider.pyファイルのname変数
pythonチュートリアルの全解
インストール
cmdにScrapyのインストール依存wheel、twiste、lxmlパッケージを入力します.まずpip install wheelでwheelライブラリをインストールし、pip install lxmlでlxmlライブラリをインストールしますが、twistパッケージはオフラインwhlファイルでインストールする必要があります.
に入るhttp://www.lfd.uci.edu/~gohlke/pythonlibs/、twistedを検索して対応するwhlパッケージを見つけ、Twisted‑17.9.0‑cp 36‑cp 36 m‑win_amd64.whlオフラインパッケージのインストールについては、以下を参照してください.http://blog.csdn.net/luanpeng825485697/article/details/77816740
上の依存パッケージのインストールに成功しました.pipでScrapyをオンラインでインストールできます.
pip install Scrapy
ちょっと待って、大功が完成します!
インストールの検証:cmdにScrapyと入力し、インストールに成功したことを示す図を表示します.現在Scrapyは1.4版まで出ています
また、cmdにpywin 32、pyOPENSSL、lxmlパッケージをそれぞれインストールするコマンドを入力する必要があります.
pip install pywin32
pip install pyOPENSSL
pip install lxml
scrapy処理フロー
Scrapy Engine(Scrapyコア)は、各コンポーネント間のデータストリームの流れを担当します.Spiders(爬虫類)はRequestsリクエストを発行し、Scrapy Engine(Scrapyコア)を介してScheduler(スケジューラ)、Downloader(ダウンロード機)Scheduler(スケジューラ)に渡してRequestsリクエストを取得し、Requestsリクエストに基づいてネットワークからデータをダウンロードする.Downloader(ダウンロード機)のResponses応答はSpidersに再伝達されて解析される.必要に応じてItemsを抽出し、Item Pipelineに渡してダウンロードします.SpidersとItem Pipelineは,応答のニーズに応じてユーザが作成する必要がある.このほかにも、Downloaders MddlewaresとSpider Middlewaresの2つのミドルウェアがあり、この2つのミドルウェアはユーザーに提供され、カスタムコードを挿入することでScrapyの機能を拡張し、例えば重さを落とすなどします.ミドルウェアは高度なアプリケーションなので、今回のチュートリアルでは触れないので、あまり説明しません.
github管理:https://github.com/626626cdllp/crawler/tree/master/myscrapy
scrapyプロジェクトdemo
上のプロセスを理解するには、spidersフォルダの下で定義された爬虫類、要求ウェブサイト、応答を取得し、データを解析し、itemsで定義されたクラスエンティティに所望のデータを付与します.最後にpipelinesの下のクラスを自動的に呼び出してitemsのデータを取得し、さらに処理します.
今日は私のcsdnのすべての文章の名前を取得し、本を読む目、私のトップページをリンクすることを実現します.http://blog.csdn.net/luanpeng825485697
1、プロジェクトの作成
プロジェクトを作成し、cmdでプロジェクトパスにcdを入力し、scrapyを使用してプロジェクトを作成します.ここではD:scrapydemoフォルダの下にアイテムを置くのでcmdで実行します
D:
cd /scrapydemo
scrapy startproject projectname
scrapy startprojectは固定コマンドで、後ろのprojectnameは自分が思い出したプロジェクト名です.
このコマンドは、次のprojectnameディレクトリを作成します.
projectname/
scrapy.cfg
projectname/
__init__.py
items.py
middlewares.py
pipelines.py
settings.py
spiders/
__init__.py
...
これらのファイルは次のとおりです.
scrapy.cfg:プロジェクトのプロファイル;Projectname/:このプロジェクトのpythonモジュール.その後、Spiderコードが追加されます.projectname/items.py:プロジェクト内のitemファイルで、必要なエンティティクラスprojectname/middlewaresを定義します.py:プロジェクト内のミドルウェア、projectname/pipelinesに関心を持たないでください.py:プロジェクト内のpipelinesファイル;爬虫類を書くための処理ファイルprojectname/settings.py:プロジェクトの設定ファイル、パラメータprojectname/spiders/:spiderコードを配置するディレクトリを定義します.このフォルダの下に爬虫類を置くことを定義します.
2、必要なエンティティクラスitemsを定義します.py
ここでは、必要な記事の名前、リンク、読み取り数を定義します.
# -*- coding: utf-8 -*-
# , , , pipelines, 。
import scrapy
class myentity(scrapy.Item):
name = scrapy.Field()
link = scrapy.Field()
readnum = scrapy.Field()
3、爬虫類を作る
私たちはこの爬虫類を使ってブログの下の文章名、リンクアドレス、読書数を取得します.
Projectname/spiders/フォルダの下にcrawlを新規作成spider.py,ここではリクエスト,応答,解析のプロセスを実現する.
xpath構文リファレンスhttp://blog.csdn.net/luanpeng825485697/article/details/78410691
# -*- coding: utf-8 -*-
# 、 、
import re
import scrapy
import urllib
from scrapy import Selector
from projectname.items import myentity
class MySpider(scrapy.Spider):
name = 'myspider' # ,
def __init__(self):
self.allowed_domains = ['blog.csdn.net']
self.start_urls = ['http://blog.csdn.net/luanpeng825485697/article/list/']
# start_requests
def start_requests(self):
yield scrapy.Request(url = self.start_urls[0]+"1", meta = {'data':1},callback = self.parse1) # , ,
# response, 、 、 , 。
def parse1(self, response):
index = response.meta['data'] #
if index>100: # 100
return
hxs = Selector(response)
#
links = hxs.xpath("//span[@class='link_title']/a[1]/@href").extract() #xpath
#
names = hxs.xpath("//span[@class='link_title']/a[1]/text()").extract() #xpath
#
reads = hxs.xpath("//span[@class='link_view']/text()").extract() #xpath
# items
for i in range(1,len(links)):
item = myentity()
item['link'] = urllib.parse.urljoin('http://blog.csdn.net/',links[i]) #
item['name'] = names[i]
item['readnum'] = reads[i]
# item, item pipeline
yield item
#
yield scrapy.Request(url=self.start_urls[0]+str(index+1), meta={'data': index+1}, callback=self.parse1)
4、pipeline処理ファイルの設定
pipelineは主にitemデータに基づいて次の処理を担当しています.例えば、画像をダウンロードしたり、ファイルを保存したりします.ここではitemの文章名、リンク、読書書目だけをファイルに保存します.dataファイルアドレス:https://github.com/626626cdllp/crawler/tree/master/myscrapy/projectname
# -*- coding: utf-8 -*-
#pipelines.py item ,
from projectname import settings
from scrapy import Request
import requests
import os
class MyPipeline(object):
allpaper=[]
def process_item(self, item, spider):
paper={}
paper['name']=item['name']
paper['link'] = item['link']
paper['read'] = item['readnum']
self.allpaper.append(paper)
file_object = open('data.txt', 'a')
file_object.write(str(paper)+"\r
")
file_object.close()
return item
5、settingsプロファイルを完備する
settings.pyの内容の大部分は自動的に生成され、あまり変更する必要はありません.ここでは辞書の形式で自分のpipelinesの処理クラスを定義するだけです.
SPIDER_MODULES = ['projectname.spiders'] # ;
NEWSPIDER_MODULE = 'projectname.spiders' # ;
# Obey robots.txt rules # , ,
ROBOTSTXT_OBEY = False # , robots.txt , ;
ITEM_PIPELINES = { # item pipeline;
'projectname.pipelines.MyPipeline': 1, # 1 , pipeline, 0-1000
}
DOWNLOAD_DELAY = 0.25 # , 250ms 。
COOKIES_ENABLED = False #Cookie , Cookie;
私たちが書くべきことをサポートしてくれました
次の図は、ファイルディレクトリ構造です.
6、scrapyプロジェクトの実行
まずcmdのcdを自分のプロジェクトフォルダの下、すなわちscrapyに移動する.cfgが存在するディレクトリでは、cdをD:scrapydemoprojectnameフォルダの下に、次のコードを使用して自分の爬虫類を実行します.myspiderはcrawl_spider.pyファイルのname変数
scrapy crawl myspider