初学者到刮痧,继续获得空名单

时间:2014-06-11 13:06:16

标签: python xpath web-scraping

我决定使用Python(使用lxml和请求)进行网络抓取。我正在努力学习的网页是:http://www.football-lineups.com/season/Real_Madrid/2013-2014

我想要抓的是网页左侧的表格(使用得分和编队的表格)。这是我正在使用的代码:

from lxml import html
import requests
page=requests.get("http://www.football-lineups.com/season/Real_Madrid/2013-2014")
tree=html.fromstring(page.text)
competition=tree.xpath('//*[@id="sptf"]/table/tbody/tr[2]/td[4]/font/text()')
print competition

我输入的xpath是我从Chrome复制过的xpath。代码通常应该返回表格中第一场比赛的比赛(即西甲联赛)。换句话说,它应该返回第二行,第四列条目(Web布局上有一个随机的第二列,我不知道为什么)。但是,当我运行代码时,我得到一个空列表。这段代码可能在哪里出错?

2 个答案:

答案 0 :(得分:1)

如果您检查页面的行来源,您将看到阵容表不存在。 它是在使用AJAX加载页面后提供的,所以你只能通过获取http://www.football-lineups.com/season/Real_Madrid/2013-2014才能获取它,因为JS不会被解释,因此AJAX没有被执行。

AJAX请求如下:

  • 网址:http://www.football-lineups.com/ajax/get_sectf.php
  • 方法:POST
  • 数据:d1 = 3& d2 = -2013& d3 = 0& d4 = 1& d5 = 0& d6 = 1& d7 = 20& d8 = 0& d9 =& d10 = 0& d11 = 0& D12 =未定义

也许您可以伪造获取此数据的请求。我会让你分析那些名字很好的dX参数:)

答案 1 :(得分:0)

在这里,我提供了满足您要求的完整代码:

from selenium import webdriver
import csv
url="http://www.football-lineups.com/season/Real_Madrid/2013-2014"
driver=webdriver.Chrome('./chromedriver.exe')
driver.get(url)
myfile = open('demo.csv', 'wb')
wr = csv.writer(myfile, quoting=csv.QUOTE_ALL)
tr_list=driver.find_elements_by_xpath("//span[@id='sptf']/table/tbody/tr")
    for tr in tr_list:
    lst=[]
    for td in tr.find_elements_by_tag_name('td'):
        lst.append(td.text)
    wr.writerow(lst)
 driver.quit()
 myfile.close()