使用 BeautifulSoup 将数据从 dataframe 中抓取到 dataframe 中

scrape data from into dataframe with BeautifulSoup

提问人:ezeagwulae 提问时间:12/8/2017 更新时间:12/8/2017 访问量:1228

问:

我正在做一个项目,将加州彩票中的数据抓取并解析成一个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

感谢您对正确方向的任何修改或帮助。

python-2.7 网页抓取 beautifulsoup html 解析

评论


答:

1赞 t.m.adam 12/8/2017 #1

此表达式不选择任何内容,因为该表没有“tag_even_numbers”类,但具有“tag_even”类和“numbers”类。"table.tag_even_numbers tr"

因此,如果您更改此设置:

soup.select("table.tag_even_numbers tr")  

自:

soup.select("table.tag_even.numbers tr")

您应该有 20 个项目。drawing_list

此外,通过使用 选择,您可以获得在字符串中并排连接的所有数字。
如果您想要一个数字列表,您应该改用,例如:
.textnumbers.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]

评论

0赞 ezeagwulae 12/8/2017
多谢。它的建议为我节省了拆分字符串的额外步骤。超级乐于助人。关于推入 DataFrame 的任何建议?stripped_strings