【コード公開】pythonでスクレイピング(amazon)
- 2020.08.15
- PYTHONの使い方 プログラミング・技術・開発
- python, コード公開, スクレイピング
.png)
pythonでデータ解析をする際にスクレイピングが多く使用されます。
実際のコードを載せますので、実際にスクレイピングを実行してみてください。
使用するライブラリ
Requests
HTTP通信をする際のライブラリであるRequestsがあります。
下記のようなコードで簡単にサイトから情報を取得することができます。
import requests r = requests.get("https://news.yahoo.co.jp/") print(r.text)
Beautiful Soup
スクレイピングでは、取得したサイト情報から必要な項目のみを抜き出す必要があります。
その際に使用するのがBeautiful Soupです。
Beautiful Soupを使用することで、サイト内の指定したクラスやタグを抜き出すことができます。
https://qiita.com/Chanmoro/items/db51658b073acddea4ac
Django
Djangoは、直接スクレイピングには関係ありませんが、今回は、Web上で入力されたキーワードをもとにamazonでの検索情報をスクレイピングするため、Djangoというフレームワークを使用します。
あのインスタグラムもDjangoを使用して、構築されたサイトで、pythonのフレームワークとして有名です。
https://developer.mozilla.org/ja/docs/Learn/Server-side/Django/Introduction
コード解説
入出力関数
#フォーム画面の入力および出力 def search_form(request): params = {"search_text" : "", "title_price_list" : [] , "title_list" : [] , "price_list" : [] , "count" : 0,"form" : None} if request.method == "POST": title_price_list = get_search(request.POST["search_text"]) form = SearchForm(request.POST) params["search_text"] = request.POST["search_text"] params["form"] = form params["title_price_list"] = title_price_list else: params["form"] = SearchForm() return render(request, "searchForms.html", params)
Djangoのフレームワークを使用して、Web画面からamazonで検索するキーワードを入力します。
検索結果を出力するために取得した内容をパラメータとして画面に渡します。
キーワード検索関数
#amazonでキーワード検索し、商品名と価格を取得 def get_search(search_text): search_url = 'https://www.amazon.co.jp/s?k=' + search_text + '&__mk_ja_JP=%E3%82%AB%E3%82%BF%E3%82%AB%E3%83%8A&ref=nb_sb_noss_2' url_list = get_url(search_url) title_price_list = [] for item in url_list: title,price = get_title_price(item) title_price_list.append(title + ' : ' + price) return title_price_list
amazonでキーワードで検索した結果から、商品名と価格を取得するための中間関数です。
商品URL取得関数
#amazonの検索結果から商品URLを取得 def get_url(search_url): url_list = [] res = requests.get(search_url) soup = BeautifulSoup(res.text, features="lxml") topstories = soup.find_all('a', class_='a-link-normal a-text-normal') res.close for item in topstories: url_list.append('https://www.amazon.co.jp' + item.get("href")) return url_list
amazonの検索結果から各商品の詳細URL一覧を取得します。
商品名、価格取得関数
#商品ページから商品名と価格を取得 def get_title_price(page_url): try: selected_html_title = [] selected_html_price = [] while not (selected_html_title != [] and selected_html_price != []): res = requests.get(page_url) soup = BeautifulSoup(res.text, features="lxml") selected_html_title = soup.select('#productTitle') selected_html_price = soup.select('.a-span12 span.a-color-price') if not selected_html_price: selected_html_price = soup.select('.a-color-base span.a-color-price') if not selected_html_price: selected_html_price = soup.select('.a-color-secondary span.a-color-secondary') res.close time.sleep(30) title = selected_html_title[0].text title = title.replace(' ', '') title = title.replace('\n', '') pattern = r'\d*,?\d*,?\d*\d' regex = re.compile(pattern) matches = re.findall(regex, selected_html_price[0].text) price = matches[0].replace(',', '') except: title = '-1' price = '-1' return title,price
amazonの各商品ページから商品名および価格を取得します。
P.S
pythonの勉強について、下記の書籍がおすすめです。
本当の初心者向けではないですが、初級者の方が、中級、それ以上の実際に仕事としてpythonを使用する方にとっては、最適な書籍ですので、一度、読んでみてください。
pythonについて、学ぶべき理由について記事を書きましたので、こちらも読んでみてください。
-
前の記事
pythonを学ぶべき理由(メリット)について 2020.08.11
-
次の記事
【コード公開】Twitterのタイムラインをwordcloudにしてみた 2020.08.20