1.クローラーとは何ですか?
Webクローラー(FOAFコミュニティではWebスパイダー、Webロボット、および多くの場合Webチェイスとも呼ばれます)は、特定のルールに従ってWorld WideWeb上の情報を自動的にクロールするプログラムまたはスクリプトです。他のあまり一般的に使用されない名前には、アリ、自動インデックス作成、シミュレーター、またはワームが含まれます。
実際、一般的に言えば、プログラムを介してWebページで必要なデータを取得すること、つまり、データを自動的に取得することです。
あなたは女の子の写真とあなたが見たいビデオに這うことができます。。クロールするデータを待ちます。ブラウザからデータにアクセスできる限り、クローラーからデータを取得できます。
第二に、クローラーの性質
ブラウザをシミュレートしてWebページを開き、Webページに必要なデータの一部を取得します
ブラウザでWebページを開くプロセス:ブラウザにアドレスを入力すると、DNSサーバーを介してサーバーホストが検出され、サーバーにリクエストが送信されます。サーバーが解析された後、結果はhtml、js、cssなどのファイルコンテンツを含めてユーザーのブラウザに送信されます。 、ブラウザはそれを解析し、最終的にユーザーがブラウザに表示する結果を表示します
したがって、ユーザーに表示されるブラウザーの結果はHTMLコードで構成されます。クローラーはこれらのコンテンツを取得します。HTMLコードを分析およびフィルタリングすることで、必要なリソース(テキスト、画像、ビデオなど)を取得できます。
3、クローラーの基本的なプロセス
リクエストの開始
HTTPライブラリを介してターゲットサイトへのリクエストを開始します。つまり、リクエストを送信します。リクエストには、サーバーが応答するのを待って、追加のヘッダーやその他の情報を含めることができます。
応答コンテンツの取得
サーバーが正常に応答すると、応答を取得します。応答のコンテンツは、取得するページのコンテンツです。タイプは、HTML、Json文字列、バイナリデータ(画像またはビデオ)などです。
コンテンツの解析
取得したコンテンツは、通常の式で解析できるHTML、ページ解析ライブラリ、Jsonオブジェクト分析に直接変換できるJson、保存またはさらに処理できるバイナリデータの場合があります。
データの保存保存に
はさまざまな方法があり、テキストとして保存したり、データベースに保存したり、特定の形式でファイルを保存したりできます。
4、リクエストとは
リクエストは、Apache2ライセンスのオープンソースプロトコルのHTTPライブラリを使用して、urllibに基づくpython言語で記述されています
。urllibライブラリの使用に関する以前の記事を読んだ場合、urllibは依然として非常に不便であり、リクエストの方が優れていることがわかります。 Urllibの方が便利で、多くの作業を節約できます。(リクエストを使用した後は、基本的にurllibを使用したくありません。)つまり、リクエストはpythonによって実装された最もシンプルで使いやすいHTTPライブラリです。クローラーはリクエストライブラリを使用することをお勧めします。
pythonがデフォルトでインストールされた後、requestsモジュールはインストールされないため、pipを介して個別にインストールする必要があります。
5、リクエストライブラリの基本的な知識
Requestライブラリのメソッドを呼び出すことにより、返されたオブジェクトを取得します。これには、要求オブジェクトと応答オブジェクトの2つのオブジェクトが含まれます。
図に示すように、要求オブジェクトは要求するURLであり、応答オブジェクトは返されたコンテンツです。
6、リクエストのインストール
1.pipを使用してインストールすることを強くお勧めします。pipinsrallrequests
2. Pycharmのインストール:ファイル-"デフォルト設定-"プロジェクトインタープリター-"リクエストの検索-"パッケージのインストール-"ok
セブン、リクエストライブラリの操作例
1.JD商品のクロール-一般的なクロールフレームワーク
import requests
url = "https://item.jd.com/2967929.html"
try:
r = requests.get(url)
r.raise_for_status()
r.encoding = r.apparent_encoding
print(r.text[:1000])
except:
print("爬取失败!")
2. Amazon製品のクロール-ヘッダーフィールドを変更し、ブラウザをシミュレートしてWebサイトへのリクエストを開始します
import requests
url="https://www.amazon.cn/gp/product/B01M8L5Z3Y"
try:
kv = {'user-agent':'Mozilla/5.0'}
r=requests.get(url,headers=kv)
r.raise_for_status()
r.encoding=r.apparent_encoding
print(r.status_code)
print(r.text[:1000])
except:
print("爬取失败")
3. Baidu / 360検索キーワードの送信-パラメータを変更してキーワードを送信します
Baiduのキーワードインターフェイス:http://www.baidu.com/s?
wd = keyword 360のキーワードインターフェイス:http://www.so.com/s?q = keyword
import requests
url="http://www.baidu.com/s"
try:
kv={'wd':'Python'}
r=requests.get(url,params=kv)
print(r.request.url)
r.raise_for_status()
print(len(r.text))
print(r.text[500:5000])
except:
print("爬取失败")
4.ネットワーク画像のクロールと保存-osライブラリとファイル操作の使用と組み合わせて
import requests
import os
url="http://tc.sinaimg.cn/maxwidth.800/tc.service.weibo.com/p3_pstatp_com/6da229b421faf86ca9ba406190b6f06e.jpg"
root="D://pics//"
path=root + url.split('/')[-1]
try:
if not os.path.exists(root):
os.mkdir(root)
if not os.path.exists(path):
r = requests.get(url)
with open(path, 'wb') as f:
f.write(r.content)
f.close()
print("文件保存成功")
else:
print("文件已存在")
except:
print("爬取失败")
最後に:例外処理
どのエラーが発生するかわからない場合は、try ... exceptを使用してすべてのリクエストの例外をキャッチしてみてください。
import requests
from requests.exceptions import ReadTimeout,HTTPError,RequestException
try:
response = requests.get('http://www.baidu.com',timeout=0.5)
print(response.status_code)
except ReadTimeout:
print('timeout')
except HTTPError:
print('httperror')
except RequestException:
print('reqerror')