无法获取表lxml python的文本内容

时间:2015-06-18 02:26:47

标签: python web-scraping lxml

我试图废弃乐透的结果,最后的目标是获得最常见的3位数,来自乐透的5位数字。我使用lxml与python来获取数字,但我不能打印实际数字,o得到xpath并尝试使用/ text()但由于某种原因我不断得到一个空列表。这就是我用来获取数字。有什么建议?抱歉英文不好。

from lxml import html
import requests

page=requests.get('http://www.loteriadecordoba.com.ar/juegos/index/Loter%C3%ADa+de+C%C3%B3rdoba-18.html')

tree = html.fromstring(page.text)

numero= tree.xpath('/html/body/div[3]/div[1]/div/div[1]/div[1]/div/div[4]/div/div/table/tbody/tr[3]/td/table/tbody/tr[2]/td[3]/text()')

print numero

经过多次阅读后,我最终得到了这个

import sys  
from PyQt4.QtGui import *  
from PyQt4.QtCore import *  
from PyQt4.QtWebKit import *  
from lxml import html 
import time

class Render(QWebPage):  
  def __init__(self, url):  
    self.app = QApplication(sys.argv)  
    QWebPage.__init__(self)  
    self.loadFinished.connect(self._loadFinished)  
    self.mainFrame().load(QUrl(url))  
    self.app.exec_()  

  def _loadFinished(self, result):  
    self.frame = self.mainFrame()  
    self.app.quit()  
url = 'http://www.loteriadecordoba.com.ar/contenidos/juegos/0-132.html?xSorteo='
for x in range(4523 , 4525):

    url2=url+str(x)

    r = Render(url2)
    time.sleep(5)
    result = r.frame.toHtml()
    #Converting QString to Ascii for lxml to process
    formatted_result = str(result.toAscii())
    tree = html.fromstring(formatted_result)
    num= tree.xpath('//div[@class="sorteo"]/table/tbody/tr[3]/td/table/tbody/tr[2]/td/text()')
    num2= tree.xpath('//div[@class="sorteo"]/table/tbody/tr[4]/td/table/tbody/tr/td/text()')
    lista = num+num2
    sorteo =open('sorteo', 'w')
    for item in lista:
        sorteo.write("%s\n" % item)

    sorteo.close()

我使用pyQt4渲染页面用于读取数字,它在单个页面上运行完美,但是当我在for循环中运行它时会不断崩溃并发布错误

X Error: RenderBadGlyphSet (invalid GlyphSet parameter) 145
  Extension:    139 (RENDER)
  Minor opcode: 19 (RenderFreeGlyphSet)
  Resource id:  0x4800009

现在我真的不知道:(。有人可以提出想法吗?

1 个答案:

答案 0 :(得分:0)

该页面的抽奖结果内容不存在于静态HTML中,它是使用Javascript(我认为是JQuery)动态生成/检索的。因此,您无法使用lxml.html等静态HTML解析器从页面中删除 e 数字。

搜索另一种方法,或许Selenium可能有用。