どのようにPythonを使って必要なデータを素早く登るか教えてあげます。


一、基礎第三者倉庫の使用
1.基本的な使い方

""" """
from urllib import request
response = request.urlopen(r'http://bbs.pinggu.org/') 
#     200      
print("     :  "+str(response.status))
#               ,     UTF-8   ,       
#  “charset”      
response.read().decode('gbk')[:100]
在这里插入图片描述
2.Request
request()を使って要求を包装して、urlopen()を通じてページを取得します。俗称でカムフラージュ。サーバーに私達がブラウザを通じて訪問したページだと知らせてください。場合によっては直接殺されるかもしれません。

url = r'http://bbs.pinggu.org/'
headers = {'User-Agent': r'Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) '
           r'Chrome/45.0.2454.85 Safari/537.36 115Browser/6.0.3',
           'Referer': r'http://www.lagou.com/zhaopin/Python/?labelWords=label',
           'Connection': 'keep-alive'}
req = request.Request(url, headers=headers)
page = request.urlopen(req).read()
page = page.decode('gbk')
page[:100]
在这里插入图片描述
dataを含む方法。
在这里插入图片描述

import urllib.parse
url = r'https://new-api.meiqia.com/v1/throttle/web?api_name=%2Fvisit%2Finit&ent_id=7276&v=1534848690048'
headers = {'User-Agent': r'Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) '
           r'Chrome/45.0.2454.85 Safari/537.36 115Browser/6.0.3',
           'Referer': r'http://www.lagou.com/zhaopin/Python/?labelWords=label',
           'Connection': 'keep-alive'}
values={'api_name':'/visit/init','ent_id':'7276','v':'1534848690048'}
data = urllib.parse.urlencode(values).encode(encoding='UTF8')
req = request.Request(url, data,headers=headers)
page = request.urlopen(req).read()
page = page.decode('gbk')
3.異常処理

from urllib.request import Request, urlopen
from urllib.error import URLError, HTTPError
req = Request("//www.jb51.net /")
try:
    response = urlopen(req)
except HTTPError as e:
    print('         .')
    print('    : ', e.code)
except URLError as e:
    print('       .')
    print('  : ', e.reason)
else:
    print("OK!")
    print(response.read().decode("utf8"))
在这里插入图片描述

from urllib.request import Request, urlopen
from urllib.error import  URLError
req = Request("//www.jb51.net /")
try:
    response = urlopen(req)
except URLError as e:
    if hasattr(e, '  '):
        print('       .')
        print('  : ', e.reason)
    elif hasattr(e, '  '):
        print('         .')
        print('    : ', e.code)
    else:
        print("OK!")
        print(response.read().decode("utf8"))
在这里插入图片描述
4.HTTP認証

import urllib.request
 
