簡體   English   中英

使用python 2.7從表中收集數據

[英]Scraping data from tables using python 2.7

我嘗試了兩種不同的方法,但都無法正常工作。 我正在嘗試在此頁面上收集統計信息: http : //www.cbssports.com/nfl/gametracker/boxscore/NFL_20161120_JAC@DET/在“團隊統計”中。 我需要指定統計信息類別后的數字,例如:“ NET YARDS RUSHING”。 以下是我嘗試沒有成功的嘗試。

第一種方式:

import pickle
import math
import os
import urllib2
from lxml import etree
from bs4 import BeautifulSoup
from urllib import urlopen
from openpyxl import load_workbook
from openpyxl import Workbook
from openpyxl.styles import Color, PatternFill, Font, Border
from openpyxl.styles import colors
from openpyxl.cell import Cell

Last Two Game info Home [H] or Away [A]
favLastGM = 'H' #Higher week number 2        
favLastGM2 = 'A' #Lower week number 1 

#Game Info (Favorite) Last Game Played - CBS Sports (Change Every Week)
favPrevGMInfoUrl = 'http://www.cbssports.com/nfl/gametracker/boxscore/NFL_20161120_JAC@DET/'    

response8 = urllib2.urlopen(favPrevGMInfoUrl)
htmlparser8 = etree.HTMLParser()
tree8 = etree.parse(response8,htmlparser8)

#FAVORITE
if favLastGM == 'A': #This Gives Opposite of Away Team Net Rushing Yards - SO HOME Net Rushing Yards

    text = tree8.xpath('//td[contains(text(),"Net Yards Rushing")]/parent::td/following-sibling::td[1]/text()')
    if text:
        favDef_rushYards_L2_1 = int(text[0].strip())
        print("test"),
        print favDef_rushYards_L2_1

    print ("Enter: Total Rushing Yards Allowed from Favored Team Defense for last game played: "),
    print favDef_rushYards_L2_1
elif favLastGM == 'H': #This Gives Opposite of Home Team Net Rushing Yards - SO AWAY Net Rushing Yards

    text = tree8.xpath('//td[contains(text(),"Net Yards Rushing")]/parent::td/following-sibling::td[0]/text()')
    if text:
        favDef_rushYards_L2_1 = int(text[0].strip())
        print("test"),
        print favDef_rushYards_L2_1


    print ("Enter: Total Rushing Yards Allowed from Favored Team Defense for last game played: "),
    print favDef_rushYards_L2_1
else:
    print("***************************************************")
    print("NOT A VALID ENTRY - favLastGM  !")
    print("***************************************************")

第二種方式:

import pickle
import math
import os
import urllib2
from lxml import etree
from bs4 import BeautifulSoup
from urllib import urlopen
from openpyxl import load_workbook
from openpyxl import Workbook
from openpyxl.styles import Color, PatternFill, Font, Border
from openpyxl.styles import colors
from openpyxl.cell import Cell

#Last Two Game info Home [H] or Away [A]
favLastGM = 'H' #Higher week number 2        
favLastGM2 = 'A' #Lower week number 1        

#Game Info (Favorite) Last Game Played - CBS Sports (Change Every Week)
favPrevGMInfoUrl = 'http://www.cbssports.com/nfl/gametracker/boxscore/NFL_20161120_JAC@DET/'

favPrevGMhtml2 = urlopen(favPrevGMInfoUrl).read()
favPrevGMsoup2 = BeautifulSoup(favPrevGMhtml2)
favPrevGM2Reg = favPrevGMsoup2.find("table", { "class" : "team-stats" })
favPrevGM2Reg2 = []

if favLastGM == 'A': #This Gives Opposite of Away Team Net Rushing Yards - SO HOME Net Rushing Yards

    rush = 'Net Yards Rushing'
    for row in favPrevGM2Reg.findAll("tr"):
        if rush in row.findNext('td'):  #Change Year for every new season
            for item in row.findAll("td"):
                favPrevGM2Reg.append(item.text)
    favDef_rushYards_L2_1 = float(favPrevGM2Reg[1])

    print ("Enter: Total Rushing Yards Allowed from Favored Team Defense for last game played: "),
    print favDef_rushYards_L2_1

elif favLastGM == 'H': #This Gives Opposite of Home Team Net Rushing Yards - SO AWAY Net Rushing Yards

    rush = 'Net Yards Rushing'
    for row in favPrevGM2Reg.findAll("tr"):
        if rush in row.findNext('td'):  #Change Year for every new season
            for item in row.findAll("td"):
                favPrevGM2Reg.append(item.text)
    favDef_rushYards_L2_1 = float(favPrevGM2Reg[0])

    print ("Enter: Total Rushing Yards Allowed from Favored Team Defense for last game played: "),
    print favDef_rushYards_L2_1
else:
    print("***************************************************")
    print("NOT A VALID ENTRY - favLastGM  !")
    print("***************************************************")

您正在尋找xpath:

//td[contains(text(),"Net Yards Rushing")]/following-sibling::td

這樣做是選擇正確的開始td,但是您希望它的同級而不是其父母的同級,因此您需要在td之后直接添加following-sibling :: td。 這將按照表格中的出現順序為您提供2個結果

我沒有寫出完整的代碼,但是這兩行代碼將為您提供家常便飯的地方。

import urllib2
from lxml import etree

favPrevGMInfoUrl = 'http://www.cbssports.com/nfl/gametracker/boxscore/NFL_20161120_JAC@DET/'    
response8 = urllib2.urlopen(favPrevGMInfoUrl)
htmlparser8 = etree.HTMLParser()
tree8 = etree.parse(response8,htmlparser8)

away = tree8.xpath('//tr[@data-category="rushing_yards"]//td[@class="stat-value away"]/text()')
home = tree8.xpath('//tr[@data-category="rushing_yards"]//td[@class="stat-value home"]/text()')

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM