爬虫類 - モジュールを-requestsする最初の

HTTPとHTTPSプロトコル

リファレンスアドレス

  • http:
    • 人気のコンセプト:HTTPプロトコルでは、サーバ(サーバ)とクライアント(クライアント)との間でデータの相互作用(データの相互伝送)の形としてあります
  • 共通ヘッダ:
    • User-Agent:要求車両識別のアイデンティティ
    • 接続:近いです
    • コンテンツタイプ:
  • HTTPS:
    • コンセプト:安全なHTTPプロトコル
    • 証明書
      • 対称暗号化キー
      • 非対称暗号化秘密鍵
      • 証明書の暗号化キー

関連爬虫類の概要

  • 爬虫類コンセプト:
    • アナログプログラミングを経由してインターネットブラウザは、その後、インターネット/データ・キャプチャ・プロセスを取るために登ることを許さ
      • アナログ:ブラウザが自然な原始的な爬虫類ツールです
  • 爬虫類カテゴリー:
    • 一般的な爬虫類:データ・キャプチャ・システム(クローラ)のページ全体をクロールします。
    • 集束クローラー:ローカル・データ・ページをクロールするには、共通のクローラに基づいていなければなりません。
    • インクリメンタル爬虫類:最新の更新データのうち、クロールウェブサイトにデータを更新するために、状況を監視するためのサイト。
  • リスク分析
    • 使用の合理化
    • 爬虫類のリスクが反映されます。
      • 爬虫類がアクセスされるサイトの正常動作を妨げます。
      • 爬虫類は、データや情報の法的保護の特定の種類をクロール。
    • リスクを避けます:
      • ロボットプロトコルサイトの設定に厳密に準拠。
      • 迂回防止対策の爬虫類が、アクセスしたサイトの正常な動作との干渉を避けるために、あなたのコードを最適化する必要があります。
      • 他のユーザーのプライバシーや企業秘密に属する見つかった個人情報は、速やかに停止し削除する必要がある場合は使用の際には、クロールする情報の普及は、クロールは、内容を確認してください。
  • アンチクライミングメカニズム

    • 適切な政策とクロールプログラムのウェブサイトのデータ爬虫類を防止するための技術的手段を通じてポータル。
  • 抗抗クライミング戦略

    • 適切なポリシーおよび技術的手段を介してクローラは、手段は、このように対応するデータをクロール、抗爬虫類ポータルをクラックします
  • robots.txtのプロトコル:

    登ると登るのデータを示唆することはできませんテキストで指定されたテキストプロトコルは、。契約は口頭契約の唯一の等価であり、関連技術の必須のコントロールを使用せずに、その合意は、抗抗紳士悪役ではありません。を参照してください淘宝網のロボットを。 TXT契約

アナコンダの紹介

  • Anacondaは何ですか

    統合された環境:データ分析と機械学習の開発環境に基づいて、

  • jupyter:スーパーターミナルはアナコンダ統合環境の一種であるブラウザベースのビジュアル開発ツールを提供します。

  • コマンドを起動します。jupyterノート

一般的に使用される2つのセルのモデルがあります

  • コード:Pythonで書かれたプログラム
  • 値下げ:ノートを書きます
ショートカット:
  • セルを挿入します。AB

  • 削除:X

  • セルハンドオーバモード:Y、M

  • 実行:Shift + Enter

  • タブ補完

  • ヘルプファイルを開くには、シフト+タブ

モジュールリクエストデータをクロール

要求モジュール

  • アクション:ネットワークモジュールに基づいてブラウザの要求を開始する要求の効果をシミュレートするために使用されます。
  • 符号化プロセス:
    • URLを指定してください
    • 送信を要求
    • (クロールにデータ)応答データを取得します
    • 永続ストレージ
      • 設置環境:インストールを要求ピップ

例1:単純なWebベースコレクタそごうを書きます

#解决中文乱码&UA伪装
wd = input('enter a key:')
url = 'https://www.sogou.com/web'
#存储的就是动态的请求参数
params = {
    'query':wd
}

#即将发起请求对应的头信息
headers = {
    'User-Agent':'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/76.0.3809.100 Safari/537.36'
}

#一定需要将params作用到请求中
#params参数表示的是对请求url参数的封装
#headers参数是用来实现UA伪装
response = requests.get(url=url,params=params,headers=headers)

#手动修改响应数据的编码
response.encoding = 'utf-8'

page_text = response.text
fileName = wd+'.html'
with open(fileName,'w',encoding='utf-8') as fp:
    fp.write(page_text)
