Pythonの実際のクローラ(ⅱ)データ分析

ページをクロールする方法についていくつかの質問を持って、そしてクロールが発生する場合があります。それでは、私たちは私たちが望むデータを抽出し、ページを下にクロールされている解析する必要があります。

ダウンクロールよると、私たちはさまざまな分析方法を記述する必要が、最も一般的には、一般的にHTMLデータで、ページのソースであり、いくつかは、JSONデータとすることができる、JSONデータは、軽量のデータ交換フォーマットです次のように、フォーマットを解析することは比較的容易です。

{
    "name": "中国",
    "province": [{
        "name": "黑龙江",
        "cities": {
            "city": ["哈尔滨", "大庆"]
        }
    }, {
        "name": "广东",
        "cities": {
            "city": ["广州", "深圳", "珠海"]
        }
    }, {
        "name": "台湾",
        "cities": {
            "city": ["台北", "高雄"]
        }
    }, {
        "name": "新疆",
        "cities": {
            "city": ["乌鲁木齐"]
        }
    }]
}

JSONデータは、このタイプのデータのために、私たちに返される非同期要求のその部分のうち、クロールCtripの負荷に言えば、Pythonは非常に便利な構文解析ライブラリを持っているので、私たちは多くのコードの相対を記述する必要はありません。

しかし、タグ構造が複雑と異なるHTML構造は、異なる可能性があることができるHTMLデータを、ダウンクロールので、分析方法は、場合によっては必要。

分析方法は、比較的容易に、正規表現、XPathとBeautifulSoup4ライブラリです。

三つのコースの速度を実行すると、正規表現に比べて最速で、第二にされたxPath、BS4最も遅いが、他の二つとは対照的に、BS4は、ライブラリ内に封入されているため、一般的には間違いなく重戦車であるが、最も簡単なBS4を使用しません1、および正規表現は、最も厄介なものです。

正規表現は、ほぼすべて、言語のサポートをプログラミングする表現が、同様にほとんど差があり、すべての言語です。あなたは、複雑なシステムを設計している場合は、この方法はあまりにも不安定であるので、あなたは常にあなたが現在のシステムが完全に与えられていないと、通常の対応のルールを書いたことを保証することはできませんが、正規表現を考慮していません。

XPathは、XMLドキュメントの言語で見つけた情報です。XPathは、XML文書内の要素と属性を横断するために使用することができます。

正規表現と詳細されたxPathについてBS4の使用を習得するために、今、主に、実際の戦闘の後に行います。

我々は最初のBS4ライブラリをダウンロードする必要があります。

pip install lxml
pip install beautifulsoup4

私たちはHTML、BS4のページ全体をダウンクロールするとき、あなたは、タグの相対位置に応じてクロールするデータを識別することができます。

この相対的な位置は、次のようになります。

body > div.banner > div > div.celeInfo-right.clearfix > div.movie-stats-container > div > div > span > span

HTMLページには、層によって剥離タマネギの層として理解することができます。

この位置決めセレクタと呼ばれ、私たちはHTMLの構造を比較し、それを自分で書くことができないが、それは簡単に間違っている、より複雑です。

私たちは、以下に示すように、ページの内容に対応したマウスの位置を置くこの時間は、比較するためにあなたをできるように青色に変わります、クロール後に解決したいものを見つけるために内部要素その後、ブラウザのコンソール(F12)を開くことができます。

1

これらのタグddの中に発見することができ、現在のページには、すべての映画情報です。魔法少年の反乱軍は、あなたがそうで、DD-1として理解することができる巨大な嵐のDD-2として使用することができ、そして世界に入ってきました。

そして、あなたは右のDDタグにマウスを置く、コピーオプションがあるでしょう、それはセレクタを下にコピーすることで、セレクタがあります。

異なるn番目の子:下の化身ダムド、巨大な嵐のセレクタZHAは、唯一の最後のDDを見つけることができますされています。

#app > div > div.movies-panel > div.movies-list > dl > dd:nth-child(1)

#app > div > div.movies-panel > div.movies-list > dl > dd:nth-child(2)

この法律では、我々は簡単に、リスト型のページの一回限りの種類を解析することができます。

3

# -*- coding: utf-8 -*-
import os
import re
from bs4 import BeautifulSoup
import requests

# 请求头设置
header = {
    'Accept': '*/*;',
    'Connection': 'keep-alive',
    'Accept-Language': 'zh-CN,zh;q=0.9',
    'Accept-Encoding': 'gzip, deflate, br',
    'Host': 'maoyan.com',
    'Referer': 'http://maoyan.com/',
    'User-Agent': 'Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/67.0.3396.87 Safari/537.36'
}

data = requests.get('https://maoyan.com/films', headers=header)
soup = BeautifulSoup(data.text, 'lxml')
titles = soup.select('#app > div > div.movies-panel > div.movies-list > dl > dd ')

print(titles)

慎重に上記のコードを説明するために。

request.get(URL、ヘッダ)昨日は、ヘッダを要求し、ヘッダは、お客様との要求がそうでGETまたはPOSTとある方法に関する情報が含まれている、と述べました。

データが応答で返され、あなたがデータを直接印刷することができますが、そのような応答コード200としてHTMLページと同様に、要求に関連するデータを、より多く含まれているレスポンスボディが成功を示し、404説明はように見つけるとするためのリソースを持っていません。

data.textはレスポンスボディ内のHTMLコードからWebページを取得することです。

BeautifulSoupはlxmlのは、適切な分析方法で、私たちのメインターゲット分析です。

HTMLの前のタグから対応する着信を取得するために、方法BeautifulSoupを呼び出すことによって、セレクタを選択します。

実際には、このような外観のBS4は非常にシンプルですが、興味がへの深い見に行くが、これは唯一のツールライブラリであると言うことができれば、これは場合、ページが十分なされている私たちの共通の決意のアプリケーションBS4の唯一の根拠でありますあなたは自分自身を解決することができ、トラブルを取りました。

コードを読んだ後、そして今私は映画のページの名前を取得したい場合にのみ」に、十分に正確ではないので、セレクタ上のこの時間は、使用することはできません

「そして、私たちは映画の名に正確になりたいです。

このセレクタ付き。

1

#app > div > div.movies-panel > div.movies-list > dl > dd:nth-child(1) > div.channel-detail.movie-item-title > a

同様のほぼすべての他の方法。

これらは、HTMLの構文解析され、我々は時々データをクロールすることは、私は、ターゲットがJSONデータ形式になることを非常に多くの希望をいただきたい、そのようなデータは相対的に非常に規則的である、JSONデータです。

例えば、Ctripの章インチ

そのフライト情報は、JSONを返す要求されています。

4

正規表現のPythonの構文解析は非常に簡単です、あなたはそれに辞書データ型としてそれを置きます。

最初はJSONはあなたが辞書データの種類、実際に戻って、PythonのJson.loads(jsonData)を通過した後、その上で直接動作し、文字列の束を取得します。

5

import json

jsonData = '{
        "name":"gzj",
        "age":"23",
        "sex":"man",
        "mail":{
            "gmail":"[email protected]",
            "qmail":"[email protected]"
            }
        }'

res = json.loads(jsonData)

print(res['mail']['qmail'])

(ビデオと2部構成の記事を記録するか否かの最近の思考の実部は、公衆数カンカンに注意を払ってください!)

おすすめ

転載: www.cnblogs.com/LexMoon/p/pyspider02.html