标签: lxml

lxml基本上没什么

lxmlPython 的软件包似乎在我的系统上完全破碎了.我不确定这个问题,因为似乎所有文件都已到位.我怀疑是问题所在__init__.py,但我没有足够的练习系统来做出准确的诊断或解决问题.

以下是一些我认为有助于诊断问题的代码:

Python 2.6.4 (r264:75706, Dec  7 2009, 18:45:15) 
[GCC 4.4.1] on linux2
Type "help", "copyright", "credits" or "license" for more information.
>>> import lxml
>>> dir(lxml)
['__builtins__', '__doc__', '__file__', '__name__', '__package__', '__path__']
>>> print lxml.__path__
['/usr/lib/python2.6/dist-packages/lxml']
>>> c = open("/usr/lib/python2.6/dist-packages/lxml/__init__.py", "r")
>>> for line in c:
...     print line
... 
# this is a package



>>> c.close()
>>> import os
>>> os.system("ls /usr/lib/python2.6/dist-packages/lxml/")
builder.py      ElementInclude.py   __init__.py    sax.pyc
builder.pyc     ElementInclude.pyc  __init__.pyc       usedoctest.py
cssselect.py        _elementpath.py objectify.so       usedoctest.pyc …
Run Code Online (Sandbox Code Playgroud)

python lxml package

1
推荐指数
1
解决办法
637
查看次数

BeautifulSoup用户的html5lib/lxml示例?

我试图从BeautifulSoup中解脱出来,我喜欢但似乎(积极地)不受支持.我正在尝试使用html5lib和lxml,但我似乎无法弄清楚如何使用"find"和"findall"运算符.

通过查看html5lib的文档,我想出了一个测试程序:

import cStringIO

f = cStringIO.StringIO()
f.write("""
  <html>
    <body>
      <table>
       <tr>
          <td>one</td>
          <td>1</td>
       </tr>
       <tr>
          <td>two</td>
          <td>2</td
       </tr>
      </table>
    </body>
  </html>
  """)
f.seek(0)

import html5lib
from html5lib import treebuilders
from lxml import etree  # why?

parser = html5lib.HTMLParser(tree=treebuilders.getTreeBuilder("lxml"))
etree_document = parser.parse(f)

root = etree_document.getroot()

root.find(".//tr")
Run Code Online (Sandbox Code Playgroud)

但是这会返回None.我注意到,如果我这样做,etree.tostring(root)我会收回所有数据,但我的所有标签都以html(例如<html:table>)开头.但root.find(".//html:tr")抛出一个KeyError.

有人能让我回到正轨吗?

python lxml beautifulsoup html5lib

1
推荐指数
2
解决办法
4671
查看次数

lxml:如何从树中的给定元素创建新的Element树

我正在使用lxml来解析xml数据.我必须在各个节点划分xml,并将每个子树中的数据写入单独的文件.lxml在_ElementTree类中提供了write()方法,该方法可以方便地将解析树表示的xml写入文件.

因此,如果我可以通过给定节点的子树的根节点生成树(_ElementTree对象),那么我可以轻松地使用write()方法.怎么做.

python lxml

1
推荐指数
1
解决办法
3649
查看次数

足球统计Python刮板

我希望将本赛季的一些休斯顿迪纳摩队的统计数据写成CSV,然后用R来显示这些数据.

如何使用lxml刮掉tr和td元素?我应该看一个更容易的选择器吗?

python lxml r web-scraping

1
推荐指数
1
解决办法
1042
查看次数

快速查找链接:正则表达式与lxml

我正在尝试构建一个快速的Web爬虫,因此,我需要一种有效的方法来查找页面上的所有链接.快速XML/HTML解析器(如lxml)和使用正则表达式匹配之间的性能比较是什么?

python regex lxml web-crawler html-parsing

1
推荐指数
1
解决办法
1031
查看次数

lxml-如何获取HtmlElement的xpath?

使用XML etree,可以执行以下操作:

