2021年の最初のチュートリアル:Webデータクローラーパケットキャプチャの入門チュートリアル

Webデータキャプチャの入門チュートリアル

以前は、ページの構成を理解し、Webページの基本的な構成を理解していました。次に、学習の第2段階であるデータキャプチャに進みます。

2.1その前に、クローラープロトコルを理解する必要があります。クローラープロトコルを確認することで、このWebサイトで誰がクロールできるか、どのデータをクロールできるかを知ることができます。メインWebサイトのURLの後に/robots.txtを追加すると、クローラープロトコルを表示できます。例:http://baidu.com/robots.txtと入力して、Baiduのクロールプロトコルを取得します。各リストの最初はクローラー名(ユーザー名)です。次の[許可しない]は、これらのファイルパスをクロールできないことを意味します。

2.2クローラーコードの学習:

まず、リクエストライブラリをコンピュータにインストールし、コンソールにpip installリクエストを入力して、インストールを自動的に完了します。リクエストライブラリには、指定したページのレスポンスコンテンツを取得するためのgetメソッドがあります。

私たちはクローラーを書きます、一般的に3つのステップ

1.ファイルを見つけ、ブラウザを開き、開発者ツールを見つけ、Webページのソースコードを表示し、必要なデータの場所を見つけます

第二に、プログラムはページを取ります

三、分析

まず、開発者ツールを使用して、必要なコンテンツがWebページのその場所にあることを確認します。次に、Webページにリクエストを送信して、ページ応答のコンテンツを取得します。バックアップ用の開発者ツールでUser-AgentとCookieを見つけます。

リクエストライブラリをインポートする

import requests #导入库

resp = requests.get(url='https://www.uisdc.com/',
				  headers={
    
    'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/87.0.4280.141 Safari/537.36 Edg/87.0.664.75',
				  		 'Cookie': 'Hm_lvt_7aeefdb15fe9aede961eee611c7e48a5=1610174500; notLoginHasViewPages=2; Hm_lpvt_7aeefdb15fe9aede961eee611c7e48a5=1610174550'})

resp = requests.get(url = URL、headers = {辞書形式のカモフラージュ情報、User-AgentとCookieの上に一般的に使用される2つのカモフラージュ情報を追加})

このようにして、このページの応答のコンテンツを取得し、応答を印刷できます。通常、<Response [200]>が表示されます。これは、このページのコンテンツを正常に取得できることを意味します。特定のコンテンツを表示する場合は、このページの後object.text

resp = requests.get(url='https://www.uisdc.com/',
              headers={'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/87.0.4280.141 Safari/537.36 Edg/87.0.664.75',
                   'Cookie': 'Hm_lvt_7aeefdb15fe9aede961eee611c7e48a5=1610174500; notLoginHasViewPages=2; Hm_lpvt_7aeefdb15fe9aede961eee611c7e48a5=1610174550'})
print(resp.text)

このウェブページのすべてのコードを見ることができます。このページを取得した後、コードが多すぎて、必要なデータがまぶしく、一目でわかりにくいことがわかりました。そのため、3番目のステップである分析に入る必要があります。

〜通常の式の解析、CSSセレクターの解析、XPathの解析など、さまざまな解析方法があります。

  • 定期的な分析

最初に定期的な分析を試してみましょう。このページのすべての記事のタイトルを開発者ツールで取得したい場合、すべてのコンテンツがh2タイトルクラスタイトルのタグの下にあることがわかりました。reをインポートし、タイトルタグを注意深く調べて、これを見つけました。タイトルは<h2> class =“ title”>タイトルコンテンツ</ h2>内にあります

import re

pattern = re.compile(r'class="title">(.*?)</h2>')
print(pattern.findall(resp.text))

そのような規則性を書いた後、私はウェブページのコードと一致し、タイトルを取得しました。

  • CSSセレクター分析

bs4ライブラリをインストールした後、CSSセレクターを使用して解析できます

cssセレクター、最初のステップは通常のステップと同じです。ページを取得すると、セレクターの解析であるため、次のステップは異なります。最初にこのページのすべてのタグを並べ替えて、混乱しないようにする必要があるため、2番目のステップは手順は、bs4セレクターのメソッドを使用して、ページコンテンツをセレクターが理解できるコンテンツに変換することです。

soup = bs4.BeautifulSoup(resp.text, 'html.parser')

ここでは、bs4の組み込み関数BeautifullySoupを使用して、resp.textを「html.parser」でbs4が読み取れるコンテンツに解析し、変数soupで保存します。

