私はカリフォルニアの宝くじからデータをスクレイプして解析するプロジェクトに取り組んでいます dataframe
これまでの私のコードは次のとおりです。エラーは発生しませんが、出力も発生しません。
import requests
from bs4 import BeautifulSoup as bs4
draw = 'http://www.calottery.com/play/draw-games/superlotto-plus/winning-numbers/?page=1'
page = requests.get(draw)
soup = bs4(page.text)
drawing_list = []
for table_row in soup.select("table.tag_even_numbers tr"):
cells = table_row.findAll('td')
if len(cells) > 0:
draw_date = cells[0].text.strip()
numbers = cells[1].text.strip()
mega = cells[2].text.strip()
drawings = {'dates': draw_date, 'winning_numbers': numbers, 'mega_number': mega}
drawing_list.append(drawings)
print "added {0} {1} {2}, to the list".format(draw_date, numbers, mega)
期待される出力:テーブルの行をスクレイプしてdataframe
draw_date | numbers | mega
-----------|----------------|-----
12/06/2017 | 12 24 07 01 02 | 23
12/02/2017 | 33 18 07 42 40 | 7
正しい方向への修正または支援に感謝します。
"table.tag_even_numbers tr"
テーブルには「tag_even_numbers」クラスがないため、この式は何も選択しませんが、「tag_even」クラスと「numbers」クラスがあります。
したがって、これを変更すると、次のようになります。
soup.select("table.tag_even_numbers tr")
に:
soup.select("table.tag_even.numbers tr")
に20個のアイテムが必要ですdrawing_list
。
また、を使用.text
して選択numbers
すると、すべての数値が文字列に並べて結合されます。
番号のリストが必要な場合.stripped_strings
は、代わりに使用する必要があります。例:
numbers = list(cells[1].stripped_strings)
次にdrawing_list
、次の例からデータフレームを作成できます。
df = pd.DataFrame(drawing_list)
print(df.head())
dates mega_number winning_numbers
0 Dec 6, 2017 - 3201 23 [12, 24, 07, 01, 02]
1 Dec 2, 2017 - 3200 7 [33, 18, 07, 42, 40]
2 Nov 29, 2017 - 3199 6 [03, 33, 26, 27, 07]
3 Nov 25, 2017 - 3198 19 [21, 46, 13, 25, 17]
4 Nov 22, 2017 - 3197 3 [32, 40, 27, 42, 08]
この記事はインターネットから収集されたものであり、転載の際にはソースを示してください。
侵害の場合は、連絡してください[email protected]
コメントを追加