我有简单的HTML文件,其中包含用户名和指向其子页面的链接:
<a href="/user/someUserName@domain.com">someUserName@domain.com</a>
<a href="/user/someUserName">someUserName</a>
我用
xpath('.//a/text()').extract_first()
以纯文本格式提取用户名。
当用户以电子邮件的形式指定用户名时出现问题(请参阅第一个示例) - 在这种情况下返回空对象。
编辑:我刚刚注意到html最近发生了变化,我还没有重新检查:
<td><a href="/user/someUserName@domain.com"><span class="__cf_email__" data-cfemail="3f4d565c544c5e514bwer4rwre58525e5653115c5052">[email protected]</span></a></td>
我将从@href中提取。
答案 0 :(得分:0)
我使用了以下代码: -
import scrapy
inputString = '''<xmlData>
<a href="/user/someUserName@domain.com">someUserName@domain.com</a>
<a href="/user/someUserName">someUserName</a>
</xmlData>'''
print scrapy.selector.Selector(text=inputString).xpath('.//a/text()').extract_first()
输出: -
someUserName@domain.com
你能粘贴完整的python代码吗?因为,xpath代码似乎正常工作: -
scrapy.selector.Selector(text=inputString).xpath('.//a/text()').extract_first()
答案 1 :(得分:0)
通常不鼓励获取元素的文本节点子元素(使用text()
),这完全是这里演示的原因。使用<a>content</a>
,您将获得&#34;内容&#34;,<a><span>content</span><a>
您将得到任何内容,<a>h<sub>2</sub>o</a>
您将获得两个文本节点,&#34; h&#34;和&#34; o&#34;。
使用string()来获取字符串值。字符串值包含任何深度的所有后代文本节点的连接内容。 (&#34;内容&#34;,&#34;内容&#34;和&#34; h2o&#34;在这三个例子中)。
唯一的保留是我不了解Scrapy API所以我不知道它如何处理返回字符串而不是节点的XPath表达式。