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

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

ただいまの
回答率

88.31%

pythonでスクレイピングができません。

解決済

回答 2

投稿 編集

  • 評価
  • クリップ 1
  • VIEW 794

sususu

score 86

いつもお世話になります。
pythonでスクレイピングができなくて困っております。
スクレイピングしたい値は下の画像の色が変わっている<li>の中身です。
イメージ説明

コードは下記のとおりです。
※参考サイトhttps://qiita.com/taka-kawa/items/f0597b2f375da7ddbb73

#config: utf-8
import requests
import urllib2
from bs4 import BeautifulSoup
from config import config

first_view = urllib2.urlopen(config['web_info']['url']).read()
soup = BeautifulSoup(first_view,"lxml")

def extract_pick_up(soup=soup):
        columns = soup.find_all("li",class_="item.js-item.js-tiled")
        print(columns)
        return columns[0:1]

if __name__=="__main__":
        columns = extract_pick_up()
        print(columns)


変数soupの中にページのHTMLファイルが入ってくるところまでは確認できております。
問題はsoup.find_all("li")も値が入ってきているのは確認できているのですがクラスを指定すると値が持ってこれなくて困っております。
下記を試してみましたが値を取得できませんでした。
class_="item.js-item.js-tiled"
class_="item js-item js-tiled" 
class_="item js-item"

jsと書いてあるので何かjavascriptを読み込むような指定が必要なのでしょうか?
すいませんがどなたかご教授お願いいたします。

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

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

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

    クリップを取り消します

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

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

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

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

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

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

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

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

    質問の評価を下げる

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

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

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

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

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

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

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

    詳細な説明はこちら

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

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

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

質問への追記・修正、ベストアンサー選択の依頼

  • tiitoi

    2018/12/18 21:11 編集

    質問欄に URL を記載できますか?
    見たところ、名前が item.js-item.js-tiled なので、Javascript であとから挿入されたクラスのように見えます。Javascript のレンダリングは行われないので、selunium 等使わないと無理だと思います。

    キャンセル

  • sususu

    2018/12/18 21:12

    https://yukinostores.com/
    こちらになります!!

    キャンセル

  • sususu

    2018/12/18 21:29

    もしかしたらですが"item"だけにしリストの一番目を表示したらできたかもしれません。
    上に張らせていただきます。

    キャンセル

回答 2

checkベストアンサー

+1

以下のようにCSSセレクタ li.item で取得できました。

import urllib.request
from bs4 import BeautifulSoup

url = 'https://yukinostores.com/'
res = urllib.request.urlopen(url)
soup = BeautifulSoup(res.read(), 'lxml')

def extract_pick_up(soup):
    items = soup.select('li.item')
    return items

items = extract_pick_up(soup)

for item in items:
    print('name: {}, url: {}'.format(item.h2.text, item.a['href']))
