初学爬虫,总是得到空列表

1 投票
2 回答
585 浏览
提问于 2025-04-18 09:25

我决定尝试用Python来做网页抓取,使用的是lxml和requests这两个库。我想学习抓取的网页是: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浏览器复制过来的。正常情况下,这段代码应该能返回表格中第一场比赛的比赛类型(也就是西甲联赛)。换句话说,它应该返回第二行第四列的内容(网页布局中有一列随机的第二列,我也不知道为什么会有)。但是,当我运行这段代码时,得到的是一个空列表。这段代码可能出错的地方在哪里呢?

2 个回答

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()
1

如果你查看这个页面的数据来源,你会发现里面并没有阵容表。这个阵容表是在页面加载后通过AJAX技术获取的,所以你不能仅仅通过访问http://www.football-lineups.com/season/Real_Madrid/2013-2014来获取,因为页面中的JavaScript不会被执行,因此AJAX请求也不会运行。

这个AJAX请求的具体信息如下:

也许你可以伪造这个请求来获取这些数据。我就不多说了,你可以自己分析一下这些命名为dX的参数是什么意思 :)

撰写回答