一、クローラーとは

クローラー:インターネットから自動的に情報を取得するプログラムであり、インターネットから私たちにとって価値のある情報を取得します。

二、Pythonクローラーのアーキテクチャ

Pythonクローラーのアーキテクチャは主に5つの部分から構成されており、それぞれスケジューラ、URLマネージャ、ウェブページダウンローダ、ウェブページパーサ、アプリケーション(取得した価値のあるデータ)です。

  • スケジューラ:パソコンのCPUに相当し、主にURLマネージャ、ダウンローダ、パーサの間の調整作業を担当します。
  • URLマネージャ:取得予定のURLアドレスと取得済みのURLアドレスを含み、URLの重複取得とURLのループ取得を防ぎます。URLマネージャの実装は主に3つの方法があり、メモリ、データベース、キャッシュデータベースを通じて実現します。
  • ウェブページダウンローダ:URLアドレスを渡すことでウェブページをダウンロードし、ウェブページを文字列に変換します。ウェブページダウンローダにはurllib2(Python公式の基本モジュール)があり、ログイン、プロキシ、cookieが必要な場合に対応します。また、requests(サードパーティパッケージ)もあります。
  • ウェブページパーサ:ウェブページの文字列を解析し、私たちの要求に応じて有用な情報を抽出できます。また、DOMツリーの解析方法に従って解析することもできます。ウェブページパーサには、正規表現(直感的で、ウェブページを文字列に変換し、あいまい一致によって価値のある情報を抽出しますが、ドキュメントが複雑な場合、この方法でデータを抽出するのは非常に困難になります)、html.parser(Python標準)、beautifulsoup(サードパーティプラグインで、Python標準のhtml.parserを使用して解析することも、lxmlを使用して解析することもでき、他の方法と比べて強力です)、lxml(サードパーティプラグインで、xmlとHTMLを解析できます)があります。html.parser、beautifulsoup、lxmlはすべてDOMツリー方式で解析します。
  • アプリケーション:ウェブページから抽出した有用なデータで構成されるアプリケーションです。

以下に、スケジューラがどのように調整作業を行うかを図で説明します。

三、urllib2 によるウェブページダウンロードの3つの方法

#!/usr/bin/python # -*- coding: UTF-8 -*- import cookielib import urllib2 url = "http://www.baidu.com" response1 = urllib2.urlopen(url) print "最初の方法" #ステータスコードを取得、200は成功を意味します print response1.getcode() #ウェブページコンテンツの長さを取得 print len(response1.read()) print "2番目の方法" request = urllib2.Request(url) #Mozillaブラウザをシミュレートしてクロール request.add_header("user-agent","Mozilla/5.0") response2 = urllib2.urlopen(request) print response2.getcode() print len(response2.read()) print "3番目の方法" cookie = cookielib.CookieJar() #urllib2にcookie処理機能を追加 opener = urllib2.build_opener(urllib2.HTTPCookieProcessor(cookie)) urllib2.install_opener(opener) response3 = urllib2.urlopen(url) print response3.getcode() print len(response3.read()) print cookie

四、サードパーティライブラリ Beautiful Soup のインストール

Beautiful Soup:Pythonのサードパーティプラグインで、xmlとHTMLからデータを抽出するために使用します。公式サイトアドレスhttps://www.crummy.com/software/BeautifulSoup/

1、Beautiful Soup のインストール

cmd(コマンドプロンプト)を開き、Python(Python2.7バージョン)のインストールディレクトリにあるscriptsフォルダに入り、dirと入力してpip.exeがあるか確認します。あれば、Python標準のpipコマンドでインストールできます。以下のコマンドを入力してインストールします:

pip install beautifulsoup4

2、インストールが成功したかテスト

Pythonファイルを作成し、次のように入力します:

import bs4
print bs4

そのファイルを実行し、正常に出力されればインストール成功です。

五、Beautiful Soup を使った HTML ファイルの解析

#!/usr/bin/python # -*- coding: UTF-8 -*- import re from bs4 import BeautifulSoup html_doc = """ <html><head><title>The Dormouse's story</title></head> <body> <p class="title"><b>The Dormouse's story</b></p> <p class="story">Once upon a time there were three little sisters; and their names were <a href="http://example.com/elsie" class="sister" id="link1">Elsie</a>, <a href="http://example.com/lacie" class="sister" id="link2">Lacie</a> and <a href="http://example.com/tillie" class="sister" id="link3">Tillie</a>; and they lived at the bottom of a well.</p> <p class="story">...</p> """ #BeautifulSoup解析オブジェクトを作成 soup = BeautifulSoup(html_doc,"html.parser",from_encoding="utf-8") #すべてのリンクを取得 links = soup.find_all('a') print "すべてのリンク" for link in links: print link.name,link['href'],link.get_text() print "特定のURLアドレスを取得" link_node = soup.find('a',href="http://example.com/elsie") print link_node.name,link_node['href'],link_node['class'],link_node.get_text() print "正規表現マッチング" link_node = soup.find('a',href=re.compile(r"ti")) print link_node.name,link_node['href'],link_node['class'],link_node.get_text() print "P段落のテキストを取得" p_node = soup.find('p',class_='story') print p_node.name,p_node['class'],p_node.get_text()

原文アドレス:https://blog.csdn.net/sinat_29957455/article/details/70846427