Python 由于错误的html代码,无法刮取数据

Python 由于错误的html代码,无法刮取数据,python,web-scraping,scrapy,lxml,Python,Web Scraping,Scrapy,Lxml,我正在尝试获取html代码中的电话号码 电话号码的末尾有两个双引号。这使得使用lxml获取数据变得困难。 有没有办法获取此属性。 当我使用span的xpath并打印结果时,它会显示,但当我将anchoe标记添加到xpath时,它会抛出一个错误。您想要: Beauty Soup是一个Python库,用于从HTML和HTML中提取数据 XML文件。它与您最喜欢的解析器一起工作,以提供惯用语法 导航、搜索和修改解析树的方法 简而言之,它处理格式不好的HTML和XML,使其更加有用。我可以通过这种方

我正在尝试获取html代码中的电话号码


电话号码的末尾有两个双引号。这使得使用lxml获取数据变得困难。 有没有办法获取此属性。 当我使用span的xpath并打印结果时,它会显示
,但当我将anchoe标记添加到xpath时,它会抛出一个错误。

您想要:

Beauty Soup是一个Python库,用于从HTML和HTML中提取数据 XML文件。它与您最喜欢的解析器一起工作,以提供惯用语法 导航、搜索和修改解析树的方法


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

我可以通过这种方式获取电话号码

>>> 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'

将Beautiful Soup与html一起使用。解析器可以解析错误的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')
body='\n\n'
从bs4导入BeautifulSoup
soup=BeautifulSoup(主体“html.parser”)
soup.find('a')。get('phone'))

因此,您的xpath失败了。。。。发布xpath和错误消息!从这个例子中,我可以成功地使用xpath
/span/a
。我尝试使用这个方法,但仍然无法得到结果。它返回一个空列表。我试图获取的网页看起来好像我发布了错误的html。我现在已经编辑过了,原始代码仍然适用于更新的HTML。我添加了适用于从web下载的页面的代码。我只运行了两次。第一次没有结果,第二次成功了。可能你所能做的就是构建代码以允许这种不可靠性。嗯,我运行了大约20次,它仍然返回一个空列表,这不是只从它找到的第一个标记中获取属性吗。例如,在本例中,它获取第一次遇到的电话属性。如果第一个没有电话属性,那么它什么也不显示。顺便说一句,这是我想要电话号码的网站。看起来我发布了错误的html。我已经编辑过了now@AdityaShekhawat使用新的html,它仍然可以工作。如果您需要在这个html字符串下获取所有内容,您可以像soup.find_all('a')一样,使用循环来迭代每个内容。
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')