aiohttp
で並列クローリングは,並列処理について基礎からPythonでのやり方に関して知っていないと使いこなせません.
現に私は理解できず使うのを今は断念...
まぁ,同時に複数アクセスなら並列でなくともできます.
簡単なことです.
コマンドプロンプトもしくはIDLEを複数起動し,クローリングモジュールを使ったスクリプトを各々で実行すればいいだけです.
しかし,クローリングモジュールで定番のrequests
でソレをやると,
エラーが出ます.同時アクセスは出来ません.
ここでmechanize
なのですが,このモジュールではそういったエラーは発生しませんでした.
たまたまかもしれませんが...
今までrequests
で書いていたものをmechanize
で書き直したほうがイイかな~と思い,
その際に役立つメモとして,
何が対応・書き換えられるのかを以下に書いていこうと思います.
完全一致ではないですがね~
|
|
|
---|---|---|
セッションの開始 |
|
|
ニコニコ動画などへのログイン |
|
|
セッション後,別ページへクローリングし, スクレイピングモジュールBeautifulSoupに渡すもの |
|
|
URLへポストする |
|
|
エラー処理 |
|
|
得たHTMLテキストデータ(info
という変数に入れたとする)は
from bs4 import BeautifulSoup as bs
soup = bs(info,'html.parser')
というようにしてBeautifulSoup
に渡します.
また,多くのWebサイトでは”robot.txt”というクローリングの規約みたいなものがあり,
mechanize
はそれがあった際にデフォルトではアクセスせずにエラーError 403: b'request disallowed by robots.txt'
を発生させます.
基本的にこれに従ったほうが良いのですが,
どうしてもクローリングしたいというときはbr = mechanize.Browser()
の直後に
br.set_handle_robots(False)
br.addheaders = [('User-Agent', 'jp'), ('Accept', '*/*')]
を実行します.
以上によって”robot.txt”を無視するようになり(requests
だと最初から無視状態),アクセスが可能になります.
私的利用で公開は絶対しないという場合以外はしないのが賢明です.
あと,クローリングする際は
from time import sleep
# クローリング処理
sleep(1)
といったように一アクセスするごとに最低数秒は間を開けるようにしておいたほうがイイですね.
参考
- python - mechanizeを使用したrobots.txtの取得中にHTTP403エラーが発生しました
- Python mechanizeでブラウザ操作をエミュレート - Symfoware
- 【python】mechanizeのインストール・使い方 | サラリーマンがハッカーを真剣に目指す
- Browser API — mechanize 0.4.5 documentation
- HTML Forms API — mechanize 0.4.5 documentation
- mechanize._mechanize — mechanize 0.4.5 documentation
など