pythonネットワーク爬虫類シリーズチュートリアル-Scrapyフレームワーク応用全解


全スタックエンジニア開発マニュアル(著者:栾鵬)
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版まで出ています
python网络爬虫系列教程——Scrapy框架应用全解_第1张图片
また、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の機能を拡張し、例えば重さを落とすなどします.ミドルウェアは高度なアプリケーションなので、今回のチュートリアルでは触れないので、あまり説明しません.python网络爬虫系列教程——Scrapy框架应用全解_第2张图片
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;


私たちが書くべきことをサポートしてくれました
次の図は、ファイルディレクトリ構造python网络爬虫系列教程——Scrapy框架应用全解_第3张图片です.
6、scrapyプロジェクトの実行
まずcmdのcdを自分のプロジェクトフォルダの下、すなわちscrapyに移動する.cfgが存在するディレクトリでは、cdをD:scrapydemoprojectnameフォルダの下に、次のコードを使用して自分の爬虫類を実行します.myspiderはcrawl_spider.pyファイルのname変数
scrapy crawl myspider