2017-03-01 99 views
0

比方说,我有一个标签是这样的:提取号码

<div class="user-details"><a href="https://stackoverflow.com/users/619/jon-hu">Jon Hu</a> 

而且我想提取619这是用户ID或类似的东西。

我能做到这一点,这将导致如下:

question.select('.user-details a')[0] 
>>> <a href="https://stackoverflow.com/users/619/jon-hu">Jon Hu</a> 

我如何去只是提取619?它没有单独的标签,所以我想我必须使用正则表达式,这在我不擅长。

+0

是不是每次**之后都会出现“/ users /”**之后? –

+0

这不是一个“标签”。这是一个网址。 –

回答

1

您应该首先通过将元素视为字典来提取href属性值。然后,你可以申请一个正则表达式来提取用户ID:

a = question.select_one('.user-details a') 
href = a["href"] 

match = re.search(r"https://stackoverflow.com/users/(\d+)", href) 
if match: 
    user_id = match.group(1) 
    print(user_id) 
else: 
    print("No user ID found in '%s'." % href) 

其中(\d+)捕获组将捕获一个或多个连续的数字。

还请注意使用.select_one()方法代替.select()[0]

+0

我没有意识到'href'是一个可选择的归因。那么'a'类和'href'是一个属性?你为什么使用'.select_one',是因为它自动选择第一个项目? 最后,你能解释一下正则表达式吗?我认为我们想要像“[0-9]”这样的东西,但我不太了解正则表达式。有没有另一种方法来执行此任务没有正则表达式? – vashts85

+0

@ vashts85在这种情况下,'a'是一个'Tag'实例(基本上是一个元素),'href'是一个属性,可以通过将Tag作为字典来处理。 – alecxe