クローラーは一般にデータを取得しますが、次の2つのステップに分けることができます。
- ウェブページを取得
主に使用requests
(Webページリクエストの送信)selenium
(ブラウザを使用してWebページにアクセス)
- 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.exe
Googleが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クラスオブジェクトを取得し、各タグを抽出できます。主な抽出方法は次のとおりです。
- 検索ツリー
- ツリーをトラバースする
- 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文本顺序的前续所有平行节点标签 |