前提・実現したいこと
初心者になります。
ページ内情報を見やすく綺麗に整列させて表示させたいです。
正直、どこから手をつけていいのかわからない状態です。
発生している問題・エラーメッセージ
エラーメッセージ
該当のソースコード
from datetime import datetime import openpyxl as px from openpyxl.styles import PatternFill import requests from bs4 import BeautifulSoup import pandas as pd #プログラム2 def Pagecrawling(soup, item_list): # プログラム2-1|<li>タグのなかで、class='Product'のものを変数productsに格納 products = soup.find_all('li', class_='Product') # プログラム2-2|変数productsの要素を一つずつ調査 for product in products: # プログラム2-3|変数productsのなかで、aタグで、class='Product__titleLink'のものを変数urlsに格納 urls = product.find_all('a', class_='Product__titleLink') # プログラム2-4|変数productsのなかで、divタグで、class='Product__priceInfo'のものを変数pricesに格納 prices = product.find_all('div', class_='Product__priceInfo') # プログラム2-5|変数productsのなかで、divタグで、class='Product__otherInfo'のものを変数othersに格納 others = product.find_all('div', class_='Product__otherInfo') # プログラム2-6|zip関数でまとめて繰り返し処理を実行 for (url, price, other) in zip(urls, prices, others): # プログラム2-7|変数linkに変数urlのhref部分を取得(製品url) link = url.get('href') # プログラム2-8|変数nameに変数urlのtitle部分を取得(製品名) name = url.get('title') # プログラム2-9|変数priceのspanタグで、class='Product__price'のものを変数pricevaluesに格納 pricevalues = price.find_all('span', class_='Product__price') # プログラム2-10|変数の初期化 currentprice = '-' fixedprice = '-' # プログラム2-11|変数pricevaluesの要素を一つずつ処理 for pricevalue in pricevalues: # プログラム2-12|もし変数pricevalueのテキスト情報が'現在'が含まれていれば if '現在' in pricevalue.get_text(): # プログラム2-13|変数currentpriceに現在の価格を取得('\n'で改行を削除) currentprice = pricevalue.get_text().replace('\n', '') # プログラム2-14|もし変数pricevalueのテキスト情報が'即決'が含まれていれば elif '即決' in pricevalue.get_text(): # プログラム2-15|変数fixedpriceに即決の価格を取得('\n'で改行を削除) fixedprice = pricevalue.get_text().replace('\n', '') # プログラム2-16|変数labelのdivタグの0番目の要素を取得('\n'で改行を削除)→入札 label = other.find_all('div')[0].get_text().replace('\n','') # プログラム2-17|変数labelのdivタグの1番目の要素を取得('\n'で改行を削除)→残り時間 lefttime = other.find_all('div')[1].get_text().replace('\n','') # プログラム2-18|リスト「item_list」に必要な要素を追加 item_list.append([name, link, currentprice, fixedprice, label, lefttime]) # プログラム2-19|リスト「item_list」を返す return item_list #プログラム3 def Checkpage(pagerlinks): # プログラム3-1|変数pageurlをNoneにリセット pageurl = None # プログラム3-2|引数pagerlinksの中に、「次へ」があれば、そのurlをpageurlに設定(「次へ」がない場合は、Noneのまま) for pagerlink in pagerlinks: if pagerlink.get_text() == '次へ': pageurl = pagerlink.get('href') break # プログラム3-3|pageurlを返す return pageurl #プログラム5|mainプログラム # プログラム5-1|検索キーワードとYahooオークションURLの設定 keyword = 'Python' url = 'https://auctions.yahoo.co.jp/search/search?p=' + keyword + '&n=100'; # プログラム5-2|ヤフオクページの取得 r = requests.get(url) soup = BeautifulSoup(r.text, 'lxml') # プログラム5-3|取得したデータを格納するリスト item_list = [] # プログラム5-4|リスト「item_list」にプログラム3の結果を格納 item_list = Pagecrawling(soup, item_list) # プログラム5-5|プログラム4を実行して、次のページがあるかどうか調査 pageurl = Checkpage(soup.find_all('a', class_='Pager__link')) # プログラム5-6|次のページがなくなるまで、処理を実行 while True: # プログラム5-7|次のページがないならwhile文を終了 if pageurl is None: break # プログラム5-8|次のページがあるなら処理を実行 else: # プログラム5-9|次のページを取得 nextpage = requests.get(pageurl) soup = BeautifulSoup(nextpage.text, 'lxml') # プログラム5-10|リスト「item_list」にプログラム3の結果を格納 item_list = Pagecrawling(soup, item_list) # プログラム5-11|プログラム4を実行して、次のページがあるかどうか調査 pageurl = Checkpage(soup.find_all('a', class_='Pager__link')) df = pd.DataFrame(item_list) df.columns=["商品名", "URL", "現在価格", "即決価格" ,"入札数", "残り日数"] df.to_csv('ああ.csv')
試したこと
ここに問題に対して試したことを記載してください。
補足情報(FW/ツールのバージョンなど)
ここにより詳細な情報を記載してください。
あなたの回答
tips
プレビュー