初学拼抢,不断获取空列表(Beginner to Scraping, keep on getting

2019-10-20 06:58发布

我决定采取在网页抓取使用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的。 该代码通常应返回第一个匹配的表(即西甲)的竞争。 换句话说,它应该返回第二行,第四列条目(存在于网络布局的随机第二列,我不知道为什么)。 然而,当我运行代码,我拿回一个空列表。 凡可能这个代码的问题呢?

Answer 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参数:)



Answer 2:

在这里,我充分的代码,满足您的要求:

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


文章来源: Beginner to Scraping, keep on getting empty lists