teratail header banner
teratail header banner
質問するログイン新規登録
スクレイピング

スクレイピングとは、公開されているWebサイトからページ内の情報を抽出する技術です。

Beautiful Soup

Beautiful Soupは、Pythonのライブラリの一つ。スクレイピングに特化しています。HTMLデータの構文の解析を行うために、HTMLタグ/CSSのセレクタで抽出する部分を指定することが可能です。

Python

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

selenium

Selenium(セレニウム)は、ブラウザをプログラムで作動させるフレームワークです。この原理を使うことにより、ブラウザのユーザーテストなどを自動化にすることができます。

Q&A

1回答

494閲覧

Udemyの検索結果のスクレイピング

kudama

総合スコア0

スクレイピング

スクレイピングとは、公開されているWebサイトからページ内の情報を抽出する技術です。

Beautiful Soup

Beautiful Soupは、Pythonのライブラリの一つ。スクレイピングに特化しています。HTMLデータの構文の解析を行うために、HTMLタグ/CSSのセレクタで抽出する部分を指定することが可能です。

Python

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

selenium

Selenium(セレニウム)は、ブラウザをプログラムで作動させるフレームワークです。この原理を使うことにより、ブラウザのユーザーテストなどを自動化にすることができます。

0グッド

0クリップ

投稿2022/05/13 02:55

0

0

やりたいこと

Udemyの検索画面から、各ページのリンクや講座名、レートなどをスクレイピングするコードを作成したい。

問題

  • urlがうまく生成できていない
    検索ページのurlの形式は分かっているが作成したコードでは文字コードエラーが出てしまいencodeしても動作しなかった。

  • そもそもどこをスクレイピングすれば良いかわからない
    検索→一覧ページの取得は分かった。しかし、デベロッパーツールを確認したところターゲットが見つからず。恐らく、ページ遷移先でスクレイピングすると考えられるが、その場合の手段が調べても分からなかった。

以上二点です。
現状作成したurlを確認するところまででですが、下記コード参照していただければと思います。

python

1 2from csv import excel 3from tkinter.tix import DirSelectBox 4import urllib.request 5from bs4 import BeautifulSoup 6import lxml 7import selenium 8 9 10# 検索語群※ここではビジネス系の語群にしてみる 11key = ['人事'.encode('utf-8'),'HR','経理'.encode('utf-8'),'accounting','human+resources','営業'.encode('utf-8'),'EC',\ 12'marketing','マーケティング'.encode('utf-8'),'E+Commerce'] 13# 別の語群※ 14key2 = ['人事'.encode('utf-8'),'HR','経理'.encode('utf-8'),'accounting','human+resources','営業'.encode('utf-8'),'EC',\ 15'marketing','マーケティング'.encode('utf-8'),'E+Commerce'] 16#検索ページのうrl(+検索値) 17url = 'https://www.udemy.com/courses/search/?src=ukw&q=' 18 19""" 20ユーザーエージェント (User agent) 21確認くんでチェックする!! 22 23 https://www.ugtop.com/spill.shtml 24 25サイトによって、弾かれるから、ブラウザを偽装する必要があるらしい。 26""" 27 28#そのままコピペした 29ua = #そのままコピペした 30req = urllib.request.Request(url, headers={'User-Agent': ua}) 31html = urllib.request.urlopen(req) 32 33""" 34Python標準ライブラリのhtml.parser以外に、lxmlやhtml5libを指定することもできる。 35その場合は、それぞれをpipなどでインストールしておく必要がある。 36"html.parser"を使わないと警告出されるらしい 37 38$ pip install lxml 39$ pip install html5lib 40 41Beautiful Soupのドキュメントによるとlxmlが速いのでオススメとのこと。 42""" 43soup = BeautifulSoup(html, "lxml") 44 45""" 46恐らくここにページのリンクがある?? 47<div class="popper--popper-content--2tG0H course-objectives-quick-view-box--popover-wrapper--3rGCp" 48id="u206-popper-content--341" aria-labelledby="u206-popper-trigger--340"> 49 50<div class="popper--animation-wrapper--1uUMV"><div class="popover--popover--bps8g popover--popover--top--arrow--1CAPy"> 51<div class="popover--inner--1ZzRT"></div> 52<div class="popover--arrow--1i7d4 popover--arrow--top--17Jzn" style="top: 100%; left: 0rem;"></div></div></div></div> 53""" 54 55for k in range(len(key)): 56 Url = url+key[k] 57 for d in range(len(DSkey)): 58 Url = Url+key2[d] 59 print(Url) 60 61 62 63""" 64参考にしたコードの残差 65 66topicsindex = soup.find('div', attrs={'class': 'topicsindex'}) 67topics = topicsindex.find_all('li') 68 69for topic in topics: 70 print(topic.find('a').contents[0]) 71 72 73""" 74

参考ページ

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

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

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

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答1

0

※ 検索用の API を使う場合

python

