yuhtaryouko
@yuhtaryouko (Yuta Kato)

Are you sure you want to delete the question?

If your question is resolved, you may close it.

Leaving a resolved question undeleted may help others!

We hope you find it useful!

BeautifulSoupのselectの使い方

解決したいこと

こちらのスクレイピング練習問題を行っているのですが、解答例のコードのsoup.selectの使い方が理解できません。

該当するソースコード

import requests
from bs4 import BeautifulSoup

r = requests.get('http://qiita.com/advent-calendar/2016/crawler')
soup = BeautifulSoup(r.content, 'html.parser')
#↑ここまでは分かります

for a in soup.select('.adventCalendarCalendar_comment a'):
    print(a['href'], a.string)

ここの('.adventCalendarCalendar_comment a')が何をしているのかが分かりません。
select('a', class_='adventCalendarCalendar_comment')とかでしたら馴染みがあるのですが、
'.adventCalendarCalendar a'の「.」とか「(空白)a」がどういうことか教えて頂きたいです。

また、print(a['href'])という表現の仕方も理由が分かりません。

自分で試したこと

再度r.content内を見渡して、adventCalendarCalendarの周辺のソースコードを読んでみましたがなぜこのコードが成立するのか分からないままです。
for文の変数【a】を他のものに変更して実行したらエラーが起きたので、print(a['href'])の「a」の部分が「aタグである」ということが確認できたくらいです。

0

1Answer

'.hoge a'のような書き方はCSSセレクタの書き方ですね。
この参考だともう少し解りやすいかもです。

つまるところCSSセレクタで.adventCalendarCalendar_comment aこの条件に対応するタグを探して、それをforループしてる感じですね。
なので、aを別物に変えたら(仮にx)ページ内に.adventCalendarCalendar_comment xに対応するものがないので、エラーが起きたと考えられます。

1Like

Comments

  1. @yuhtaryouko

    Questioner

    CSSセレクタ!!調べてみたら分かりました!ありがとうございます。

Your answer might help someone💌