2017-04-24 52 views
0

我试图获取电话号码的HTML代码数据无法凑由于越野车的html代码

<span> <a class="click-to-call-link text-gray-light trackMe" href="javascript:;" objid="1236535" compid="clickToCall_profile_directory_sponsored" phone="(617) 981-6551"">Click to Call </a> </span>

的电话号码的结尾处有两个双引号。这使得使用lxml很难获取。 有没有办法获得这个属性。 当我使用span的xpath并打印结果时,它显示<Element span at 0x3750060>,但是当我将锚标签添加到xpath时,它会引发错误。

+0

所以,你有一个xpath失败....发布xpath和错误消息!从这个例子中,我可以成功执行xpath'/ span/a'。 – tdelaney

回答

0

你想Beautiful Soup

美丽的汤是一个Python库提取数据进行HTML和XML 文件。它可与您最喜爱的解析器一起工作,以提供导航,搜索和修改解析树的惯用方法 。

简而言之,它处理格式不正确的HTML和XML,并使其更有用。

0

我能以这种方式获得电话号码。

>>> HTML 
'<span><a class="click-to-call-link text-gray-light trackMe" href="javascript:;" objid="1236535" compid="clickToCall_profile_directory_sponsored" phone="(617) 981-6551" "="">Click to Call</a></span>' 
>>> from lxml import etree 
>>> parser = etree.HTMLParser() 
>>> tree = etree.fromstring(HTML, parser=parser) 
>>> link = tree.xpath('.//a') 
>>> link 
[<Element a at 0x5a15e08>] 
>>> link[0].attrib['phone'] 
'(617) 981-6551' 

您可以使用此代码从整个页面获取电话号码。唯一棘手的部分是xpath,并记住xpath将返回一个列表。

>>> import requests 
>>> from lxml import etree 
>>> page = requests.get('https://www.houzz.com/pro/charlesrose/charles-rose-architects-inc').text 
>>> parser = etree.HTMLParser() 
>>> tree = etree.fromstring(page, parser=parser) 
>>> links = tree.xpath('.//a[@class="click-to-call-link text-gray-light trackMe"]') 
>>> links[0].attrib['phone'] 
'(617) 981-6551' 
+0

我试过使用这种方法,我仍然无法得到结果。它返回一个空列表。我试图得到的网页是https://www.houzz.com/pro/charlesrose/charles-rose-architects-inc –

+0

看起来像我发布了错误的HTML。我现在编辑它 –

+0

原始代码仍然适用于更新的HTML。我添加了适用于从网络下载的页面的代码。 –

0

使用美丽的汤与html.parser可以解析错误的html字符串。

body = '<span>\n<a class="click-to-call-link text-gray-light trackMe" href="javascript:;" objid="1236535" compid="clickToCall_profile_directory_sponsored" phone="(617) 981-6551" "="">Click to Call\n</a>\n</span>' 
from bs4 import BeautifulSoup 
soup = BeautifulSoup(body, 'html.parser') 
soup.find('a').get('phone')