XPATH - / a / text(),无法提取电子邮件地址(文本)

时间:2018-06-04 07:58:28

标签: email xpath scrapy

我有简单的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&#160;protected]</span></a></td>

我将从@href中提取。

2 个答案:

答案 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表达式。