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

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

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

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

Python 3.x

Python 3はPythonプログラミング言語の最新バージョンであり、2008年12月3日にリリースされました。

Q&A

解決済

1回答

876閲覧

Pythonのウェブスクレイピングについて

yoyoda

総合スコア11

スクレイピング

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

Python 3.x

Python 3はPythonプログラミング言語の最新バージョンであり、2008年12月3日にリリースされました。

0グッド

0クリップ

投稿2019/06/23 06:09

こちらのURL(https://iotnews.jp/)のページ内容を取得し<title>タグと<h1>タグの要素を取得したいのですが、なぜか取得できません。少なくともアクセスは出来ていて、エラーも出ないのですが要素の抽出がうまく出来なくて悩んでおります。

なぜ要素の抽出が出来ないのか?どのようにコードを変更すればうまくいくか?等、相談させて頂きたく、よろしくお願い致します。

(他のウェブサイト①https://codezine.jp/や②https://news.google.comでは、以下のコードで問題なく要素を取得できております。)

###①実行したコード

import requests r = requests.get("https://iotnews.jp/") print(type(r)) print(r.status_code) text = r.text for line in text.split("\n"): if "<title>" in line or "<h1>" in line: print(line.strip())

他のウェブサイトをスクレイピングするときは
3行目のURL部分を"https://codezine.jp"あるいは"https://news.google.com"に置き換えて実行しております。

###実行結果
a) IoT newsの場合

<class 'requests.models.Response'> 200

→アクセスは成功(200)しているが、要素が取得出来ていない

b) CodeZineの場合

<class 'requests.models.Response'> 200 <title>CodeZine(コードジン)</title> <h1><a href="/"><img src="//cz-cdn.shoeisha.jp/lib/img/cmn/cmn-header-logo.png" alt="CodeZine(コードジン)" ></a></h1>

→ アクセスに成功(200)し、かつ<title>,<h1>タグの要素も取得出来ている

試したこと(調べたこと)

Google Chromeの検証機能を使用してIoT newsのページのソースを確認しました。
少なくとも<title>タグの要素は存在しているようです。

 イメージ説明

codezineの場合、当然、<title>タグが存在している

 イメージ説明

補足情報(FW/ツールのバージョンなど)

Python 3.7.3

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

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

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

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

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

guest

回答1

0

ベストアンサー

textをファイルに書いて確認しては?
<h1>タグは存在しないけど、<title>タグは存在するので、何も出力されないのはおかしいです。
おそらく、User-Agentを見て出し分けているのかと思いますので、User-Agentを一般のブラウザのものを使うようにしてリクエストしましょう。

また、画像のものは、ソースじゃありません。開発者ツールの画面であり、ソースにJavaScriptで変更を加えた結果です。
ソースを見るには、ブラウザのメニューからソースを表示するというのを選んでください。

投稿2019/06/23 08:12

otn

総合スコア84423

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

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

yoyoda

2019/06/23 09:23

コメント有難うございます。大変助かります。 ① textをファイルに書くよう試みましたが、ファイルは作成されたものの、中身は空っぽのままで、textへの書き出しが出来ませんでした。 (ちなみにtitleの要素抽出が出来ていたcodezineの方はtextの書き出しも出来ました。) ② User Agentを一般のブラウザのものを使うようにしてリクエストする件、具体的な方法等、もう少し詳しく教えて頂けないでしょうか (PythonのコードにUser-agent="ブラウザ名"などを指定して実行するということでしょうか。すみません、この部分、完全に理解出来なかったのでもう少し詳しく教えて頂けないでしょうか) ③ ご指摘有難うございます。 恥ずかしい間違いをしてしまいました。ブラウザメニューのソースを表示することでソースが確認出来ました。 宜しくお願い致します。
otn

2019/06/23 09:47

ああ、やってみると空ですね。書き込みはちゃんとできていると思います。 r = requests.get("https://iotnews.jp/", headers = {"User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/46.0.2486.0 Safari/537.36 Edge/13.10586"}) で、取得できました。
yoyoda

2019/06/23 10:19

有難うございます! 当方も取得出来ました。 本当に有難うございます!! r= requests.get("https://iotnews.jp/",headers = {"User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/46.0.2486.0 Safari/537.36 Edge/13.10586"} )
otn

2019/06/23 12:59

中間結果を表示する(orファイルに書く)というのはデバッグの有力手段なので、活用してください。
yoyoda

2019/06/23 20:01

有難うございます!デバッグ時は積極的に活用したいと思います。 この度は色々とアドバイスを頂き有難うございます。大変多くを学ぶことが出来ました。改めてお礼申し上げます。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.50%

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

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

質問する

関連した質問