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

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

新規登録して質問してみよう
ただいま回答率
85.50%
Windows

Windowsは、マイクロソフト社が開発したオペレーティングシステムです。当初は、MS-DOSに変わるOSとして開発されました。 GUIを採用し、主にインテル系のCPUを搭載したコンピューターで動作します。Windows系OSのシェアは、90%を超えるといわれています。 パソコン用以外に、POSシステムやスマートフォンなどの携帯端末用、サーバ用のOSもあります。

Python

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

Q&A

1回答

549閲覧

【Python】指定したURLからリンクを取得し、そのリンクから情報を取得する方法

rina0366

総合スコア58

Windows

Windowsは、マイクロソフト社が開発したオペレーティングシステムです。当初は、MS-DOSに変わるOSとして開発されました。 GUIを採用し、主にインテル系のCPUを搭載したコンピューターで動作します。Windows系OSのシェアは、90%を超えるといわれています。 パソコン用以外に、POSシステムやスマートフォンなどの携帯端末用、サーバ用のOSもあります。

Python

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

0グッド

0クリップ

投稿2018/06/11 05:54

前提・実現したいこと

指定したURLからリンクを取得し、そのリンクから情報を取得する処理を実現するため試行錯誤をしております。指定のURLからのリンクの取得とリンク内の情報の取得を別々のファイルに書いて実行テストを行ったところ正常に動作しました。
それとループ処理のfor文の箇所も実行テストをし正常に動作していることを確認しています。
ただ色々試してみてfor文の一行箇所に関してエラーの表記がでます。
このコードに関してのエラーですがどういったことが災いして起きているのでしょうか...

発生している問題・エラーメッセージ

Traceback (most recent call last): File "base.py", line 11, in <module> html = urllib.request.urlopen(x) NameError: name 'urllib' is not defined

該当のソースコード

from bs4 import BeautifulSoup import urllib.request as req url = "https://xxxxxxxxxxxxxxxxxxxxxxxx" res = req.urlopen(url) soup = BeautifulSoup(res, 'html.parser') url_items = soup.select('a[href]') for x in url_items: html = urllib.request.urlopen(x) soup = BeautifulSoup(html, 'html.parser') title1 = soup.select('h1') print("h1 = ",title1) description = soup.select('#item_detail') print("item_detail = ",description) price1 = soup.select('#price') print("price = ",price1)

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

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

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

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

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

guest

回答1

0

Python

import urllib.request as req

このようにインポートしているのですから、次のように書く必要があります。

Python

1html = req.urlopen(x)

追記

BeautifulSoupはお試し程度にしか使ったことがないのでベストな方法ではないかもです。悪しからず。

Traceback (most recent call last):
File "base.py", line 11, in <module>
html = req.urlopen(x)
File "C:\Users(※ここはユーザーネームです隠しています)\AppData\Local\Programs\Python\Python36-32\lib\urllib\request.py", line 223, in urlopen
return opener.open(url, data, timeout)
File "C:\Users\※ここはユーザーネームです隠しています\AppData\Local\Programs\Python\Python36-32\lib\urllib\request.py", line 521, in open
meth_name = protocol+"_request"
TypeError: unsupported operand type(s) for +: 'NoneType' and 'str'

print(x, type(x))すると分かりますが、xはelement.Tag型です。
forブロックのアタマでx = x['href']としておけば良いかと。

Python

1from time import sleep 2 3for x in url_items: 4 x = x['href'] 5 print(x, type(x)) 6 ... 7 8 sleep(1) # 相手方に負荷をかけないため

投稿2018/06/11 05:59

編集2018/06/11 07:13
LouiS0616

総合スコア35658

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

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

rina0366

2018/06/11 06:16

ありがとうございます。 ただ、おっしゃったように編集したら File "base.py", line 13 soup = BeautifulSoup(html, 'html.parser') ^ IndentationError: unindent does not match any outer indentation level このようなエラーに変わりました・・・ 実行は正常に動作しませんでした・・・
LouiS0616

2018/06/11 06:24

タブとスペースがまじっているような気がします。 一度全部インデントを消して、全てスペース4つで打ち直してください。
rina0366

2018/06/11 06:36

今一度、無駄を確認してすべてタブのみでインデント操作を行いましたが変化は起きませんでした。。。
rina0366

2018/06/11 06:38

ただエラー表示で Traceback (most recent call last): File "base.py", line 11, in <module> html = req.urlopen(x) File "C:\Users(※ここはユーザーネームです隠しています)\AppData\Local\Programs\Python\Python36-32\lib\urllib\request.py", line 223, in urlopen return opener.open(url, data, timeout) File "C:\Users\※ここはユーザーネームです隠しています\AppData\Local\Programs\Python\Python36-32\lib\urllib\request.py", line 521, in open meth_name = protocol+"_request" TypeError: unsupported operand type(s) for +: 'NoneType' and 'str'
rina0366

2018/06/11 06:38

このようなエラーに変わりました。 これはいったいどんな意味なのでしょうか・・・
LouiS0616

2018/06/11 06:41

インデントエラーは消えたのですか?
rina0366

2018/06/11 06:53

いえ実は、もともとLouiS0616さんが指摘して下さったコードで何度か実行テストを行っていてのですがLouiS0616さんが教えて下さったこのエラーのままでは常にこのエラーでした。 インデントはもともと関係がないようで・・・
LouiS0616

2018/06/11 06:59

とりあえず、TypeErrorが解消できるように追記しておきました。
rina0366

2018/06/11 07:11

ありがとうございます。 ただループ処理はできましたが情報の取得ができませんでした・・・
LouiS0616

2018/06/11 07:14

そのあたりはサイトに依りけりな気がします。 スクレイピング自体は詳しくないので、あまり突っ込んだ回答は避けておきます。 テキトーに答えてうっかりサーバにダメージを与えてしまうのもまずいので。
rina0366

2018/06/11 07:38

すみません。 ありがとうございました。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

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

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

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

ただいまの回答率
85.50%

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

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

質問する

関連した質問