使用Beautifilsoup在页面中查找特定字符串

时间:2016-01-09 04:57:02

标签: python regex bs4

我正在使用bs4,并希望从文档中返回Python函数中特定内置功能的描述,例如从此页面获取abs():

https://docs.python.org/2/library/functions.html

会回复:

  

abs(x)

     

返回数字的绝对值。参数可以是普通或长整数或浮点数。如果参数是一个复数,则返回其大小。

除了<p>元素以及我如何只获取<p>元素及其文本之外,我仍然坚持我应该寻找的东西。我知道我可以进行findAll搜索,但我想在不使用页面中的文本的情况下执行此操作(例如,好像用户事先不知道文本是什么):

import requests, bs4, re

res = requests.get('https://docs.python.org/2/library/functions.html')
res.raise_for_status()
abs_soup = bs4.BeautifulSoup(res.text)
abs_elems = abs_soup.body.findAll(text=re.compile('^abs$'))
print abs_elems
abs_desc = abs_soup.select   # this is the part Im stuck on
print abs_desc

2 个答案:

答案 0 :(得分:1)

我愿意,

>>> func = abs_soup.select('dl.function')
>>> for i in func:
    if i.select('dt#abs'):
        print 'abs\n'
        print i.select('dd')[0].text


abs

Return the absolute value of a number.  The argument may be a plain or long
integer or a floating point number.  If the argument is a complex number, its
magnitude is returned.

>>> 

用我的代码替换代码的最后两行。

    print i.find('dt').text
    print i.find('dd').text

答案 1 :(得分:1)

嗯,Python的文档将所有函数放在<dl class="function">里面,里面有<dt id="name_of_the_function">

所以我建议你使用:

import requests
from bs4 import BeautifulSoup

res = requests.get('https://docs.python.org/2/library/functions.html')
abs_soup = BeautifulSoup(res.text, "html.parser")

print(abs_soup.find('dt', {'id': 'abs'}).find_next('dd').text)

输出:

  

返回数字的绝对值。争论可能是普通的或长期的   整数或浮点数。如果参数是一个复数,那么它   返回幅度。

首先,我们使用abs_soup.find('dt', {'id': 'abs'})查找<dt>标记abs,因为它是id,然后我们使用.find_next('dd')来获取下一个<dd> {1}}标记后的{1}}标记。

最后,使用dt获取该.text标记的文字,但您也可以使用<dd>,输出相同。