#          
user = "user_name"
#          
passwd = "uesr_password"
#   IP                      
proxyserver = "177.87.168.97:53281"
# 1.           ,               
passwdmgr = urllib.request.HTTPPasswordMgrWithDefaultRealm()
# 2.       ,     realm             ,         None,               、   、  
passwdmgr.add_password(None, proxyserver, user, passwd)
# 3.            /     ProxyBasicAuthHandler     ,            
#     ,        ProxyHandler  
proxyauth_handler = urllib.request.ProxyBasicAuthHandler(passwdmgr)
# 4.    build_opener()        Handler  ,     opener  ,        proxy_handler   proxyauth_handler
opener = urllib.request.build_opener(proxyauth_handler)
# 5.   Request   
request = urllib.request.Request("http://bbs.pinggu.org/")
# 6.      opener    
response = opener.open(request)
# 7.       
print (response.read())
5.ROBOTプロトコル
ターゲットURLの後に/robots.txtを追加します。例えば:https://www.jd.com/robots.txt
在这里插入图片描述
最初の意味はすべての爬虫類に対して、這い取ってはいけないということです。先頭のパスは、/pop/*.htmlにマッチするパスにもアクセスできません。
後の4つのユーザエージェントの爬虫類は、任意のリソースにアクセスすることができません。
したがって、Robotsプロトコルの基本文法は以下の通りです。
  • User-agent:ここは爬虫類の名前です。
  • Discallow:/この爬虫類はアクセスできない内容です。
  • 二、爬虫類のホームページをつかむ
    1.爬虫類の用途
    ブラウザの機能を実現し、指定されたURLを通じて、ユーザーが必要とするデータを直接返します。
    一般ステップ:
  • は、ドメイン名に対応するIPアドレス(例えば、119.75.217.109はどのサイトですか?)を検索します。
  • は、getまたはpost要求を対応するIPアドレスに送信する。
  • サーバは、該当結果200をサーバに返して、ウェブページの内容を返す。
  • あなたが欲しいものをつかみ始めましょう。
  • 2.ウェブサイトの分析
    対応内容を取得してから分析すると、テキストを処理して、ウェブページのコードから必要な内容を抽出する過程が必要です。Beautiful Soupは、従来のドキュメントナビゲーション、検索、ドキュメント機能の変更を実現します。libフォルダの下にBeautiful Soupがない場合はコマンドラインでインストールすればいいです。
    
    pip install BeautifulSoup
    3.データ抽出
    
    #                  ,     
    from bs4 import BeautifulSoup
    soup = BeautifulSoup('<meta content="all" name="robots" />',"html.parser")
    tag=soup.meta
    
    # tag   
    type(tag)
    >>> bs4.element.Tag
    
    # tag name  
    tag.name
    >>> 'meta'
    
    # attributes  
    tag.attrs
    >>> {'content': 'all', 'name': 'robots'}
    
    # BeautifulSoup  
    type(soup)
    >>> bs4.BeautifulSoup
    soup.name
    >>> '[document]'
    
    #       
    markup='<b><a href="http://house.people.com.cn/" rel="external nofollow"  target="_blank">  </a></b>'
    soup=BeautifulSoup(markup,"lxml")
    text=soup.b.string
    text
    >>> '  '
    type(text)
    >>> bs4.element.NavigableString
    
    4.Beautiful Soupアプリケーション例
    
    import requests
    from bs4 import BeautifulSoup
    url = "http://www.cwestc.com/MroeNews.aspx?gd=2"
    html = requests.get(url)
    soup =  BeautifulSoup(html.text,"lxml")
    
    在这里插入图片描述
    
    #                
    from bs4 import BeautifulSoup
    soup=BeautifulSoup(html.text,"lxml")
    
    #  
    lptable = soup.find('table',width='780')
    
    #   
    for i in lptable.find_all("td",width="680"):    
        title = i.b.strong.a.text
        href = "http://www.cwestc.com"+i.find('a')['href']
    #     href = i.find('a')['href']
        date = href.split("/")[4]
        print (title,href,date)
    
    在这里插入图片描述
    4.Xpathアプリケーションの例
    XPTathはXMLドキュメントで情報を検索する言語です。XPTathは、XMLドキュメントで要素と属性を巡回するために使用できます。XPTathはW 3 C XSLT標準の主な要素であり、XQueryとXbonterはXPS表現の上に構築されている。
    四つのラベルの使い方
  • //ダブルスラッシュは、ルートノードを特定し、全文をスキャンし、ドキュメント内で条件に合ったすべての内容を選択して、リストとして返します。
  • /単斜棒で現在のラベル経路の次のパスラベルを探したり、現在のラベルの内容を操作したりします。
  • /text()は、現在のパスのテキストコンテンツ
  • を取得する。
  • //@xxxxは、現在の経路におけるタグの属性値
  • を抽出する。
  • |オプション子は、|を使用して、いくつかの経路を選択してもよい。例えば、/p|/divは、現在の経路の下で条件に適合するpタグおよびdivタグのすべてを選択してもよい。
  • .点は、現在のノード
  • を選択するために使用される。
  • …両点は、現在のノードの親ノード
  • を選択する。
    
    from lxml import etree
    
    html="""
    <!DOCTYPE html>
    <html>
    <head lang="en">
        <title>test</title>
        <meta http-equiv="Content-Type" content="text/html; charset=utf-8"/>
    </head>
    <body>
    <div id="content">
        <ul id="ul">
            <li>NO.1</li>
            <li>NO.2</li>
            <li>NO.3</li>
        </ul>
        <ul id="ul2">
            <li>one</li>
            <li>two</li>
        </ul>
    </div>
    <div id="url">
        <a href="http://www.crossgate.com" rel="external nofollow"  title="crossgate">crossgate</a>
        <a href="http://www.pinggu.org" rel="external nofollow"  title="pinggu">pinggu</a>
    </div>
    </body>
    </html>
    """
    
    #    id       div ul      text()      
    selector=etree.HTML(html)
    content=selector.xpath('//div[@id="content"]/ul[@id="ul"]/li/text()') 
    for i in content:
        print (i)
    
    在这里插入图片描述
    
    #    //           a  ,  “@    ”  a   href   
    con=selector.xpath('//a/@href') 
    for i in con:
        print (i)
    在这里插入图片描述
    
    #       #                 
    con=selector.xpath('/html/body/div/a/@title') 
    print (len(con))
    print (con[0],con[1])
    在这里插入图片描述
    三、ダイナミックページと静的ページの区別
    Baiduのソース:
    静的ホームページの基本概要
    静的なウェブサイトのURL形式は普通はhttm、.html、shtml、.xmlなどの後でつぎの綴りにします。静的なウェブページは、一般的に最も簡単なHTMLウェブページであり、サーバー側とクライアント側は同じであり、シナリオとウィジェットがないので、アクティブにできません。HTML形式のウェブページでは、GIF形式の動画、FLASH、スクロールアルファベットなど、さまざまなダイナミック効果が現れます。これらの「ダイナミック効果」は視覚的なもので、以下に紹介する動画サイトとは別の概念です。
    静的ホームページの特徴
  • 固定的なウェブページは、各ページに固定されたURLがあります。また、ウェブサイトのURLは.httm、.html、shtmlなどの一般的な形式を後ろ綴りとしています。「?」は含まれていません。
  • ウェブページの内容はウェブサイトサーバに公開されると、ユーザのアクセスがあるかどうかに関わらず、すべての静的なウェブページの内容はウェブサイトサーバ上に保存されています。つまり、静的なウェブページは実際にサーバ上に保存されているファイルです。各ページは独立したファイルです。
  • 静止ウェブページの内容は比較的安定しており、検索エンジンによって検索されやすい。
  • 静的なウェブページはデータベースのサポートがなく、ウェブサイトの制作とメンテナンスの面で仕事量が多いので、ウェブサイトの情報量が多い時、完全に静的なウェブページの制作方式に依存するのは難しいです。
  • 静的なウェブページの相互作用は、機能面で大きな制約がある。
  • ダイナミックページの基本概要
    動的なウェブページは.asp、.jsp、.php、.perl、.cgiなどの形式を後綴りにして、しかも動的なウェブサイトのURLの中で1つの標識性の記号があります――“?”。動画サイトとウェブページの各種アニメーション、字幕など視覚的な「ダイナミック効果」は直接関係がなく、動画サイトもテキストの内容だけでなく、各種のアニメの内容も含まれています。これらはウェブページの具体的な内容の表現形式だけで、ウェブページがダイナミックな効果を持っているかどうかに関わらず、動的なウェブサイトの技術を使用して生成されたウェブページはすべて動的なウェブページと呼ばれています。動的なウェブサイトは静的な結合の原則を採用してもいいです。動的なウェブページを採用するところに適しています。静的なウェブページを使用する必要があれば、静的なウェブページを使用する方法で実現することも考えられます。同じウェブサイトで、動的なウェブページの内容と静的なウェブページの内容は同時に存在するのもとても普通の事です。
    ダイナミックウェブページは以下のいくつかの特徴を持つべきです。
  • 相互性:つまり、ウェブページはユーザの要求と選択に応じて動的に変化し、応答する。例えば、訪問者はウェブページでフォーム情報を記入して提出し、サーバは処理を経て自動的にバックグラウンドデータベースに情報を保存し、対応するプロンプトページを開く。
  • 自動更新:手動操作なしで自動的に新しいページが作成され、作業量を大幅に節約できます。例えば、フォーラムで情報を公開すると、バックグラウンドサーバが自動的に新しいウェブページを生成する。
  • ランダム性:無関係の時間、無関係の人が同じウェブサイトにアクセスすると、異なるページ効果が発生します。例えば、ログイン画面自動循環機能。
  • ダイナミックページの「?」検索エンジンの検索には一定の問題があります。検索エンジンは一般的に一つのサイトのデータベースからすべてのページにアクセスすることができません。あるいは技術的に考慮して、クモを探してウェブサイトの中にアクセスしません。後の内容は動的なウェブサイトを採用して検索エンジンの普及を行う時、一定の技術処理をしてこそ、検索エンジンの要求に適応できます。
  • まとめて言いますと、ページの内容が変わったら、URLも基本的には静的なページになります。
    四、ダイナミックホームページと静的ホームページのキャプチャ
    1.静的ホームページ
    
    import requests
    from bs4 import BeautifulSoup
    url = "http://www.cwestc.com/MroeNews.aspx?gd=1"
    html = requests.get(url)
    soup =  BeautifulSoup(html.text,"lxml")
    soup.text[1900:2000]
    
    在这里插入图片描述
    
    import requests
    from bs4 import BeautifulSoup
    url = "http://www.cwestc.com/MroeNews.aspx?gd=2"
    html = requests.get(url)
    soup =  BeautifulSoup(html.text,"lxml")
    soup.text[1900:2000]
    
    在这里插入图片描述
    まとめ:上の2つのurlは最後の数字と違って、下のページのURLと内容は同時に変化します。私達は判断します。このページは静的なページです。
    2.ダイナミックページ
    
    import requests
    from bs4 import BeautifulSoup
    url = "http://news.cqcoal.com/blank/nl.jsp?tid=238"
    html = requests.get(url)
    soup =  BeautifulSoup(html.text,"lxml")
    soup.text
    
    在这里插入图片描述
    在这里插入图片描述
    ウェブページからは見えない情報をキャッチして、動的なウェブページであることを証明します。正確に方法をつかんでください。
    在这里插入图片描述
    
    import urllib
    import urllib.request
    import requests
    
    url = "http://news.cqcoal.com/manage/newsaction.do?method:webListPageNewsArchivesByTypeid"
    post_param = {'pageNum':'1',\
                  'pageSize':'20',\
                  'jsonStr':'{"typeid":"238"}'}
    return_data = requests.post(url,data =post_param)
    content=return_data.text
    content
    
    在这里插入图片描述
    ここではPythonを使って、必要なデータを素早く登る方法を教えます。この記事を紹介します。Pythonに関するデータの内容は以前の文章を検索したり、次の関連記事を見たりしてください。これからもよろしくお願いします。