ビジネス爬虫類の研究では、1日目のノート

1日目

一。HTTP

1.はじめに:

              https://www.cnblogs.com/vamei/archive/2013/05/11/3069788.html

              http://blog.csdn.net/guyuealian/article/details/52535294

ユーザーが(例えばwww.baidu.comなど)URLを入力すると2、ネットワーク要求を送信するプロセスは何ですか?

 

ドメイン・ネーム・サーバーのIPに対応する。www.baidu.com解析したアドレス

(1)最初のデフォルトゲートウェイのMACアドレスを知っている(ARPプロトコルを介して、デフォルトゲートウェイのMACアドレスを取得します)

(2)デフォルトゲートウェイに送信(IPまたはDNSサーバのIPが、MAC MACアドレスがデフォルトゲートウェイアドレス)データを整理

(3)デフォルトゲートウェイは、データを転送する能力を有するルータにデータを転送します

(4)自分のルータのルーティングプロトコルに応じて、適切な高速パスを選択するために、先ゲートウェイにデータを転送します

(5)目的のゲートウェイ(ゲートウェイのDNSサーバが存在する)は、DNSサーバにデータを転送します

(6)のDNSクエリサーバーは、対応するwww.baidu.com IPアドレスを解析し、要求元のクライアントのドメインに後戻りするためにそれを置きます

B.クライアントとサーバーの接続を実現するように、IPアドレスは、baidu.comは、3ウェイハンドシェイクTCPを行い、得られた後、

HTTPプロトコルを介して対応するウェブサーバにC。データ送信要求

d.webサーバがデータ要求を受信した後、クライアントからの要求で、その結果、そのサーバリソースを照会することにより、依頼者(ブラウザ)に引き返します

D。データブラウザを受信すると、Webブラウザ独自のレンダリング機能を表示します

すなわち、TCPのブラウザは接続を閉じ、すなわち、4回には手を振りました

2.http方法要求

(1)要求を取得します

       データは、直接URLパラメータに表示される特定のリソース要求に送ら不安、加えて、要求の長さの制限があり、アクセスだけタイプのデータは、ASCIIコードであります

(2)POSTリクエスト

処理要求にデータを送信するリソース(例えば、ファイル送信フォームまたはアップロード)を指定し、データ(バイナリデータを可能にする)リクエストボディに含まれています。セキュリティの要求方法は、何の長さの制限を要求しません。POSTリクエストは既存のリソースの変更につながるか、新しいリソースを作成することができます

(3)PUT

最新の指定されたリソースの場所に自分のコンテンツをアップロードするには

(4)削除

サーバはRequest-URIによって識別されるリソースを削除することを要求します

(5)トレース

クライアントは、ウェブサーバに戻す通信する方法であり、主にテストおよび診断のために、前にクライアントを要求する要求メッセージの伝送経路を追跡することができ

(6)ヘッド

同様に、要求を取得、それは特定のコンテンツへの応答を返さない(すなわち、メッセージボディ部を返しません)

(7)オプション

サーバはHTTP固有のリソース要求メソッドをサポートして返します(つまり、クライアントは、サーバー要求を提出することができるか方法尋ねました)

(8)接続

HTTP / 1.1プロトコルは、パイプライン・モード・プロキシ・サーバへの接続のために予約することができます

前記トンネルの方法は、TCP通信プロトコルトンネルを実現するために、プロキシサーバに再開通信を接続します。SSL(セキュア・ソケット・レイヤー)とTLS(Transport Layer Security)プロトコルの主な用途は、トンネルネットワークを介した通信内容を暗号化します

そこにHTTPリクエストメソッドの8種類がありますが、我々はそれを取得しますが、一般的にポストと実用的なアプリケーションで使用され、また、これらの2つの方法により、間接的に達成することができ、他の方法を要求

差3.httpとhttps

(1)HTTPSプロトコルつもりCA(認証局、認証局)、一定の経済的コストが必要となります

(2)透明なHTTP、HTTPS暗号化、安全な送信は、送信がに関して比較的安全なHTTPSれるHTTPで送信されます

(3)ポートは、httpがhttpsは443、80、同じではありません

4.要求ヘッダー(要求ヘッダ)の含有量

(1)受け入れ:テキストのファイル形式
(2)承諾をコード:コード形式
(3)接続:⻓長いリンクショートリンク
(4)クッキー:で使用確認
ドメイン:(5)ホスト
(6)リファラーを:フラグからこれ⻚表面上のページ⾯ジャンプ
(7)ユーザーエージェント:ブラウザとユーザー情報を使用して

 II。爬虫類の取得

(1)クローラー値:

