python八爬虫フレーム

5628 ワード

爬虫類のフレーム
  • BeautifulSoup
  • 機能BeautifulSoupは、HTMLまたはXMLからデータを抽出するためのPythonライブラリです.
  • 導入
  • 使用方法:from bs 4 import BeautifulSoup soup=BeautifulSoup(html)
  • オブジェクトの種類には、Tag,NavigablesString,BeautifulSoup,Commentの4種類があります.BeautifulSoupはドキュメントをツリー構造に変換し、各ノードは上記の4種類のPythonオブジェクトです.
  • Tagは、XMLおよびHTMLのTagオブジェクトと同じです.例:soup = BeautifulSoup(Extremely bold) soup.bはTagオブジェクトである.
  • Name tag.nameは取得可能、
  • は変更可能
  • Attributeの1つのTagオブジェクトには複数の属性がある、操作方法は辞書と同様である、前述のTagオブジェクトbのように1つのclass属性がある:soup.b['class']またはgetメソッドsoupを用いる.b.get('class')すべての属性キー値ペアを取得:soup.b.attrs tagのプロパティは、追加、削除(del soup.b['class'])、変更、辞書メソッドと同じです.1つの属性keyが複数のvalueに対応する場合、
  • などのvalueのlistが返されます.

    css_soup = BeautifulSoup('

    ') print css_soup.p.attrs :{'class': ['body', 'strikeout'], 'name': 'lzy'}

    这种多个值的属性是需要在HTML中有定义的,如果并没有被定义为多值属性,则返回字符串:

    id_soup = BeautifulSoup('')
    id_soup.p['id']
      'my id'
    

    変換がXMLドキュメントの場合、多値属性は存在せず、文字列が返されます.リストまたは文字列を使用して、属性に値を割り当てることができます.
  • NavigablesString Tagの文字列は、NavigablesStringオブジェクトです.tag.string BeautifulSoup以外でこのタイプを使用する場合、Unicode:unicode(Tag.string)tagに含まれる文字列は編集不可、置換のみ:tag.string.replace_with(new string)tagは他のtagまたは文字列を含むことができ、NavigablesStringは他のオブジェクトを含むことができない.サポートされていません.content,.string,find()は、ドキュメントツリーの部分的な遍歴とドキュメントツリーの属性の検索のみをサポートします.
  • BeautifulSoupは、1つのドキュメントのすべての内容を表しています.ほとんどの場合、Tagオブジェクトとして使用でき、ドキュメントツリーの遍歴とドキュメントツリーの検索のほとんどのプロパティをサポートします.HTMLやXMLではBeautifulSoupというTagはありませんので、nameやattribute属性はありませんが、
  • という特殊な属性があります.
    soup.name
      u'[document]'
    
  • Comment CommentタイプはNavigablesStringタイプのサブクラスであり、BeautifulSoupにも同様の理由で他のタイプがある.
  • 
     Elsie 
    
    

    使用前に判断したほうがいいです.判断コードは以下の通りです.
    if type(soup.a.string)==bs4.element.Comment:
        print soup.a.string
    
  • ドキュメントツリーBeautifulSoupオブジェクトを1つのツリーとして巡回し、複数のノードがあります.ノードの場合、その位置に対して子ノード、親ノード、兄弟ノードがあります.
  • サブノードの1つのTagは、このTagのサブノードである複数のTagおよび文字列を含むことができる.NavigablesStringにはサブノードはありません.あるTagを得るためには、上述の方法:soup.tag_nameは点取属性により、現在の名前の最初のtagしか取得できないが、すべてを取得するには、ドキュメントツリーを検索する方法:soup.find_all('tag_name') tagを使用する必要がある.contentsプロパティは、すべてのサブノードをリストで出力します.tagの.childrenジェネレータは,すべてのサブノードを遍歴する.contentsと.childrenはTagを取得する直接サブノードのみに対して,descendantsは、Tagのすべての子孫ノードを巡回するために使用することができる.tagがNavigablesStringタイプのサブノードが1つしかない場合、.stringで取得できます.複数を含む場合は、.stringsを使用して巡回します.出力された文字列にスペースまたは空白行が含まれている場合は、.stripped_stringsを使用して除去します.
  • 親ノード現在のノードの親ノード:.parent現在のノードのすべての親ノード:.parents
  • 兄弟ノードは同じ親ノードを持つノード間である.next_sibling .previous_Sibling同理,すべての兄弟ノード:.next_siblings .previous_Siblingsは次の解析オブジェクトまたは前の解析オブジェクトを指す:階層を区別しない.next_element .previous_element .next_elements .previous_elements
  • ドキュメントツリーでよく使用される2つの方法:find(str)find_all(str)を検索します.その中のstrは、tagのnameを表しています.純粋な文字列、正規表現、リスト(いずれかの一致が条件、はいまたは演算を満たす)、True(すべてのTagノードを返して文字列ノードを返さない)でもよい.もう1つのパラメータはstrではなくmethodです.このメソッドは、1つの要素のみを受け入れる関数です.この関数がTrueを返すと、パラメータマッチング要件が表示されます.例:
  • def has_class_but_no_id(tag): 
    return tag.has_attr('class') and not tag.has_attr('id')
    

    以上、フィルタには、純粋な文字列、正規表現、リスト、True、メソッドのいくつかが含まれます.
  • find_all(name,attrs,recursive,text,kwargs)このメソッドは、現在のノードのすべてのtagサブノードを検索します.**
  • - name  :
    

    tagのnameプロパティを指し、文字列オブジェクトが自動的に無視されます.フィルタはすべての種類を使用できます.-keywordパラメータ:1つのパラメータが名前を指定しているが、上記のパラメータ名ではない場合、検索時にそのパラメータをtagの属性として検索します.たとえば、soup.find_all(id='link2')は、tagに属性idが存在し、idに対応する値がlink 2のtagであることを返します.以上の方法では、方法以外のすべてのフィルタを使用できます.-いくつかの特殊な属性はこのように直接使用できない場合、soup.find_all(attrs={"key":"value"})を使用して、例えばclass属性を使用して検索します.classはpythonの保持字であり、直接入参に書くことはできません.現在、2つの方法があります.
    soup.find_all('tag.name',class_='class_value')
    soup.find_all('tag.name',attrs={'class':'class_value'})
    

    class_メソッドは、すべてのフィルタを使用できます.またclassは多値属性であるため,1つの値をマッチングするだけで結果が得られる,いわゆる不完全マッチングである.完全一致を使用する場合、フィルタ内の文字の順序は実際と一致する必要があります.-textパラメータ:Tagの文字列の内容を検索し、すべてのフィルタを使用できます.-limitパラメータ:戻り数を制限します.-recursiveパラメータ:find_all()のデフォルトは、現在のノードのすべての子孫ノードを検索し、直接のサブノードのみを検索する場合はrecursive=Falseを設定します.
    find_all()           。
    

    等価の簡略化版があります
    soup('a')```
    
      2. find(name,attrs,recursive,text,**kwargs)
    find()     find_all(limit=1),            。
        ,        ,             。         ,    None,       。
          :
    

    soup.find('head').find('title') soup.head.title
      find() find_all()           :
    find_parent()
    find_next_sibling()
    find_previous_sibling()
              's'    。
    find_next()
    find_previous()
    find_all_next()
    find_all_previous()
    
      3. CSS   
    Tag BeautifulSoup   .select()  。
    
    7. **  **
    prettify()           。
          ,    python str() unicode()。
         tag        ,  get_text(),           ,          。    Unicode。
                get_text("|")  “|”     。
    get_text(strip=True)          。
       .stripped_strings    。
    
    7. **     **
    BeautifulSoup         ,           ,           :lxml, html5lib,python   。    lxml  xml     。