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

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

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

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

Python 3.x

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

Q&A

解決済

2回答

1445閲覧

プログラムの内容について

EUROPEAN

総合スコア17

スクレイピング

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

Python 3.x

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

0グッド

0クリップ

投稿2018/11/09 01:11

以前、pythonプログラムに詳しい知人から教えてもらいYahoo映画のサイトからユーザーレビューを取得し、テキストファイルに読み込むプログラムを作成しました。しかし、自分でもなにをやっているのかよくわからない部分が多いためコメントアウトで教えていただけるとたすかります。 

import re import math import time import random import codecs import requests from bs4 import BeautifulSoup def generate_soup_obj(url, params=None): return BeautifulSoup(requests.get(url, params=params).content, "lxml") def find_total_review_count(movie_url): def search_total_review_count_element(target_tag): ret = target_tag.name == "small" and\ target_tag.parent['class'] == ["label"] and \ not target_tag.string == "〜" return ret soup = generate_soup_obj(movie_url) count_string = soup.find(search_total_review_count_element).string return int(re.search(r"([0-9]+)", count_string).group()) def make_review_url_list(movie_url, total_count): result = list() pages = math.ceil(total_count / 10) for page in range(1, pages+1): payload = {"page": page} soup = generate_soup_obj(movie_url, params=payload) urls = soup.find_all("a", class_="listview__element--right-icon") for el in urls: url = BASE_URL + el.get("href") url = url[:url.index("?")] result.append(url) time.sleep(random.randint(1, 3)) return result def fetch_review_text(review_url, is_string=True): soup = generate_soup_obj(review_url) element = soup.find("p", class_="text-small text-break text-readable p1em") if is_string: return element.text.strip() else: review_string = "".join(list(map(str, element.contents))) return review_string.strip().replace("<br/>", "\n") def write_txt(obj, dist): with codecs.open(dist, "w", encoding="utf-8")as fw: fw.write("\n".join(obj)) if __name__ == "__main__": BASE_URL = "https://movies.yahoo.co.jp" MOVIE_URL = "6https://movies.yahoo.co.jp/movie/%E6%A4%9C%E5%AF%9F%E5%81%B4%E3%81%AE%E7%BD%AA%E4%BA%BA/363102/review/" DIST = "./sample2.txt" url_list = make_review_url_list(movie_url=MOVIE_URL, total_count=find_total_review_count(MOVIE_URL)) print("Complete making review url list") output = [] for url in url_list: text = fetch_review_text(review_url=url, is_string=True) output.append(text) time.sleep(random.randint(1, 3)) print(f"Complete: {url}") write_txt(output, DIST)

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

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

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

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

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

azuapricot

2018/11/09 01:21

自分で作ったプログラムなのにわからないとはどういうことでしょう・・・。自分がわからないのに人が分かるわけがないといいますか・・・。もう一度その知人に尋ねた方がよろしいのでは
ikedas

2018/11/09 02:05

ご自分がわからない箇所に、コメントで「何がわからないのか」を書き込んでください。
guest

回答2

0

理解できない場合、
・勉強する
・諦める
のどちらかです。
前者なら、まずはPythonに入門しましょう。
個人的には、後者をお薦めします。

投稿2018/11/09 02:16

otn

総合スコア84538

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

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

0

ベストアンサー

コメントアウトで教えていただけるとたすかります。 

Python

1import re # reをインポートします 2import math # mathをインポートします 3import time # timeをインポートします 4import random # randomをインポートします 5import codecs # codecsをインポートします 6 7import requests # importをインポートします 8from bs4 import BeautifulSoup # bs4からBeautifulSoupをインポートします 9 10 11def generate_soup_obj(url, params=None): # 引数がurl, params=Noneである関数generate_soup_objを定義します 12 return BeautifulSoup(requests.get(url, params=params).content, "lxml") # BeautifulSoup(requests.get(url, params=params).content, "lxml")を返します 13 14 15def find_total_review_count(movie_url): # 引数がmovie_urlである関数find_total_review_countを定義します 16 def search_total_review_count_element(target_tag): # 引数がtarget_tagである関数search_total_review_count_elementを定義します 17 ret = target_tag.name == "small" and\ # target_tag.name と "small"が等しく かつ 18 target_tag.parent['class'] == ["label"] and \ # target_tag.parent['class'] と ["label"]が等しく かつ 19 not target_tag.string == "〜" # target_tag.string が "〜" ではない 20 return ret # retを返します 21 22# 以下同様なので略

投稿2018/11/09 02:10

can110

総合スコア38266

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

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

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問