我正在尝试获取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添加anchoe标签时会抛出错误。
答案 0 :(得分:0)
您想要Beautiful Soup:
Beautiful Soup是一个用于从HTML和HTML中提取数据的Python库 XML文件。它适用于您最喜欢的解析器,以提供惯用语 导航,搜索和修改解析树的方法。
简而言之,它处理格式不正确的HTML和XML,并使其更有用。
答案 1 :(得分: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'
答案 2 :(得分: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')