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

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

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

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

Webサイト

一つのドメイン上に存在するWebページの集合体をWebサイトと呼びます。

Python

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

Q&A

解決済

1回答

3083閲覧

Webスクレイピングを行う際'NoneType' object is not callableと表示される

takunomi

総合スコア8

スクレイピング

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

Webサイト

一つのドメイン上に存在するWebページの集合体をWebサイトと呼びます。

Python

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

0グッド

0クリップ

投稿2021/05/09 06:48

ニュース記事の見出しとその日時を抽出する為にWebスクレイピングを行ったのですが、以下のようなエラーがでてしまいました。
for文でp=500のページとp=501のページのニュース記事一覧の見出しと日時を抽出しています。

入力

import time import requests import pandas as pd from bs4 import BeautifulSoup df = pd.DataFrame() num = 500 for i in range(2): num = num + i url = "https://ーーーーーーーーーーーーーー/?news_id=KBN2C910K&p="+str(num) # urlを引数に指定して、HTTPリクエストを送信してHTMLを取得 response = requests.get(url) time.sleep(2) # 文字コードを自動でエンコーディング response.encoding = response.apparent_encoding bs = BeautifulSoup(response.text, 'html.parser') items = bs.find_all("div",attrs={"class","entry"}) for item in items: itemName = item.find("h3", attrs={"class","entry-title"}) time = item.find("p", attrs={"class", "update-time"}) addrow = pd.Series([time,itemName]) df = df.append(addrow, ignore_index=True) df

出力

TypeError Traceback (most recent call last) <ipython-input-39-51594f6a86c5> in <module> 14 # urlを引数に指定して、HTTPリクエストを送信してHTMLを取得 15 response = requests.get(url) ---> 16 time.sleep(2) 17 18 # 文字コードを自動でエンコーディング TypeError: 'NoneType' object is not callable

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

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

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

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

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

meg_

2021/05/09 06:59

> for文でp=500のページとp=501のページ > for i in range(2): > num = num + i > url = "https://ーーーーーーーーーーーーーー/?news_id=KBN2C910K&p="+str(num) 上記ですと501と502になりませんか?
takunomi

2021/05/09 07:11

num = 500 for i in range(2): num = num + i url = "https://ーーーーーーーーーーーーーー/?news_id=KBN2C910K&p="+str(num) print(url) #~p=500,~p=501 最初にnum=500と変数定義しているのでfor文回して上記のコードですと~p=500,~p=501と出力されるのですが、すいません。根本から間違えていたらご教示お願いします。
meg_

2021/05/09 09:19

すみません。 iと1と読み間違えていました。
guest

回答1

0

ベストアンサー

こんにちは。

問題文読ませていただきました。

もしかすると、変数としてtimeを使っていることがいけないのかもしれません。
他の変数にして再度実行いただけますか?????‍♂️

Python

1time = item.find("p", attrs={"class", "update-time"})

投稿2021/05/09 07:12

退会済みユーザー

退会済みユーザー

総合スコア0

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

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

takunomi

2021/05/09 07:24

他変数にして再度実行したらできました!見落としてました…ありがとうございます^^ あと度々すいません…このtime.sleep()関数ですが、スクレイピングを行う際、reqests.getの前後だけに時間を置くために記述するでいいのでしょうか?それともitem.findで特定テキストを抽出する際も記述が必要でしょうか??
退会済みユーザー

退会済みユーザー

2021/05/09 07:37

お、よかったです。 > time.sleep()関数 response = requests.get(url) の後だけで大丈夫です。 スクレイピングを行う際、サービス運営の阻害に繋がらないように、秒単位のリクエスト頻度を抑えるためにtime.sleep()は利用されます。(dos攻撃について : https://www.shadan-kun.com/blog/measure/2160/ )
takunomi

2021/05/09 08:06

なるほど…わかりやすい説明本当にありがとうございました!
退会済みユーザー

退会済みユーザー

2021/05/09 08:21

いえいえ、また困ったことがありましたら、気軽にご連絡ください〜
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.35%

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

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

質問する

関連した質問