1.买卖数据(⾼高端的领域价格特别贵)
2.数据分析:出分析报告
3.流量量
4.指数阿⾥里里指数,百度指数

(2)合法性:灰⾊色产业
政府没有法律律规定爬⾍虫是违法的,也没有法律律规定爬⾍虫是合法的
公司概念:公司让你爬数据库(窃取商业机密)责任在公司
(3)爬⾍虫可以爬取所有东⻄西?(不是)爬⾍只能爬取⽤用户能访问到的数据
爱奇艺的视频(vip,非vip)
1.普通⽤用户 只能看非vip 爬取非vip的的视频
2.vip 爬取vip的视频
3.普通⽤用户想要爬取vip视频(⿊黑客)

三. 爬虫的分类

(1)通⽤用爬⾍虫
1.使⽤用搜索引擎:百度 谷歌 360 雅虎 搜狗
优势:开放性 速度快
劣势:⽬标不不明确
返回内容:基本上%90是⽤户不不需要的
不清楚用户的需求在哪⾥里里
(2)聚焦爬⾍虫(学习)
1.⽬标明确
2.对⽤户的需求非常精准
3.返回的内容很固定
增量式:翻⻚:从第⼀一⻚页请求到最后⼀一⻚页

Deep 深度爬⾍虫:

静态数据:html css
动态数据:js代码,加密的js

(3)robots

Robots协议(也称为爬虫协议、机器人协议等)的全称是“网络爬虫排除标准”(Robots Exclusion Protocol),网站通过Robots协议告诉搜索引擎哪些页面可以抓取,哪些页面不能抓取。您可以在您的网站中创建一个纯文本文件robots.txt,在这个文件中声明该网站中不想被robot访问的部分,这样,该网站的部分或全部内容就可以不被搜索引擎收录了,或者指定搜索引擎只收录指定的内容。

聚焦爬虫不遵守robots

四. 爬虫的工作原理

确定抓取目标的url是哪一个--->使用代码发送请求获取数据--->解析获取到的数据--->若有新的目标(url),回到第一步--->数据持久化(如,将数据写入文件中)

1. python3(原生提供的模块):urlib.request

(1) urlopen:

a.返回response对象

b. response.read()

c. bytes.decode("utf-8")

(2) get:传参

1.汉字报错 :解释器ascii没有汉字,url汉字转码
(3)post
(4)handle处理器的⾃定义
(5)urlError

 

 五.代码

发送请求

import urllib.request

def load_data():
    url = "http://www.baidu.com/"
    response = urllib.request.urlopen(url)  # 发送请求
    print(response)
    data = response.read()  # 读取到的内容为bytes
    print(data)
    # 将文件获取的内容转换成字符串
    str_data = data.decode("utf-8")
    print(str_data)
    # 将数据写入文件
    with open("baidu.html", "w",encoding="utf-8") as f:  # 此处encoding="utf-8"一定要写,否则报错
        f.write(str_data)   
load_data()

#python爬取的类型:str bytes
#如果爬取回来的是bytes类型:但是你写入的时候需要字符串 decode("utf-8")
#如果爬取过来的是str类型:但你要写入的是bytes类型 encode(""utf-8")

 

 发送带参数的请求

import urllib.request

def get_method_params():
    url = "http://www.baidu.com/s?wd="
    name = "美女"
    final_url = url + name
    print(final_url)
    # 使用代码发送网络请求
    response = urllib.request.urlopen(final_url)
    print(response)

get_method_params()

这样运行会报错UnicodeEncodeError: 'ascii' codec can't encode characters in position 10-11: ordinal not in range(128)

原因:python:是解释性语言;解析器只支持 ascii 码,不支持中文,此处的final_url包含了中文,所以就要进行url的转译,如将url(https://www.baidu.com/s?wd=美女)复制到pycharm中会直接转译,如下:

但我复制到自己的pycharm不会产生转译

 转译要用到parse,string模块,如下

 
 

import urllib.request
import urllib.parse
import string

def get_method_params():

    url = "http://www.baidu.com/s?wd="
    name = "美女"
    final_url = url+name
    print(final_url)
    #将包含汉字的网址进行转译
    encode_new_url = urllib.parse.quote(final_url,safe=string.printable)
    print(encode_new_url)
    # 使用代码发送网络请求
    response = urllib.request.urlopen(encode_new_url) 
    print(response) # 返回的是http对象,如<http.client.HTTPResponse object at 0x0000028324337780>
  #读取内容 
  data = response.read().decode() print(data)
  #保存到本地
  with open("02-encode.html","w",encoding="utf-8")as f:
     f.write(data)

get_method_params()

 

おすすめ

転載: www.cnblogs.com/jj1106/p/11204472.html