次に、タイトルの内容がh2タグにあり、h2タグクラスもタイトルとして定義されていることを分析して見つけます。

soup = bs4.BeautifulSoup(resp.text, 'html.parser')
anchors = soup.select('h2.title')
print(anchors)

bs4の下にある検索ツールselectを使用してすべてのh2を検索し、h2タグがタイトルタグとして定義されています

印刷して実行した後、ラベルと混合された大量のデータが取得されたことがわかりました。この検索ツールはラベルのリストを返しました。これらのラベルをループし、これらのラベルのテキスト属性を使用してラベル内のテキストを取得できます。 、このようにして、すべてのタイトルを取得します

soup = bs4.BeautifulSoup(resp.text, 'html.parser')
titles = soup.select('h2.title')
for title in titles:
    print(title.text)

ここで説明する必要があるのは、タグを取得したときに、タグセレクターという段落( 'h2.title')を記述したことです。将来的には、タグセレクターのチュートリアルで詳細を確認できます。ここでは、selctとタグセレクターを使用します。他にもたくさんの方法があるので、みんなを混乱させないように、ここでは他の方法については話しません。

2.3データの永続性

データを取得するだけでは不十分です。長期保存のためにファイルに書き込む必要もあります。将来いつでも使用できます。Excelに書き込む方法はたくさんあります。全員を混乱させないように、1つだけ教えています。xlsをインストールします。ライブラリ、このライブラリは非常に優れた互換性と優れたパフォーマンスを備えています。

エクセルファイル自体はワークブックであり、フォームはワークシートです。セルと呼ばれる各グリッドを作成するため、次に、xlsライブラリをインストールした後の作業は非常に簡単です。ライブラリのインポート、ワークブックの作成、フォームの作成、データの書き込み

soup = bs4.BeautifulSoup(resp.text, 'html.parser')
lists = soup.select('a.a_block')
print(lists)
for titles in lists:
    title = titles.select_one('h2.title').text
    nue = titles.select_one('p').text

データを書き込むために、上記のコードを少し変更し、タイトルの下に小さな段落を追加しました。これは、優れたものを書くのに便利です。

まず、ライブラリをインポートし、ワークブックを作成し、ワークブックを作成して、フォームに名前を付けます。

import xlwt
wb =xlwt.Workbook()
sheet = wb.add_sheet('表单')

セルインデックスを作成します。

sheet.write(0,0,'序号')
sheet.write(0,1,'标题')
sheet.write(0,2,'详情')

次に、セルタイプにデータを追加するだけです。

wb =xlwt.Workbook()
sheet = wb.add_sheet('表单')

sheet.write(0,0,'序号')
sheet.write(0,1,'标题')
sheet.write(0,2,'详情')
a = 0

soup = bs4.BeautifulSoup(resp.text, 'html.parser')
lists = soup.select('a.a_block')
print(lists)
for titles in lists:
    title = titles.select_one('h2.title').text
    nue = titles.select_one('p').text
    lis_name = [title,nue]
    a += 1
    for index,name in enumerate(lis_name):
        sheet.write(a,index,name)
wb.save('页面.xls')

この時点で、クローラーの基本は終わりです。通常、このように単純な小さなWebサイトをプッシュしてデータをクロールできます。次に、アウトラインの外側にいくつかのものを追加します。

プロキシIPの使用

データをクロールするとき、短時間で多数の操作を実行することがよくあります。一般的に、他の操作はばかではなく、クロールを許可するために愚かではありません。IPがブロックされる場合があります。このとき、プロキシIPを使用してから、プロキシを使用する必要があります。 ipの使い方は?

実際、違いは1つだけです。つまり、最初にgetリクエストを行う場合は、getリクエストにプロキシ属性を追加するだけです。プロキシにプロキシIPアドレスを入力すると、このプロキシIPアドレスを無制限に使用できます。自分で購入するには、プロのWebサイトにアクセスする必要があります。国内IPはまだ比較的安価です。次に、上記のWebサイトを使用して、参考のために例を作成します。

resp = requests.get(url='https://www.uisdc.com/',
              headers={
    
    'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/87.0.4280.141 Safari/537.36 Edg/87.0.664.75',
			 proxies={
    
    
                'https': f'http://ip:端口号'}
                   ) # 这样就ok了

基本的に、他の人が直接テキストデータを提供するのではなく、リンクを提供します。このリンクを取得すると、jsonデータを受け取ります。変換して取り出す必要があります。Webサイトに従って操作できます。

おすすめ

転載: blog.csdn.net/SaharaLater/article/details/112396354