1import requests 2import urllib.parse 3from pprint import pprint 4 5# 検索語群※ここではビジネス系の語群にしてみる 6query_words = [ 7 '人事', 'HR', '経理', 'accounting', 'human+resources', 8 '営業', 'EC', 'marketing', 'マーケティング', 'E+Commerce', 9] 10 11# get cookies 12udemy_url = 'https://www.udemy.com' 13s = requests.Session() 14cookies = s.get(udemy_url).cookies 15 16# 検索API 17query = '+'.join(urllib.parse.quote(qw) for qw in query_words) 18headers={ 19 'Referer': f'https://www.udemy.com/courses/search/?q={query}&skip_price=false', 20 'X-Udemy-Cache-Language': 'ja', 21} 22url = 'https://www.udemy.com/api-2.0/search-courses/?src=ukw&skip_price=false' 23data = s.get(url + f'&q={query}', cookies=cookies, headers=headers).json() 24 25# リンク、講座名、レートを表示 26courses_info = [] 27for course in data['courses']: 28 courses_info.append({ 29 'title': course['title'], 30 'link': urllib.parse.urljoin(udemy_url, course['url']), 31 'rating': course['rating'], 32 }) 33 34pprint(courses_info, sort_dicts=False) 35 36# 37[{'title': '「営業の一流、二流、三流」の著者がお届けする、「誰もがトップセールスになれる!営業スキル大全」', 38 'link': 'https://www.udemy.com/course/blxgumyp/', 39 'rating': 4.550725}, 40 {'title': '「営業の一流、二流、三流」の著者が教える、法人営業の決定版「提案力レベルアップ大全」', 41 'link': 'https://www.udemy.com/course/qlwtqxgf/', 42 'rating': 4.5109816}, 43 {'title': '無料でフリーランスが営業・仕事獲得できる22種類の手法を総ざらい【資料ダウンロード可能】', 44 'link': 'https://www.udemy.com/course/sales-method/', 45 'rating': 4.5375347}, 46 {'title': 'はじめてのマーケティング ~豊富な事例をベースに理論の全体像を理解しよう!3時間半であなたもマーケター脳になれる', 47 'link': 'https://www.udemy.com/course/mindseeds_marketing/', 48 'rating': 4.428493}, 49 {'title': '【Laravel】マルチログイン機能を構築し本格的なECサイトをつくってみよう【Breeze/tailwindcss】', 50 'link': 'https://www.udemy.com/course/laravel-multi-ec/', 51 'rating': 4.401135}, 52 {'title': '【DXを前提とした】マーケティング基礎講座:基礎から応用までこれ一つで学べる、最先端のDXまで網羅できる!', 53 'link': 'https://www.udemy.com/course/dxzenya-marketing_ogza_sakamotomatsuaki/', 54 'rating': 4.616512}, 55 {'title': '【収益分析に強くなる】エクセルで学ぶマーケティング収益分析&シミュレーション', 56 'link': 'https://www.udemy.com/course/excel-marketing/', 57 'rating': 4.386267}, 58 {'title': '社員の定着率1年で2.6倍up 人件費30.5%ダウン 簡単・シンプルに戦略的な人事を実現 人事評価制度構築セミナー', 59 'link': 'https://www.udemy.com/course/personnel_evaluation_system/', 60 'rating': 3.7249434}, 61 {'title': '【はじめての統計学】 エクセルで学ぶマーケティング統計分析&戦略', 62 'link': 'https://www.udemy.com/course/marketing-statistics-excel/', 63 'rating': 4.4890327}, 64 {'title': 'こんなに簡単!戦略人事', 65 'link': 'https://www.udemy.com/course/statssenryaku/', 66 'rating': 3.0668416}, 67 {'title': 'これ1本ですべてを網羅!経理部に配属された若手社員が身につけるべき基礎知識', 68 'link': 'https://www.udemy.com/course/1-vodyie/', 69 'rating': 3.6054249999999994}, 70 {'title': 'あなたで良かった!カウンセリング営業育成コース|売り込まないセールス術マスター', 71 'link': 'https://www.udemy.com/course/wuegufcr/', 72 'rating': 4.377918}, 73 {'title': '相手のやる気を引き出すモチベーションコントロール《上級編》【人事コンサルが教えるビジネスで成功するメンタルを手に入れる】', 74 'link': 'https://www.udemy.com/course/business-mental-3_motivation-2/', 75 'rating': 4.6284018}, 76 {'title': '【入門編】ゼロから始めるデジタルマーケティング~企画提案書が作れるターゲティング、コンセプトメイク、メディア選定~', 77 'link': 'https://www.udemy.com/course/digital-marketing-introductory/', 78 'rating': 4.3549786}, 79 {'title': '【入門から実践まで】Webマーケティングの全体像とデータ活用を短時間で学び実際にSEO集客ツールを作ってみよう!', 80 'link': 'https://www.udemy.com/course/web-marketing-for-beginner/', 81 'rating': 4.200853}, 82 {'title': '【人事・面接官向け】初めての面接講座 − シリコンバレーで活用される、”科学的”な見極め・惹きつけ術', 83 'link': 'https://www.udemy.com/course/every-fun-with-hr/', 84 'rating': 4.0653977}, 85 {'title': 'コンテンツマーケティング大百科\u3000~The Content Marketing Encyclopedia~', 86 'link': 'https://www.udemy.com/course/the-content-marketing-encyclopedia/', 87 'rating': 4.6327887}, 88 {'title': '売れる営業は「聴く」!トップセールスが教える顧客心理をとらえる営業スキル', 89 'link': 'https://www.udemy.com/course/znothvur/', 90 'rating': 4.323584}, 91 {'title': '最短2週間で変化が出る!初心者向けのWEBサイト分析・改善【実践講座】', 92 'link': 'https://www.udemy.com/course/u-analytics/', 93 'rating': 4.147225}, 94 {'title': '【脱!属人営業】わかる!営業のためのマーケティングまるごと講座\u3000顧客とチームを動かすリーダーのための戦略営業のPDCA', 95 'link': 'https://www.udemy.com/course/pdca-ybk/', 96 'rating': 4.846905}]

投稿2022/05/13 13:11

melian

総合スコア21265

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだベストアンサーが選ばれていません

会員登録して回答してみよう

アカウントをお持ちの方は

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

ただいまの回答率
85.30%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問