[実行環境]
Win10
Anaconda 4.8.3
python 3.7.7
scrapy 1.6.0
Anaconda
python3.8.4+pipenvの組み合わせでscrapy2.1.0のインストールにチャレンジしていたんですけど、なんかTwistedの依存関係みたいなのでこけます。
中国のサイトではうまくいった報告も多数あるんですけど、自分の環境では無理でした。残念。
win10 python3.8安装scrapy 仅需两步_ruokeqx-CSDN博客
win10 python3.8 安装Scrapy_fire_lch316的博客-CSDN博客
そこでscrapy公式が推奨するAnaconda。
インストールしてWinスタートよりAnaconda Promptを起動。
【初心者向け】Anacondaで仮想環境を作ってみる - Qiita
Anaconda でよく使うコマンド一覧 - Qiita
condaというコマンドを使います。
デフォルトは(base)という仮想開発環境がすでに用意されていて、すでに多くのパッケージがインストールされています。
まずはconda本体をアップデートして最新の環境を用意する。
(base) C:\Users\XXX>conda update -n base -c defaults conda ......略
condaのバージョン確認。
(base) C:\Users\XXX>conda --version conda 4.8.3
デフォルトの環境は汚さずに、新しく仮想環境を作成。
(base) C:\Users\XXX>conda create --name samp_env Collecting package metadata (current_repodata.json): done Solving environment: done ......略
仮想環境一覧表示。samp_envが新しくできました。
(base) C:\Users\XXX>conda info --env # conda environments: # base * C:\Users\XXX\anaconda3 samp_env C:\Users\XXX\anaconda3\envs\samp_env
作った仮想環境を有効化。
(base) C:\Users\XXX>conda activate samp_env (samp_env) C:\Users\XXX>
インストールしたいパッケージがあるかを検索。今回はscrapy。
(samp_env) C:\Users\XXX>conda search scrapy Loading channels: done # Name Version Build Channel scrapy 1.4.0 py27h4eaa785_1 pkgs/main scrapy 1.4.0 py35h054a469_1 pkgs/main scrapy 1.4.0 py36h764da0a_1 pkgs/main scrapy 1.5.0 py27_0 pkgs/main scrapy 1.5.0 py35_0 pkgs/main scrapy 1.5.0 py36_0 pkgs/main scrapy 1.5.1 py27_0 pkgs/main scrapy 1.5.1 py35_0 pkgs/main scrapy 1.5.1 py36_0 pkgs/main scrapy 1.5.1 py37_0 pkgs/main scrapy 1.5.2 py27_0 pkgs/main scrapy 1.5.2 py36_0 pkgs/main scrapy 1.5.2 py37_0 pkgs/main scrapy 1.6.0 py27_0 pkgs/main scrapy 1.6.0 py36_0 pkgs/main scrapy 1.6.0 py37_0 pkgs/main scrapy 1.6.0 py38_0 pkgs/main
Anacondaでは最新がscrapy1.6.0のようです。
仮想環境にはpythonすらもなく空っぽらしいので、併せてインストールします。
以前pipenv環境では3.8.4を使ってうまくいかなかったので3.7系を使うことにします。
(samp_env) C:\Users\XXX>conda install python==3.7.* scrapy==1.6.* ......略
仮想環境にインストールしたパッケージを一覧表示。
scrapyと依存関係にあるパッケージも自動的にインストールされます。
(samp_env) C:\Users\XXX>conda list # packages in environment at C:\Users\XXX\anaconda3\envs\samp_env: # # Name Version Build Channel atomicwrites 1.4.0 py_0 attrs 19.3.0 py_0 automat 0.8.0 py_0 bcrypt 3.1.7 py37he774522_1 ca-certificates 2020.1.1 0 certifi 2020.4.5.1 py37_0 cffi 1.14.0 py37h7a1dbc1_0 colorama 0.4.3 py_0 constantly 15.1.0 py37h28b3542_0 cryptography 2.9.2 py37h7a1dbc1_0 cssselect 1.1.0 py_0 hyperlink 19.0.0 py_0 idna 2.9 py_1 importlib-metadata 1.6.0 py37_0 importlib_metadata 1.6.0 0 incremental 17.5.0 py37_0 libiconv 1.15 h1df5818_7 libxml2 2.9.10 h464c3ec_1 libxslt 1.1.34 he774522_0 lxml 4.5.1 py37h1350720_0 more-itertools 8.3.0 py_0 openssl 1.1.1g he774522_0 packaging 20.3 py_0 parsel 1.5.2 py37_0 pip 20.0.2 py37_3 pluggy 0.13.1 py37_0 py 1.8.1 py_0 pyasn1 0.4.8 py_0 pyasn1-modules 0.2.7 py_0 pycparser 2.20 py_0 pydispatcher 2.0.5 py37_1 pyhamcrest 1.9.0 py37_2 pyopenssl 19.1.0 py37_0 pyparsing 2.4.7 py_0 pytest 5.4.2 py37_0 pytest-runner 5.2 py_0 python 3.7.7 h81c818b_4 pywin32 227 py37he774522_1 queuelib 1.5.0 py37_0 scrapy 1.6.0 py37_0 service_identity 18.1.0 py37h28b3542_0 setuptools 47.1.1 py37_0 six 1.15.0 py_0 sqlite 3.31.1 h2a8f88b_1 twisted 20.3.0 py37he774522_0 vc 14.1 h0510ff6_4 vs2015_runtime 14.16.27012 hf0eaf9b_2 w3lib 1.21.0 py_0 wcwidth 0.1.9 py_0 wheel 0.34.2 py37_0 wincertstore 0.2 py37_0 zipp 3.1.0 py_0 zlib 1.2.11 h62dcd97_4 zope 1.0 py37_1 zope.interface 4.7.1 py37he774522_0
scrapy
ここからはscrapyによる操作。
Scrapy Tutorial — Scrapy 1.6.0 documentation
Python, Scrapyの使い方(Webクローリング、スクレイピング) | note.nkmk.me
scrapyのプロジェクトを作成。デフォルトだとC:\Users\XXX直下にプロジェクトが作られてしまうため、scrapy startproject [name] [dir]みたいにディレクトリを指定。
(samp_env) C:\Users\XXX>scrapy startproject scrapy_tutorial C:\workspace\project New Scrapy project 'scrapy_tutorial', using template directory 'C:\Users\XXX\anaconda3\envs\samp_env\lib\site-packages\scrapy\templates\project', created in: C:\workspace\project You can start your first spider with: cd C:\workspace\project scrapy genspider example example.com
以降のコマンドは作成されたscrapyプロジェクトから実行するので、ディレクトリを移動。
(samp_env) C:\Users\XXX>cd C:\workspace\project
スパイダーと呼ばれるクローラーの雛形を作成します。
クローリングする対象サイトは公式が準備してくれているQuotes to Scrapeとします。
(samp_env) C:\workspace\project>scrapy genspider quotes quotes.toscrape.com Created spider 'quotes' using template 'basic' in module: scrapy_tutorial.spiders.quotes
spidersフォルダ配下にquotes.pyというファイルが作成されました。
# -*- coding: utf-8 -*- import scrapy class QuotesSpider(scrapy.Spider): name = 'quotes' allowed_domains = ['quotes.toscrape.com'] start_urls = ['http://quotes.toscrape.com/'] def parse(self, response): pass
parseの部分を以下のように変更。
responseオブジェクトから任意のテキストを抜き出します。
Scrapy 備忘メモ - yFujitaのブログ
def parse(self, response): print('>>>>>>>>>>>> parse start >>>>>>>>>>>>') print(response.selector.css('span.text').xpath('string()').get()) print('>>>>>>>>>>>> parse finish >>>>>>>>>>>>')
トップページ最上部にあるアインシュタインの言葉を取得してみます。
クロールコマンドでスパイダーを走らせます。
すると、だだーっとログが表示されます。目的のテキストがうまく取得できてるようです。
(samp_env) C:\workspace\project>scrapy crawl quotes 2020-06-18 08:46:56 [scrapy.utils.log] INFO: Scrapy 1.6.0 started (bot: scrapy_tutorial) ...略... >>>>>>>>>>>> parse start >>>>>>>>>>>> “The world as we have created it is a process of our thinking. It cannot be changed without changing our thinking.” >>>>>>>>>>>> parse finish >>>>>>>>>>>> 2020-06-18 08:46:57 [scrapy.core.engine] INFO: Spider closed (finished) ...略...
condaのその他コマンド
仮想環境から出る。
conda deactivate [env_name]
仮想環境を削除する。
conda remove --name [env_name] --all