初学爬虫,总是得到空列表
我决定尝试用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请求的具体信息如下:
- 网址: 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=undefined
也许你可以伪造这个请求来获取这些数据。我就不多说了,你可以自己分析一下这些命名为dX的参数是什么意思 :)