etree.getpath(element

如何用HTML而不是XML来做同样的事情?

html python xml xpath lxml

1
推荐指数
1
解决办法
1767
查看次数

(不是这样)将子节点的高级xsl转换为列表

输入:

<root>
    <aa><aaa/><bbb/><ccc/><ddd/><eee/></aa>
    <bb><ggg/></bb>
</root>
Run Code Online (Sandbox Code Playgroud)

理想的输出:

<root>
    <aa>aaa<aa>
    <aa>bbb<aa>
    <aa>ccc<aa>
    <aa>ddd<aa>
    <aa>eee<aa>
    <bb>ggg</bb>
</root>
Run Code Online (Sandbox Code Playgroud)

我想出了简单的xslt,但它只是正确处理,不会创建标签列表.

XSLT:

<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
    <xsl:output method="xml" indent="yes" omit-xml-declaration="yes"/>
    <xsl:template match="@*|node()">
        <xsl:copy>
            <xsl:apply-templates select="@*|node()"/>
        </xsl:copy>
    </xsl:template>
    <!-- select all elements that doesn't have any child nodes (elements or text etc) -->
    <xsl:template match="//*[not(node())]">
        <xsl:value-of select="name()"/>
    </xsl:template>   
</xsl:stylesheet>
Run Code Online (Sandbox Code Playgroud)

输出:

<root>
        <aa>aaabbbcccdddeee</aa>
        <bb>ggg</bb>
</root>
Run Code Online (Sandbox Code Playgroud)

PS它是python脚本的一部分.是否可以在python脚本中使用xslt进行此类转换?或者使用简单的xpath和python逻辑的python解决方案会更好吗?

python xml xslt xpath lxml

1
推荐指数
1
解决办法
76
查看次数

使用xpath [Python]刮擦新的ESPN网站

我正试图抓住新的ESPN NBA记分牌.这是一个简单的脚本,应该在4/5/15返回所有游戏的开始时间:

import requests
import lxml.html
from lxml.cssselect import CSSSelector

doc =  lxml.html.fromstring(requests.get('http://scores.espn.go.com/nba/scoreboard?date=20150405').text)

#xpath
print doc.xpath("//title/text()") #print page title
print doc.xpath("//span/@time")
print doc.xpath("//span[@class='time']")
print doc.xpath("//span[@class='time']/text()")

#CCS Selector
sel = CSSSelector('span.time')
for i in sel(doc):
    print i.text
Run Code Online (Sandbox Code Playgroud)

它不返回任何内容,但页面标题:

['NBA Basketball Scores - NBA Scoreboard - ESPN']
[]
[]
[]
Run Code Online (Sandbox Code Playgroud)

有人可以帮忙吗?谢谢

python xpath lxml web-scraping lxml.html

1
推荐指数
1
解决办法
1563
查看次数

可以使用lxml检查xml文件是否格式正确,还是功能太强大?

可以使用lxml检查xml是否格式正确或功能是否强大?例如,即使xml格式不正确,它似乎也能够解析。检查xml文件格式是否正确的最简单方法是什么?

xml lxml python-3.x

1
推荐指数
1
解决办法
1512
查看次数

强制xpath返回一个字符串lxml

我正在使用lxml,我有一个来自Google学术搜索的报废页面.以下是一个最小的工作示例和我尝试过的事情.

In [56]: seed = "https://scholar.google.com/citations?view_op=search_authors&hl=en&mauthors=label:machine_learning"

In [60]: page = urllib2.urlopen(seed).read()

In [63]: tree = html.fromstring(page)

In [64]: xpath = '(/html/body/div[1]/div[4]/div[2]/div/span/button[2]/@onclick)[1]'

In [65]: tree.xpath(xpath)
#first element returns as list
Out[65]: ["window.location='/citations?view_op\\x3dsearch_authors\\x26hl\\x3den\\x26oe\\x3dASCII\\x26mauthors\\x3dlabel:machine_learning\\x26after_author\\x3dVCoCALPY_v8J\\x26astart\\x3d10'"]         

In [66]: xpath = '(/html/body/div[1]/div[4]/div[2]/div/span/button[2]/@onclick)[2]'

#there is no second element
In [67]: tree.xpath(xpath)
Out[67]: []     

In [70]: xpath = '(/html/body/div[1]/div[4]/div[2]/div/span/button[2]/@onclick)'

#The list contains only one element
In [71]: tree.xpath(xpath)
Out[71]: ["window.location='/citations?view_op\\x3dsearch_authors\\x26hl\\x3den\\x26oe\\x3dASCII\\x26mauthors\\x3dlabel:machine_learning\\x26after_author\\x3dVCoCALPY_v8J\\x26astart\\x3d10'"]         
Run Code Online (Sandbox Code Playgroud)

根据此处的文档,返回值可以是智能字符串,但我无法从xpath函数获取字符串输出.如何编写xpath以便从xpath获取字符串输出

python xpath lxml

1
推荐指数
1
解决办法
1829
查看次数