質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

ただいまの
回答率

90.46%

  • Python

    12341questions

    Pythonは、コードの読みやすさが特徴的なプログラミング言語の1つです。 強い型付け、動的型付けに対応しており、後方互換性がないバージョン2系とバージョン3系が使用されています。 商用製品の開発にも無料で使用でき、OSだけでなく仮想環境にも対応。Unicodeによる文字列操作をサポートしているため、日本語処理も標準で可能です。

  • CSS

    7816questions

    CSSはXMLやHTMLで表現した色・レイアウト・フォントなどの要素を指示する仕様の1つです。

webスクレイピングをする際のCSSセレクタの指定がわからない

解決済

回答 2

投稿

  • 評価
  • クリップ 0
  • VIEW 499

kazu130

score 7

初心者です。
下記画像のpythonのrequestsを使って、valueのリンクを取得したいのですが
cssセレクタの指定方法がわかりません。
div.link_value="value"ではだめでした。

import requests
import lxm.html

response = requests.get('hoge.com')
root = Lxml.html.fromstring(response.content)
for a in root.cssselect('div.link_value="value"'):
value = a.get("value")
print(value)

イメージ説明

環境

mac OS 10.14.1
Python 3.7.2

csセレクタでどう指定したらいいのか教えてください。

  • 気になる質問をクリップする

    クリップした質問は、後からいつでもマイページで確認できます。

    またクリップした質問に回答があった際、通知やメールを受け取ることができます。

    クリップを取り消します

  • 良い質問の評価を上げる

    以下のような質問は評価を上げましょう

    • 質問内容が明確
    • 自分も答えを知りたい
    • 質問者以外のユーザにも役立つ

    評価が高い質問は、TOPページの「注目」タブのフィードに表示されやすくなります。

    質問の評価を上げたことを取り消します

  • 評価を下げられる数の上限に達しました

    評価を下げることができません

    • 1日5回まで評価を下げられます
    • 1日に1ユーザに対して2回まで評価を下げられます

    質問の評価を下げる

    teratailでは下記のような質問を「具体的に困っていることがない質問」、「サイトポリシーに違反する質問」と定義し、推奨していません。

    • プログラミングに関係のない質問
    • やってほしいことだけを記載した丸投げの質問
    • 問題・課題が含まれていない質問
    • 意図的に内容が抹消された質問
    • 広告と受け取られるような投稿

    評価が下がると、TOPページの「アクティブ」「注目」タブのフィードに表示されにくくなります。

    質問の評価を下げたことを取り消します

    この機能は開放されていません

    評価を下げる条件を満たしてません

    評価を下げる理由を選択してください

    詳細な説明はこちら

    上記に当てはまらず、質問内容が明確になっていない質問には「情報の追加・修正依頼」機能からコメントをしてください。

    質問の評価を下げる機能の利用条件

    この機能を利用するためには、以下の事項を行う必要があります。

回答 2

checkベストアンサー

+1

root.cssselect('div input')


じゃ無理ですか?HTML全文かURL見せてほしいですね。。。

もっとも簡単な方法は、CSSセレクタを知りたい要素の上で

右クリック > Copy > CSS Selector

でCSSセレクターをコピーできるはずです

投稿

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

  • 2019/01/22 11:45

    回答いただきありがとうございます。
    ('div input')ではダメでした
    urlはhttps://www.db.yugioh-card.com/yugiohdb/card_list.action

    ここのリンクをスクレイピングしたいのですが・・・
    右クリック > Copy > CSS Selector
    で実施したのですがそれも弾かれました・・・・

    キャンセル

  • 2019/01/22 11:58

    HTMLパーサはBeautifulSoupというのが最も一般的なので、そちらを使用しています。
    また、GoogleのデベロッパーモードからコピペしたCSSセレクタはnth-child(n)の部分をnth-of-type(n)に書き換える必要があります。それを踏まえて書きにコードを示します。

    import requests
    from bs4 import BeautifulSoup
    response = requests.get('https://www.db.yugioh-card.com/yugiohdb/card_list.action')
    soup = BeautifulSoup(response.text)
    hit=soup.select("#card_list_1 > table > tbody > tr:nth-of-type(1) > td:nth-of-type(1) > div.list_body > div:nth-of-type(2) > div:nth-of-type(1)")
    print(hit)

    私はこれでクロールできました

    キャンセル

  • 2019/01/22 12:13

    丁寧な返信ありがとうございます。
    上記で実行したところ
    python list2.py
    list2.py:4: UserWarning: No parser was explicitly specified, so I'm using the best available HTML parser for this system ("lxml"). This usually isn't a problem, but if you run this code on another system, or in a different virtual environment, it may use a different parser and behave differently.

    The code that caused this warning is on line 4 of the file list2.py. To get rid of this warning, pass the additional argument 'features="lxml"' to the BeautifulSoup constructor.

    とエラーがでました。
    lxmlはインストールしているのですが・・・
    少し調べてみます。

    キャンセル

  • 2019/01/22 12:16

    soup = BeautifulSoup(response.text, 'html.parser')
    こんな感じに変えてみてください。

    キャンセル

  • 2019/01/22 12:17

    もしくは、こんな感じ
    soup = BeautifulSoup(response.text, features = "lxml")

    キャンセル

  • 2019/01/22 12:19

    迅速な対応ありがとうございます。

    上記に変更すると
    []とでました。
    なにかのインストールが足りないんでしょうか・・・・

    キャンセル

  • 2019/01/22 12:22

    あー申し訳ありません。
    多分これで行けるはず!
    soup = BeautifulSoup(response.text,'html5lib')

    キャンセル

  • 2019/01/22 12:30

    ありがとうございます。
    上記でやると
    bs4.FeatureNotFound: Couldn't find a tree builder with the features you requested: html5lib. Do you need to install a parser library?
    とでます
    parser libraryのインストールでしょうか??

    キャンセル

  • 2019/01/22 12:32

    pip install html5lib
    やってみてください

    キャンセル

  • 2019/01/22 12:37

    ありがとうございます!!
    取得することができました!!

    本当に感謝です。

    キャンセル

  • 2019/01/22 12:48

    追記ですが、card_list_1のvalueの相対URLを取りたいのですがそれもできますか??

    なんどもすみません

    キャンセル

0

以下のような感じで取得できないでしょうか。

import lxml.html

res = """
<div class="pack pack_ja">
<input type="hidden" class="link_value" value="/hoge/huga.action?ope=1"> == $0
</div>
"""

root = lxml.html.fromstring(res)
ret = root.cssselect('div > .link_value')
for r in ret:
    print(r.attrib['value']) # /hoge/huga.action?ope=1

投稿

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

  • 2019/01/22 12:17

    回答ありがとうございます。
    /hoge/huga.action?ope=1
    は取得できました。
    実際のサイトで試してみます。

    キャンセル

15分調べてもわからないことは、teratailで質問しよう!

  • ただいまの回答率 90.46%
  • 質問をまとめることで、思考を整理して素早く解決
  • テンプレート機能で、簡単に質問をまとめられる

同じタグがついた質問を見る

  • Python

    12341questions

    Pythonは、コードの読みやすさが特徴的なプログラミング言語の1つです。 強い型付け、動的型付けに対応しており、後方互換性がないバージョン2系とバージョン3系が使用されています。 商用製品の開発にも無料で使用でき、OSだけでなく仮想環境にも対応。Unicodeによる文字列操作をサポートしているため、日本語処理も標準で可能です。

  • CSS

    7816questions

    CSSはXMLやHTMLで表現した色・レイアウト・フォントなどの要素を指示する仕様の1つです。