name: バイカラー ロング丈コート かっこいい 大人女子 冬コーデ 配色 ベルト付き, url: /items/5c16373ac49cf37a9ba614a4
name: スタイリッシュ ロングコート カッコいい ベルト付き カジュアル, url: /items/5c163274c49cf36865a60ecb
name: ウエストゴム 羽根模様 ボリューム ロング丈 タッセルスカート 四色, url: /items/5c1625f6144448145d99b9c8
name: 三点セット ハイネックニット ペプラムフリルトップス ショートパンツ 二色, url: /items/5c16021127b44e7413ae133a
name: 配色 エレガント 大人女性 リボン ニットトップス 二色, url: /items/5c15f88e27b44e64daae0fe8
name: セクシー 透け感 ウエストカットアウト ニットワンピース フレア 3色, url: /items/5c152a66c49cf353b6a60cde
name: 肩出し オフショルダー風 クロス セクシー フェミニン 三色, url: /items/5c1526c614444810a399b077
name: 肩出し オフショルダー風 セクシー リブニット フェミニン 全2色, url: /items/5c152464144448782199b482
name: 異素材 レース 切替オーガンジー ニットワンピース 膝丈 二色, url: /items/5c137e9ec49cf34249a60baf
name: フリル 可愛い ラブリーニットミニワンピース ボリューム袖 三色, url: /items/5c1366ca2a28624dcfcfc763
name: ハート柄 刺繍 タートルネック 可愛いニットトップス 全3色, url: /items/5c13618a7cd3615a0aeb66c5
name: レース 異素材ニットワンピース パール 長袖フェミニン スリット入り 三色, url: /items/5c1234847cd36161edeb6902
name: ロング丈 異素材 スパンコール チュール 不規則 キャバドレス, url: /items/5c122f497cd3616222eb6640
name: Aライン フレア Vネック 結婚式 ロング丈ドレス キャバドレス, url: /items/5c12164327b44e5e6a3827bc
name: 2点セットアップ フリルニット+チュール不規則スカート 大人可愛い, url: /items/5c1212632a2862582653ed25
name: もこもこ 可愛い エレガント風 上下二点セット ジャケット+ミニスカート, url: /items/5c120ace2a286226aef8005d
name: チュールドレス ロング丈 ベスト式 ワンピース 結婚式 キャバドレス パーティー, url: /items/5c114fcb14444857fb4b1876
name: ニットミニスカートセット 2点上下 ラウンドネック ストライプ おしゃれ, url: /items/5c114ba3c49cf33042dcfd62
name: パール マルチ 新作 アクセサリー 可愛い, url: /items/5c11481e144448321f4b1b94
name: ピンク ニットワンピース vネック ミニ丈 大人可愛い ベルト付き, url: /items/5c0fb86b2a28623869767011
name: ニット 異素材ワンピース チュール ロング丈 フェミニン オフショルダー風, url: /items/5c0fac20c49cf37e76c67411
name: 切替 ロング丈 チュール ワンピース 結婚式 キャバドレス パーティー, url: /items/5c0f239a27b44e3dad13254e
name: 異素材 シースルー 切替レッド ロング丈ドレス Aライン パーティー, url: /items/5c0e612a1444484e5141634d
name: 切り替え異素材 エレガント ミディアム丈ワンピース ツイードジャケットセット, url: /items/5c0e451227b44e4c75131e44
name: 花柄 ドレスセット 2点上下 クラシック アンサンブル オスカル, url: /items/5c0e29cf7cd3615a3de9df0d
name: オフショルダー風 ロング丈 結婚式 2次会 披露宴 パーティードレス, url: /items/5c0e1fa3c3976c69837d33df
name: フリル パール 切替バイカラー ひざ丈ワンピース ニット 全3色, url: /items/5c0d12637cd3614fa328e314
name: バイカラー ベロア プリーツロングスカート バイカラー 秋冬 ウエストゴム 三色, url: /items/5c0d0bba7cd3614fa328dfc1
name: もこもこリボンショール 結婚式 パーティードレスコーデ 全8色, url: /items/5c0d0547c3976c64fcebab98
name: フェミニン 肩フリル ニットミニ丈ワンピース ラブリー 全三色, url: /items/5c0cffdbc3976c243debbd1f
name: 秋冬新作 ショール 異素材 シフォン 結婚式 ドレスコーデ カーディガン, url: /items/5c0ce33f14444878edf9db3d
name: ロング丈 レッド スパンコール シースルー フィッシュテール キャバドレス, url: /items/5c0bc30f7cd36111b728da4c

投稿

  • 回答の評価を上げる

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

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

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

  • 回答の評価を下げる

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

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

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

  • 2018/12/18 21:32

    すごいきれいでわかりやすいです!
    こんな早く書いて回答してしまうなんて。。。
    ありがとうございます!参考にさせていただきます!!

    キャンセル

+1

<li class="item js-item js-tiled">

class名はitem,js-item,js-tiledの3つ別々の名前になりどれを選んでも大丈夫です。

li.item
li.js-item
li.js-tiled

3つ全部のクラス名の場合は
soup.select('li.item.js-item.js-tiled')
でいけます。

どうもクラス名が複数ある場合はCSSセレクタで選択するのがベストのようです。

js-tiledはJavascriptレンダリング時に追加されるようですので
CSSセレクタの場合は
soup.select('li.item.js-item')

find_allの場合は
soup.find_all('li', class_='item js-item ')

あとこういう方法もあるようです。
Beautifulsoup複数クラスセレクタ
https://code.i-harness.com/ja/q/267040e

投稿

編集

  • 回答の評価を上げる

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

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

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

  • 回答の評価を下げる

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

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

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

  • 2018/12/29 22:50

    CSSセレクタで取得する方法もあるのですね!ありがとうございます。
    ベストなとり方ができるように、取得方法について調べてみたいと思います!
    ありがとうございました!!

    キャンセル

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

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

関連した質問

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