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) 我试图从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.
有人能让我回到正轨吗?
我正在使用lxml来解析xml数据.我必须在各个节点划分xml,并将每个子树中的数据写入单独的文件.lxml在_ElementTree类中提供了write()方法,该方法可以方便地将解析树表示的xml写入文件.
因此,如果我可以通过给定节点的子树的根节点生成树(_ElementTree对象),那么我可以轻松地使用write()方法.怎么做.
我希望将本赛季的一些休斯顿迪纳摩队的统计数据写成CSV,然后用R来显示这些数据.
如何使用lxml刮掉tr和td元素?我应该看一个更容易的选择器吗?
我正在尝试构建一个快速的Web爬虫,因此,我需要一种有效的方法来查找页面上的所有链接.快速XML/HTML解析器(如lxml)和使用正则表达式匹配之间的性能比较是什么?
使用XML etree,可以执行以下操作:
etree.getpath(element
如何用HTML而不是XML来做同样的事情?
输入:
<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解决方案会更好吗?
我正试图抓住新的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)
有人可以帮忙吗?谢谢
可以使用lxml检查xml是否格式正确或功能是否强大?例如,即使xml格式不正确,它似乎也能够解析。检查xml文件格式是否正确的最简单方法是什么?
我正在使用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获取字符串输出
lxml ×10
python ×9
xpath ×4
xml ×3
web-scraping ×2
html ×1
html-parsing ×1
html5lib ×1
lxml.html ×1
package ×1
python-3.x ×1
r ×1
regex ×1
web-crawler ×1
xslt ×1