其他分享
首页 > 其他分享> > 11.5.2 用 select()方法寻找元素

11.5.2 用 select()方法寻找元素

作者:互联网

针对你要寻找的元素,调用 method()方法,传入一个字符串作为 CSS“选择器”,
这样就可以取得 Web 页面元素。选择器就像正则表达式:它们指定了要寻找的模式,在这个例子中,是在 HTML 页面中寻找,而不是普通的文本字符串。
完整地讨论 CSS 选择器的语法超出了本书的范围(在 http://nostarch.com/ automatestuff/的资源中,有很好的选择器指南),但这里有一份选择器的简单介绍。


表 11-2 举例展示了大多数常用 CSS 选择器的模式。
表 11-2    CSS 选择器的例子
传递给 select()方法的选择器              将匹配…
soup.select('div')                                           所有名为<div>的元素
soup.select('#author')                                    带有 id 属性为 author 的元素
soup.select('.notice')                                     所有使用 CSS class 属性名为 notice 的元素
soup.select('div span')                                   所有在<div>元素之内的<span>元素
soup.select('div > span')                               所有直接在<div>元素之内的<span>元素,中间没有其他元素 
soup.select('input[name]')                             所有名为<input>,并有一个 name 属性,其值无所谓的元素 
soup.select('input[type="button"]')               所有名为<input>,并有一个 type 属性,其值为button 的元素
不同的选择器模式可以组合起来,形成复杂的匹配。例如,soup.select('p #author')
将匹配所有 id 属性为 author 的元素,只要它也在一个<p>元素之内。
select()方法将返回一个 Tag 对象的列表,这是 Beautiful  Soup 表示一个 HTML元素的方式。针对 BeautifulSoup 对象中的 HTML 
的每次匹配,列表中都有一个 Tag对象。Tag 值可以传递给 str()函数,显示它们代表的 HTML 标签。Tag 值也可以有 attrs 属性,它将该 Tag 的所有 HTML 
属性作为一个字典。利用前面的example.html文件,在交互式环境中输入以下代码:
>>>  import  bs4
>>>  exampleFile  =  open('example.html')
>>>  exampleSoup  =  bs4.BeautifulSoup(exampleFile.read())
>>>  elems  =  exampleSoup.select('#author')
>>>  type(elems)
<class  'list'>
>>>  len(elems)
1
>>>  type(elems[0])
<class  'bs4.element.Tag'>
>>>  elems[0].getText()
'Al  Sweigart'
>>>  str(elems[0])
'<span  id="author">Al  Sweigart</span>'
>>>  elems[0].attrs
{'id':  'author'}
这段代码将带有 id="author" 的元素,从示例 HTML 中找出来。我们使用 select('#author')返回一个列表,其中包含所有带有 id="author"的元素。我们将这个 
Tag 对象的列表保存在变量中 elems,len(elems)告诉我们列表中只有一个 Tag 对象,只有一次匹配。在该元素上调用 getText()方法,返回该元素的文本,或内部的 
HTML。一个元素的文本是在开始和结束标签之间的内容:在这个例子中,就是'Al Sweigart'。
将该元素传递给 str(),这将返回一个字符串,其中包含开始和结束标签,以及该元素的文本。最后,attrs 给了我们一个字典,包含该元素的属性'id',以及id 属性的值'author'。
也可以从BeautifulSoup 对象中找出<p>元素。在交互式环境中输入以下代码:

>>>  pElems  =  exampleSoup.select('p')
>>>  str(pElems[0])
'<p>Download  my  <strong>Python</strong>  book  from  <a  href="http:// inventwithpython.com">my  
website</a>.</p>'
>>>  pElems[0].getText()
'Download  my  Python  book  from  my  website.'
>>>  str(pElems[1])
'<p  class="slogan">Learn  Python  the  easy  way!</p>'
>>>  pElems[1].getText()
'Learn  Python  the  easy  way!'
>>>  str(pElems[2])
'<p>By  <span  id="author">Al  Sweigart</span></p>'
>>>  pElems[2].getText()
'By  Al  Sweigart'
这一次,select()给我们一个列表,包含 3 次匹配,我们将它保存在 pElems 中。在 pElems[0]、pElems[1]和 pElems[2]上使用 
str(),将每个元素显示为一个字符串,并在每个元素上使用 getText(),显示它的文本。
 

标签:author,11.5,元素,elems,select,选择器,pElems
来源: https://blog.csdn.net/china365love/article/details/122035716