小编som*_*off的帖子

使用lxml.html解析HTML时,相当于InnerHTML

我正在使用lxml.html编写一个脚本来解析网页.我在我的时间里做了很多BeautifulSoup,但由于它的速度,我现在正在尝试lxml.

我想知道库中最明智的方法是做相当于Javascript的InnerHtml - 即检索或设置标签的完整内容.

<body>
<h1>A title</h1>
<p>Some text</p>
</body>
Run Code Online (Sandbox Code Playgroud)

因此InnerHtml是:

<h1>A title</h1>
<p>Some text</p>
Run Code Online (Sandbox Code Playgroud)

我可以使用黑客(转换为字符串/正则表达式等)来做到这一点,但我假设有一个正确的方法来使用由于不熟悉我缺少的库.谢谢你的帮助.

编辑:感谢pobk如此快速有效地向我展示了这方面的方法.对于任何尝试相同的人,这是我最终得到的:

from lxml import html
from cStringIO import StringIO
t = html.parse(StringIO(
"""<body>
<h1>A title</h1>
<p>Some text</p>
Untagged text
<p>
Unclosed p tag
</body>"""))
root = t.getroot()
body = root.body
print (element.text or '') + ''.join([html.tostring(child) for child in body.iterdescendants()])
Run Code Online (Sandbox Code Playgroud)

请注意,lxml.html解析器将修复未关闭的标记,因此请注意这是否存在问题.

python parsing lxml

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

在SQLAlchemy中查询多对多关系

我有一个非常标准的多对多关系,类似于ORM教程中的Blog - > Keyword关系.

我想查询关键字列表,返回其中任何一个匹配的博客帖子.但是,如果有一个简单的方法可以解决这个问题我就无法解决.如果我添加多个过滤器,反复做

.filter(Blog.keywords.any(Keyword.name == 'keyword')) 
Run Code Online (Sandbox Code Playgroud)

然后我得到一个'AND'/'EXISTS'查询,这样只返回包含所有这些关键字的帖子.是否有一种简单的方法可以将此作为"OR"查询,或者我是否需要使用join().

谢谢你的帮助; 我无法弄清楚我是否遗漏了什么.

python sqlalchemy

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

在lxml中迭代时编辑树

我正在使用lxml来解析html并对其进行编辑以生成新文档.本质上,我试图使用它有点像javascript DOM - 我知道这不是真正的预期用途,但到目前为止它的大部分工作都很好.

目前,我使用iterdescendants()获取可迭代的元素列表,然后依次处理每个元素.

但是,如果在迭代期间删除了一个元素,则仍会考虑其子元素,因为删除不会像您期望的那样影响迭代.为了得到我想要的结果,这个hack有效:

from lxml.html import fromstring, tostring
import urllib2
import re

html = '''
<html>
<head>
</head>

<body>
    <div>
        <p class="unwanted">This content should go</p>
        <p class="fine">This content should stay</p>
    </div>

    <div id = "second" class="unwanted">
        <p class = "alreadydead">This content should not be looked at</p>
        <p class = "alreadydead">Nor should this</>
        <div class="alreadydead">
            <p class="alreadydead">Still dead</p>
        </div>
    </div>

    <div>
        <p class="yeswanted">This content should also stay</p>
    </div>
</body>
Run Code Online (Sandbox Code Playgroud)

for element in allElements:
   s = "%s%s" % (element.get('class', …
Run Code Online (Sandbox Code Playgroud)

python parsing lxml html-parsing

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

如何在Deform/Colander中使用错误消息进行简单的值检查

我正在Deform/Colander中实现一个简单的'tick to agree条款和条件框'.

因此,我只想检查该复选框是否有错误信息"你必须同意T&C".

我明白我可以用:

colander.OneOf([True]) 
Run Code Online (Sandbox Code Playgroud)

确保勾选方框.但是,OneOf不允许自定义错误消息.这样做的正确方法是什么?

python pyramid deform colander

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

使用SUDS时添加xsi:type和envelope命名空间

我需要与SOAP服务进行交互,并且这样做很麻烦; 我真的很感激任何指针.原始错误消息是:

org.apache.axis2.databinding.ADBException: Any type element type has not been given
Run Code Online (Sandbox Code Playgroud)

经过一番研究,事实证明,这是SUDS与服务器之间的分歧,如何应对

type="xsd:anyType"
Run Code Online (Sandbox Code Playgroud)

在有问题的元素上.

我已经确认使用SOAPUI,经过建议,可以通过以下步骤解决问题:

  1. 将xsi:type ="xsd:string"添加到导致问题的每个元素
  2. 将xmlns:xsd ="http://www.w3.org/2001/XMLSchema"添加到SOAP信封中

那么,SUDS目前在哪里这样做:

<SOAP-ENV:Envelope ... xmlns:SOAP-ENV="http://schemas.xmlsoap.org/soap/envelope/">
<ns3:Body>
  <ns0:method>
     <parameter>
        <values>
           <table>
              <key>EMAIL_ADDRESS</key>
              <value>example@example.org</value>
           </table>
        </values>
     </parameter>
  </ns0:method>
Run Code Online (Sandbox Code Playgroud)

它应该产生这个:

<SOAP-ENV:Envelope xmlns:xsd="http://www.w3.org/2001/XMLSchema" ... xmlns:SOAP-ENV="http://schemas.xmlsoap.org/soap/envelope/">

  <ns3:Body>
  <ns0:method>
     ...
     <parameter>
        <values>
           <table>
              <key xsi:type="xsd:string">EMAIL_ADDRESS</key>
              <value xsi:type="xsd:string">example@example.org</value>
           </table>
        </values>
     </parameter>
  </ns0:method>
Run Code Online (Sandbox Code Playgroud)

有没有正确的方法来做到这一点?我已经看到了使用ImportDoctor或MessagePlugins的建议,但还没有真正了解如何实现所需的效果.

python xml soap wsdl suds

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

标签 统计

python ×5

lxml ×2

parsing ×2

colander ×1

deform ×1

html-parsing ×1

pyramid ×1

soap ×1

sqlalchemy ×1

suds ×1

wsdl ×1

xml ×1