チューリングPython教室
長沙チューリング教育は、ハイテク人材の育成を目的として、汎 IT 職業教育に基づいて 2001 年に教育業界への参入を開始し、マルチレベルで個別化された職業スキル訓練コースの提供、技術開発、応用、技術の育成に重点を置いています。管理職などの中堅・トップ人材が質の高い職業教育コンテンツを提供できる企業を目指します。
0 1
Pythonの利点
Web クローラーの開発において、Python には比類のない利点がありますが、ここではその利点を 2 つの側面から分析して説明します。
1. Webページ自体の電子商取引商品詳細APIインターフェースを取得します。
他の静的プログラミング言語 (Java、C#、C++ など) と比較して、Python は Web ドキュメントを取得するためのより簡潔なインターフェイスを備えています。また、他の動的スクリプト言語 (Perl、シェルなど) と比較して、Python の urllib パッケージは次の機能を提供します。 Web ドキュメントにアクセスするための比較的完全な API。
さらに、Web ページをクロールするにはブラウザの動作をシミュレートする必要がある場合があり、多くの Web サイトは鈍いクローラーに対してブロックされます。この時点で、適切なリクエストを構築するためにユーザー エージェントの動作をシミュレートする必要があります (ユーザー ログインのシミュレート、セッション/Cookie の保存と設定のシミュレート)。Python には、これらのタスク (リクエスト、機械化など) を支援する優れたサードパーティ パッケージがあります。
2. Webクローリング後の処理
クロールされた Web ページは通常、HTML タグのフィルタリング、テキストの抽出などの処理が必要です。Python の beautifulsoap は、非常に短いコードでほとんどのドキュメント処理を完了できる簡潔なドキュメント処理機能を提供します。
実際、多くの言語やツールで上記の機能を実行できますが、Python を使用することが最も速く、最もクリーンに実行できます。
人生は短いので、Python が必要です。
PS: python2.x と python3.x は大きく異なりますので、この記事では python3.x のクローラー実装方法についてのみ説明します。
02
クローラーフレームワーク
URL マネージャー: クロールされる URL のコレクションとクロールされた URL のコレクションを管理し、クロールされる URL を Web ページ ダウンローダーに送信します。
Web ページ ダウンローダー (urllib): URL に対応する Web ページをクロールし、それを文字列として保存し、Web ページ パーサーに送信します。
Web ページ パーサー (BeautifulSoup): 貴重なデータを解析して保存し、同時に URL を URL マネージャーに追加します。
0 3
URLマネージャー
基本的なスキル
-
クロールする URL のコレクションに新しい URL を追加します。
-
追加する URL がコンテナー (クロールされる URL のコレクションとクロールされた URL のコレクションを含む) 内にあるかどうかを確認します。
-
クロール対象の URL を取得します。
-
クロールする URL があるかどうかを判断します。
-
クロールされた URL を、クロールされる URL コレクションからクロールされた URL コレクションに移動します。
保管方法
1.クロールされるメモリ (Python メモリ) URL コレクション: set()
はクロールされた URL コレクション: set()
2. リレーショナル データベース (mysql) の
URL(url, is_crawled)
3.クロール対象のキャッシュ(redis) URLコレクション:set
クロールされたURLコレクション:set
キャッシュ データベースのパフォーマンスが高いため、大規模なインターネット企業は通常、URL をキャッシュ データベースに保存します。小規模企業では通常、URL をメモリに保存し、永続的に保存したい場合はリレーショナル データベースに保存します。
0 5
ウェブダウンローダーurllib
URL に対応する Web ページをローカルにダウンロードし、ファイルまたは文字列として保存します。
基本的な方法
新しいbaidu.pyを作成します。内容は次のとおりです。
import urllib.request
response = urllib.request.urlopen('http://www.baidu.com')
buff = response.read()
html = buff.decode("utf8")print(html)
コマンドラインで python baidu.py を実行すると、取得したページを印刷できます。
リクエストの構築
上記のコードは次のように変更できます。
import urllib.request
request = urllib.request.Request('http://www.baidu.com')
response = urllib.request.urlopen(request)
buff = response.read()
html = buff.decode("utf8")
print(html)
パラメータをキャリーする
新しいbaidu2.pyを作成します。内容は次のとおりです。
import urllib.requestimport urllib.parse
url = 'http://www.baidu.com'values = {'name': 'voidking','language': 'Python'}data = urllib.parse.urlencode(values).encode(encoding='utf-8',errors='ignore')
headers = { 'User-Agent' : 'Mozilla/5.0 (Windows NT 10.0; WOW64; rv:50.0) Gecko/20100101 Firefox/50.0' }
request = urllib.request.Request(url=url, data=data,headers=headers,method='GET')
response = urllib.request.urlopen(request)
buff = response.read()
html = buff.decode("utf8")
print(html)
Fiddler を使用してデータを監視する
リクエストが実際にパラメータを運ぶかどうかを確認するには、fiddler を使用する必要があります。
プロセッサを追加する
import urllib.request
import http.cookiejar# 创建cookie容器cj = http.cookiejar.CookieJar()# 创建openeropener = urllib.request.build_opener(urllib.request.HTTPCookieProcessor(cj))# 给urllib.request安装openerurllib.request.install_opener(opener)# 请求request = urllib.request.Request('http://www.baidu.com/')
response = urllib.request.urlopen(request)
buff = response.read()
html = buff.decode("utf8")
print(html)
print(cj)
0 6
Web パーサー (BeautifulSoup)
Web ページから貴重なデータと新しい URL リストを抽出します。
パーサーの選択
パーサーを実装するには、正規表現、html.parser、BeautifulSoup、lxml などの使用を選択できます。ここでは BeautifulSoup を選択します。このうち、正規表現はあいまい一致に基づいており、他の 3 つは DOM 構造化分析に基づいています。
BeautifulSoupのインストールテスト
1. インストールするには、コマンド ラインで pip install beautifulsoup4 を実行します。
2. テスト
import bs4print(bs4)
基本的な使い方
1. BeautifulSoup オブジェクトを作成する
import bs4
from bs4 import BeautifulSoup
# 根据html网页字符串创建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>"""
soup = BeautifulSoup(html_doc)
print(soup.prettify())
2. アクセスノード
print(soup.title)
print(soup.title.name)
print(soup.title.string)
print(soup.title.parent.name)
print(soup.p)
print(soup.p['class'])
3. タグ、クラス、または ID を指定します
print(soup.find_all('a'))
print(soup.find('a'))
print(soup.find(class_='title'))
print(soup.find(id="link3"))
print(soup.find('p',class_='title'))
4. ドキュメントからすべての <a> タグ リンクを検索します。
for link in soup.find_all('a'):
print(link.get('href'))
警告がありますが、プロンプトに従って、BeautifulSoup オブジェクトを作成するときにパーサーを指定するだけです。
soup = BeautifulSoup(html_doc,'html.parser')
5. ドキュメントからすべてのテキストコンテンツを取得します
print(soup.get_text())
6. 通常のマッチング
link_node = soup.find('a',href=re.compile(r"til"))
print(link_node)