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

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

新規登録して質問してみよう
ただいま回答率
85.47%
スクレイピング

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

Python

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

selenium

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

HTML

HTMLとは、ウェブ上の文書を記述・作成するためのマークアップ言語のことです。文章の中に記述することで、文書の論理構造などを設定することができます。ハイパーリンクを設定できるハイパーテキストであり、画像・リスト・表などのデータファイルをリンクする情報に結びつけて情報を整理します。現在あるネットワーク上のほとんどのウェブページはHTMLで作成されています。

Q&A

解決済

1回答

2873閲覧

Seleniumでハローワークの「仕事の内容」を取得する方法

Q10

総合スコア12

スクレイピング

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

Python

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

selenium

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

HTML

HTMLとは、ウェブ上の文書を記述・作成するためのマークアップ言語のことです。文章の中に記述することで、文書の論理構造などを設定することができます。ハイパーリンクを設定できるハイパーテキストであり、画像・リスト・表などのデータファイルをリンクする情報に結びつけて情報を整理します。現在あるネットワーク上のほとんどのウェブページはHTMLで作成されています。

0グッド

1クリップ

投稿2020/10/25 08:39

編集2020/10/25 08:42

Python Seleniumでハローワークの「仕事の内容」を取得する方法を教えて下さい。

https://www.geek.sc/archives/2975
を見ながらスクレイピングしていて、
このホームページと同じことは出来ました。

でも、せめてハローワークの「仕事の内容」も表示させたいです。
タイトルだけではどんな仕事か分かりづらいですよね。

以下がGoogle Chromeでハローワークの検索した結果を表示し、
「仕事の内容」のところに合わせて右クリックして
「ページのソースコードを表示」「検証…」を選択した結果です。
この中に答えがあると思っています:

HTML

1 : 2<tr class="border_new"> 3 4<td class="fb in_width_9em">仕事の内容</td> 5<td> 6<div>WEBアプリ開発。JAVA,Python。基本設計、詳細から開発・テストまで。写真ご覧ください</div> 7 8</td> 9</tr> 10 :

「仕事の内容」はjob_descriptionという名前で取得します。
いろいろ試しているのですが、どこを捕まえていいのか分かりません。
{"class" : "fb"}を捕まえたら「職種」が表示されました…。

Python

1for i, job in enumerate(jobs): 2 job_name = str(job.find("td", attrs={"class": "m13"}).text.strip()) 3 job_description = str(job.find("td", attrs={"class": "fb"})) 4 salary_tags = job.find_all("tr",attrs={"class": "border_new"})[5].select(".disp_inline_block") 5 for t, salary_tag in enumerate(salary_tags): 6 job_salary = salary_tag.text 7 message = message + "■{0} ( {1} ) {2}\n".format(job_name, job_salary, job_description) 8

Python出力結果:

■AWSシステム(〇〇市) ( 250,000円〜500,000円 ) <td class="fb"> <strong>職種</strong> </td> ■AWSインフラ(〇〇市) ( 250,000円〜500,000円 ) <td class="fb"> <strong>職種</strong> </td>

期待している出力結果:

■AWSシステム(〇〇市) ( 250,000円〜500,000円 ) WEBアプリ開発。JAVA,Python。基本設計、詳細から開発・テストまで。写真ご覧ください ■AWSインフラ(〇〇市) ( 250,000円〜500,000円 ) AWSインフラの整備。必須スキルは〇〇。

色々調べていますが、どうやったら「仕事の内容」が取得できるのか分かりません。
どうか教えて下さい。お願いします。

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

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

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

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

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

guest

回答1

0

ベストアンサー

以下で仕事内容の取得が可能です。
.find()メソッドで引数に[仕事の内容]という文字列を指定し対象の要素を取得します。
この時取得した要素の中身は単純な文字列ではありますが、typeはbs4elementである為
更にここからこの文字列を指定して.find系メソッドの使用が可能です。
.parentで[仕事の内容]という文字列が含まれる親要素を指定し
更にその兄弟要素を取得し.textで文字列化します。

python

1for i, job in enumerate(jobs): 2 job_name = str(job.find("td", attrs={"class": "m13"}).text.strip()) 3 salary_tags = job.find_all("tr",attrs={"class": "border_new"})[5].select(".disp_inline_block") 4 for t, salary_tag in enumerate(salary_tags): 5 job_salary = salary_tag.text 6 7 job_description = job.find(string='仕事の内容').parent.find_next_sibling().text.replace('\n', '') 8 message = message + "■{0} ( {1} ) \n□{2}\n".format(job_name, job_salary, job_description)

投稿2020/10/25 10:14

編集2020/10/25 10:31
nto

総合スコア1438

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

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

Q10

2020/10/25 13:28

動きました! なるほど、親の文字列を見つけて、その次の兄弟を探しに行けばいいんですね。 それなら他にも応用が出来そうですね。自分でいろいろやってみます。 大変助かりました。ありがとうございました!
nto

2020/10/26 03:04

いいえ、違います。 親の文字列ではありません。(その様なものやその様な言葉は存在しません。) 親要素に、兄弟要素です。 かなりの初歩的な知識ですのでまずはある程度のhtmlの知識をつけた上でスクレイピングを行いましょう。
Q10

2020/10/26 11:56

なるほど、親要素に、兄弟要素ですね。 HTMLも復習しておきます。 ありがとうございました。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.47%

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

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

質問する

関連した質問