print(wd,'下载成功!')

例2:データの前のIMDB膜をクロール
リクエストをAJAX開始されたときに、端部の場合ローラースライド、及び要求が動画データに設定された要求である:分析

  • 動的にロードされたデータ:追加のデータを要求する別の要求によって、あります
    • 動的データローディングAJAXを生成します
    • JSダイナミックローディングデータを生成します
headers = {
    'User-Agent':'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/76.0.3809.100 Safari/537.36'
}
url = 'https://movie.douban.com/j/chart/top_list'
start = input('enter a start:')
limit = input('enter a limit')
#处理请求参数
params = {
    'type': '5',
    'interval_id': '100:90',
    'action': '',
    'start': start,
    'limit': limit,
}

response = requests.get(url=url,params=params,headers=headers)
#json返回的是序列化好的对象
data_list = response.json()

fp = open('douban.txt','w',encoding='utf-8')

for dic in data_list:
    name = dic['title']
    score = dic['score']
    
    fp.write(name+':'+score+'\n')
    print(name,'爬取成功')
 
fp.close()

例3:ポスト要求位置情報は、KFCをクロール

post_url = 'http://www.kfc.com.cn/kfccda/ashx/GetStoreList.ashx?op=keyword'
city = input('enter a city name:')
data = {
    'cname': '',
    'pid': '',
    'keyword': city,
    'pageIndex': '3',
    'pageSize': '2',
}
#data参数表示的就是get方法中的params
response = requests.post(url=post_url,data=data,headers=headers)

response.json()

動的にページをロードするデータがあるかどうかを判断する方法は?

  • パケットキャプチャツールはローカル検索
  • それは、動的データを検索するためにデータをロードする方法についてのページと判断された場合は?
    • パケットキャプチャツールを使用してグローバル検索
  • 奇妙なウェブサイトにデータを動的にロードされたデータをクロールクロールする前に、あなたかどうかを判断する必要があります!

  • 詳細をクロール企業情報:http://125.35.6.84:81/xk/
  • 分析:
    • 1.サイトのホームページや企業データの詳細については、動的にロードされます
    • 詳細データのビジネス企業の2.分析は来る方法ですか?
      • AJAXリクエスト(POST)時間への要求を介して、企業データの詳細。
      • リクエストURLに対応:http://125.35.6.84:81/xk/itownet/portalAction.do?method=getXkzsById
      • xxdxxxx:リクエストは、パラメータIDを運びます
      • 結論:
        • 各企業の1.データ詳細ページには、リクエストにポストAJAXリクエストフォームを使用しています
        • 各企業に対応したAjaxのリクエストURL 2.同じですが、方法の要求がポストされ、リクエストパラメータIDの値のみが同じではありません。
        • 3.のみ対応する詳細データを得るために、各企業に対応するすべての企業のid値を取得する必要があります
    • 私たちは、それぞれの会社のid値を取得する必要があります
      • アイデア:すべての企業のid値は、対応するホーム関連の要求または応答に格納する必要があります。
      • 結論:各会社のID値は、応答データを業務ID /解析できる抽出した後にのみ、応答データに対応するAJAXリクエストにホームに格納されています。

例3:食品医薬品局詳細

#要请求到没一家企业对应的id
url = 'http://125.35.6.84:81/xk/itownet/portalAction.do?method=getXkzsList'
data = {
    'on': 'true',
    'page': '1',
    'pageSize': '15',
    'productName': '',
    'conditionType': '1',
    'applyname': '',
    'applysn': '',
}

fp = open('./company_detail.txt','w',encoding='utf-8')

#该json()的返回值中就有每一家企业的id
data_dic = requests.post(url=url,data=data,headers=headers).json()
#解析id
for dic in data_dic['list']:
    _id = dic['ID']
#     print(_id)
    #对每一个id对应的企业详情数据进行捕获(发起请求)
    post_url = 'http://125.35.6.84:81/xk/itownet/portalAction.do?method=getXkzsById'
    post_data = {
        'id':_id
    }
    #json的返回值是某一家企业的详情信息
    detail_dic = requests.post(url=post_url,data=post_data,headers=headers).json()
    company_title = detail_dic['epsName']
    address = detail_dic['epsProductAddress']
    
    fp.write(company_title+':'+address+'\n')
    print(company_title,'爬取成功!!!')
fp.close()

おすすめ

転載: www.cnblogs.com/yinhaiping/p/11413950.html