pythonライブラリのBeautiful Soupの解析精度って低くない?

pythonライブラリのBeautiful Soupの解析精度って低くない?

※当ブログでは商品・サービスのリンク先にプロモーションを含みます。ご了承ください。

Amazon検索結果一覧から商品詳細ページのURLを抜き出したかった

普段はPHPでスクレイピングしてるんですが、やはり計算やスクレイピングするだけなどWeb表示しない場合はpythonの方が断然強いということで、今回はpythonでAmazonページをスクレイピングしようと思いました。

僕自身がセドリとかしてるわけじゃないんですが、クラウドワークスなどの募集でしょっちゅうJANコードやASINコードの取得案件があるので、この辺のスクレイピング用プログラムを作っとけば、よりコスパよく案件を受けられると思ったからです。

ではさっそくと、自分のMacBookProにpyenvで開発環境を用意しスクレイピング開始。

pythonのスクレイピング用ライブラリのBeautiful Soupを使ってみた

僕は普段からpythonを使っているわけではないので、どうゆうライブラリがあるかを軽く調べたら出るわ出るわ!

そこで今回はpythonでスクレイピングするなら定番ライブラリっぽい`Beautiful Soup`を使おうと思いました。

この辺は腐るほど情報が溢れているので簡単にソース取得までできたので、後はソースを解析しながら自分の欲しい商品個別ページのURLを絞り込もうと思った矢先!!!

HTMLパースまでは取得できてるのに絞り込みだと取得できない

まずAmazonの検索結果ページの中で、検索にヒットした商品一覧が表示されているHTML構造は下記部分になります。

<div class='sg-col-20-of-24 sg-col-28-of-32 sg-col-16-of-20 sg-col sg-col-32-of-36 sg-col-8-of-12 sg-col-12-of-16 sg-col-24-of-28'>
amazonのソース

これはBeautiful SoupでHTMLパースした段階では確認できます。

def getHtmlObj(url):
   response = requests.get(url = url, headers = headers)
   html = response.content
   soup = BeautifulSoup(html, "html.parser")
   print(soup)

普通ここまで取得できていれば、あとは下記コードで絞り込みされるはずです。

soup.find_all('div', class_="sg-col-20-of-24 sg-col-28-of-32 sg-col-16-of-20 sg-col sg-col-32-of-36 sg-col-8-of-12 sg-col-12-of-16 sg-col-24-of-28")

できな〜〜〜〜い_| ̄|○ il||li

何度やろうが、下記コードに書き直してみてもダメ!

soup.find_all('div', {'class': 'sg-col-20-of-24 sg-col-28-of-32 sg-col-16-of-20 sg-col sg-col-32-of-36 sg-col-8-of-12 sg-col-12-of-16 sg-col-24-of-28'})

`Beautiful Soup`の上記書き方で複数classも絞り込みできるって書いてるのに〜。

こうゆうエラーでもなく中のコードも見えない時が完全に詰む(´;ω;`)

pythonでのスクレイピングにお手上げです

もうpython、Beautiful Soup初心者とか関係なくお手上げです。
今どきスクレイピングなんて専用ライブラリも出てるくらいだから簡単だと思ったのに。

取り敢えず自分ではやれることも見つからないのでseleniumに切り替えて行こうと思います。

どなたか心優しい方、こちら からアドバイスをお願いします( ˃̣̣̥人˂̣̣̥ )