重新格式化刮硒台

时间:2016-02-05 23:54:57

标签: python selenium pandas selenium-webdriver web-scraping

我正在抓一个显示体育联盟信息的table。到目前为止,硒初学者非常好:

from selenium import webdriver
import re
import pandas as pd

driver = webdriver.PhantomJS(executable_path=r'C:/.../bin/phantomjs.exe')

driver.get("http://www.oddsportal.com/hockey/usa/nhl-2014-2015/results/#/page/2.html")

infotable = driver.find_elements_by_class_name("table-main")
matches = driver.find_elements_by_class_name("table-participant")
ilist, match = [], []

for i in infotable:
    ilist.append(i.text)
    infolist = ilist[0]

for i in matches:
    match.append(i.text)

driver.close()

home = pd.Series([item.split(' - ')[0] for item in match])
away = pd.Series([item.strip().split(' - ')[1] for item in match])

df = pd.DataFrame({'home' : home, 'away' : away})

date = re.findall("\d\d\s\w\w\w\s\d\d\d\d", infolist)

在最后一行,date删除了表格中的所有日期,但我无法将它们链接到相应的游戏。

我的想法是:for child/element "under the date", date = last_found_date

最终目标是在df中添加两列,其中一列包含匹配的date,另一列如果在日期旁边找到任何文本,例如'Play Offs'(我可以如果我可以将date问题排序,那​​就明白自己。

我是否应该使用其他程序/方法来保留表格的标签/元素的顺序?

1 个答案:

答案 0 :(得分:3)

您需要更改提取匹配信息的方式。不是单独提取homeaway团队,而是在一个循环中执行,同时提取日期和事件:

from selenium import webdriver

import pandas as pd

driver = webdriver.PhantomJS()
driver.get("http://www.oddsportal.com/hockey/usa/nhl-2014-2015/results/#/page/2.html")

data = []
for match in driver.find_elements_by_css_selector("div#tournamentTable tr.deactivate"):
    home, away = match.find_element_by_class_name("table-participant").text.split(" - ")
    date = match.find_element_by_xpath(".//preceding::th[contains(@class, 'first2')][1]").text

    if " - " in date:
        date, event = date.split(" - ")
    else:
        event = "Not specified"

    data.append({
        "home": home.strip(),
        "away": away.strip(),
        "date": date.strip(),
        "event": event.strip()
    })

driver.close()

df = pd.DataFrame(data)
print(df)

打印:

                     away         date          event                 home
0     Washington Capitals  25 Apr 2015      Play Offs   New York Islanders
1          Minnesota Wild  25 Apr 2015      Play Offs       St.Louis Blues
2         Ottawa Senators  25 Apr 2015      Play Offs   Montreal Canadiens
3     Pittsburgh Penguins  25 Apr 2015      Play Offs     New York Rangers
4          Calgary Flames  24 Apr 2015      Play Offs    Vancouver Canucks
5      Chicago Blackhawks  24 Apr 2015      Play Offs  Nashville Predators
6     Tampa Bay Lightning  24 Apr 2015      Play Offs    Detroit Red Wings
7      New York Islanders  24 Apr 2015      Play Offs  Washington Capitals
8          St.Louis Blues  23 Apr 2015      Play Offs       Minnesota Wild
9           Anaheim Ducks  23 Apr 2015      Play Offs        Winnipeg Jets
10     Montreal Canadiens  23 Apr 2015      Play Offs      Ottawa Senators
11       New York Rangers  23 Apr 2015      Play Offs  Pittsburgh Penguins
12      Vancouver Canucks  22 Apr 2015      Play Offs       Calgary Flames
13    Nashville Predators  22 Apr 2015      Play Offs   Chicago Blackhawks
14    Washington Capitals  22 Apr 2015      Play Offs   New York Islanders
15    Tampa Bay Lightning  22 Apr 2015      Play Offs    Detroit Red Wings
16          Anaheim Ducks  21 Apr 2015      Play Offs        Winnipeg Jets
17         St.Louis Blues  21 Apr 2015      Play Offs       Minnesota Wild
18       New York Rangers  21 Apr 2015      Play Offs  Pittsburgh Penguins
19      Vancouver Canucks  20 Apr 2015      Play Offs       Calgary Flames
20     Montreal Canadiens  20 Apr 2015      Play Offs      Ottawa Senators
21    Nashville Predators  19 Apr 2015      Play Offs   Chicago Blackhawks
22    Washington Capitals  19 Apr 2015      Play Offs   New York Islanders
23          Winnipeg Jets  19 Apr 2015      Play Offs        Anaheim Ducks
24    Pittsburgh Penguins  19 Apr 2015      Play Offs     New York Rangers
25         Minnesota Wild  18 Apr 2015      Play Offs       St.Louis Blues
26      Detroit Red Wings  18 Apr 2015      Play Offs  Tampa Bay Lightning
27         Calgary Flames  18 Apr 2015      Play Offs    Vancouver Canucks
28     Chicago Blackhawks  18 Apr 2015      Play Offs  Nashville Predators
29        Ottawa Senators  18 Apr 2015      Play Offs   Montreal Canadiens
30     New York Islanders  18 Apr 2015      Play Offs  Washington Capitals
31          Winnipeg Jets  17 Apr 2015      Play Offs        Anaheim Ducks
32         Minnesota Wild  17 Apr 2015      Play Offs       St.Louis Blues
33      Detroit Red Wings  17 Apr 2015      Play Offs  Tampa Bay Lightning
34    Pittsburgh Penguins  17 Apr 2015      Play Offs     New York Rangers
35         Calgary Flames  16 Apr 2015      Play Offs    Vancouver Canucks
36     Chicago Blackhawks  16 Apr 2015      Play Offs  Nashville Predators
37        Ottawa Senators  16 Apr 2015      Play Offs   Montreal Canadiens
38     New York Islanders  16 Apr 2015      Play Offs  Washington Capitals
39        Edmonton Oilers  12 Apr 2015  Not specified    Vancouver Canucks
40          Anaheim Ducks  12 Apr 2015  Not specified      Arizona Coyotes
41     Chicago Blackhawks  12 Apr 2015  Not specified   Colorado Avalanche
42    Nashville Predators  12 Apr 2015  Not specified         Dallas Stars
43          Boston Bruins  12 Apr 2015  Not specified  Tampa Bay Lightning
44    Pittsburgh Penguins  12 Apr 2015  Not specified       Buffalo Sabres
45      Detroit Red Wings  12 Apr 2015  Not specified  Carolina Hurricanes
46      New Jersey Devils  12 Apr 2015  Not specified     Florida Panthers
47  Columbus Blue Jackets  12 Apr 2015  Not specified   New York Islanders
48     Montreal Canadiens  12 Apr 2015  Not specified  Toronto Maple Leafs
49         Calgary Flames  11 Apr 2015  Not specified        Winnipeg Jets