クローラーライブラリリクエストとBeautifulSoupの基本的な使用法

クローラーは一般にデータを取得しますが、次の2つのステップに分けることができます。

  1. ウェブページを取得

主に使用requests(Webページリクエストの送信)selenium(ブラウザを使用してWebページにアクセス)

  1. Webページを解析する

主に使用 BeautifulSoup

以下では、上記の3つのライブラリの使用法を簡単に紹介します。

リクエストはURLからページを取得します

pip install requestsインストールを使用する

import requests参照を使用する

すぐに使える

import requests
r = requests.get('http://zoollcar.top') # 发送请求到url
print(r.text) # 输出获取到的页面文本

リクエストの7つの主な方法

フォーマットを使用する requests.ge(url, params=None, **kwargs)

方法 特徴
requests.request() 他のすべての方法の基本的な方法
requests.get() URLのコンテンツを取得する
requests.head() URLロケーションリソースの応答メッセージレポートの取得、つまりリソー​​スのヘッダー情報の取得を要求します。
requests.post() URLの場所でリソースを要求した後、新しいデータを添付します
requests.put() 元のURLの場所にあるリソースを上書きして、URLの場所にリソースを保存するように要求します
requests.patch() URLの場所でリソースの部分的な更新を要求します。つまり、リソースのコンテンツの一部を変更します。
requests.delete() URLの場所に保存されているリソースの削除をリクエストする

オプションのパラメータ **kwargs

パラメータ 説明
パラメータ パラメータとしてurlに追加された辞書またはバイトシーケンス
データ リクエストのコンテンツとしての辞書、バイトシーケンス、またはファイルオブジェクト
json リクエストのコンテンツとしてのJSON形式のデータ
ヘッダー 辞書、HTTPカスタムヘッダー
クッキー 辞書またはCookieJar、リクエスト内のCookie
auth タプル、HTTP認証機能をサポート
ファイル 辞書タイプ、{'ファイル':open( 'data.xls'、 'rb')}
タイムアウト タイムアウト期間を秒単位で設定します
プロキシ 辞書タイプ、アクセスプロキシサーバーの設定、ログイン認証を増やすことができます
allow_redirects True / False、デフォルトはTrue、リダイレクトスイッチ
True / Falseをストリーミング デフォルトはTrueです。コンテンツをすぐにダウンロードしてください
True / Falseを確認します デフォルトはTrue、認証SSL証明書スイッチです
証明書 ローカルSSL証明書パス

ブラウザを介したSeleniumアクセスURL

pip install seleniumインストールを使用する

from selenium import webdriver参照を使用する

すぐに使える

from selenium import webdriver # 引入
driver = webdriver.Firefox() # 关联到本地火狐浏览器
driver.get("http://zoollcar.top") # 用浏览器打开网页
a = driver.find_element_by_css_selector('.site-title') # 通过css选择器选择元素
print(a.text) # 访问元素内容

!!対応するドライバをインストールする必要があることに注意してくださいFirefoxブラウザはgeckodriver.exeGoogleがchromedriver.exeシステムパスを含むディレクトリの下に置かれています

さまざまなセレクター

セレクタ
find_elements_by_css_selector('div.edit') cssに従って選択してください
find_elements_by_xpath('//div[@class='edit']') xpathに従って選択してください
find_elements_by_id('id') id属性に従って選択します
find_elements_by_name('name') 名前属性に従って選択します
find_elements_by_link_text('www.zoollcar.top') アドレスへのリンクに従って選択してください
find_elements_by_tag_name('h1') 要素名で選択
find_elements_by_class_name('edit') クラスに応じて選択

これらのリストは
、最初のリストがelements置き換えられる限りifと一致して返されますelement

CSS、画像、jsの表示と実行を制御する

from selenium import webdriver # 引入
fp = webdriver.FirefoxProfile() # 引入火狐配置
fp.set_preference("permissions.default.stylesheet",2) # 禁用CSS
fp.set_preference("permissions.default.image",2) # 禁用 图片显示
fp.set_preference("javascript.enabled",False)  # 禁用js 测试不可用(不知道为什么)
driver = webdriver.Firefox( firefox_profile = fp ) # 关联到本地火狐浏览器

BeautifulSoupはWebページの文字列分析を取得します

すぐに使える

import requests
from bs4 import BeautifulSoup
r = requests.get('http://zoollcar.top')
soup = BeautifulSoup(r.text,'html.parser') # 解析获取到的文本
print(soup.h1.string) # 输出第一个h1标签的文本

テキストを解析ツリーに変換する

ライブラリfrom bs4 import BeautifulSoup
bs4ライブラリを導入すると、HTML入力がutf-8エンコーディングに変換されます

使用しsoup = BeautifulSoup(html,'html.parser')、内蔵された標準のHTML構文解析HTML文字列の解析は、
異なるルールを遵守し、また次の形式を使用することができます
soup = BeautifulSoup(html,'lxml')
soup = BeautifulSoup(html,['lxml','xml']])
soup = BeautifulSoup(html,'html5lib')

解析後、ツリー型のオブジェクトであるbs4.BeautifulSoupクラスオブジェクトを取得し、各タグを抽出できます。主な抽出方法は次のとおりです。

  1. 検索ツリー
  2. ツリーをトラバースする
  3. CSSセレクター

アクセスと取得の方法

コンテンツへのアクセス

soup.h1
soup.h1.nameラベルh1の最初のラベルを検索し
soup.h1.attrsます
soup.h1.stringラベルラベル属性ラベルテキスト

これにより、2種類の文字列が返されます
。NavigableString非コメント文字列
コメントコメント文字列

soup.h1.prettify()は、キャリッジリターンとスペースを使用して、人間にわかりやすい方法でhtmlを表示します。

検索方法

soup.find_all(name、attrs、recursive、string、** kwargs)特定のコンテンツを見つけてください!

nameタグ名検索
属性の取得:タグ属性値の取得、ラベル付け可能属性取得id = link1
再帰的:すべての子孫を取得するかどうか、デフォルトTrue
string:タグコンテンツでの取得

soup.find_all()の省略形はsoup()です

方法 特徴
<soup>.find() 検索して1つの結果のみを返す
<soup>.find_parents() 祖先ノードで検索し、リストタイプを返します
<soup>.find_parent() 在先辈节点中返回一个结果
<soup>.find_next_siblings() 在后续平行节点中搜索,返回列表类型
<soup>.find_next_sibling() 在后续平行节点中返回一个结果
<soup>.find_previous_siblings() 在前序平行节点中搜索,返回列表类型,同
<soup>.find_previous_sibling() 在前序平行节点中返回一个结果

还可以使用css检索方法
使用 <soup>.select('cssSelectName') 检索到结果

遍历的方法

内容遍历方法

方法 功能
下行遍历
.contents 子节点列表
.children 子节点的迭代类型
.descendants 子孙节点的迭代类型,包含所有子孙节点
上行遍历
.parent 节点的直属父标签
.parents 节点先辈标签的迭代类型
平行遍历
.next_sibling 返回按照HTML文本顺序的下一个平行节点标签
.previous_sibling 返回按照HTML文本顺序的上一个平行节点标签
.next_siblings 迭代类型,返回按照HTML文本顺序的后续所有平行节点标签
.previous_siblings 迭代类型,返回按照HTML文本顺序的前续所有平行节点标签

おすすめ

転載: blog.csdn.net/zoollcar/article/details/86299697