python——爬虫学习——基于bs4库的HTML内容查找方法-(3)

find_all()

find_all( name , attrs , recursive , string , **kwargs )

返回一个列表类型,存储查找的结果

name : 对标签名称的检索字符串:

>>> import requests
>>> r=requests.get("http://python123.io/ws/demo.html")
>>> demo = r.text
>>> soup = BeautifulSoup(demo,'html.parser')

>>> soup.find_all('a')
["py1" href="http://www.icourse163.org/course/BIT-268001" id="link1">Basic Python, "py2" href="http://www.icourse163.org/course/BIT-1001870001" id="link2">Advanced Python]
>>> soup.find_all(['a','b'])
[The demo python introduces several python courses., "py1" href="http://www.icourse1
63.org/course/BIT-268001" id="link1">Basic Python, "py2" href="http://www.icourse163.or
g/course/BIT-1001870001" id="link2">Advanced Python]

>>> for tag in soup.find_all(True):
...     print(tag.name)
...
html
head
title
body
p
b
p
a
a
>>> import re
>>> for tag in soup.find_all(re.compile('b')):
...     print(tag.name)
...
body
b

attrs: 对标签属性值的检索字符串,可标注属性检索:

>>> soup.find_all(id='link1')
[class="py1" href="http://www.icourse163.org/course/BIT-268001" id="link1">Basic Python]
>>> soup.find_all(id='link')
[]
>>> soup.find_all(id=re.compile('link'))
[class="py1" href="http://www.icourse163.org/course/BIT-268001" id="link1">Basic Python, "py2" href="http://www.icourse163.org/course/BIT-1001870001" id="link2">Advanced Python]

recursive: 是否对子孙全部检索,默认True:

>>> soup.find_all('a',recursive=False)
[]

string: <>…

>>> soup.find_all(string='Advanced Python')
[u'Advanced Python']
>>> soup.find_all(string='Advanced')
[]
>>> import re
>>> soup.find_all(string=re.compile('Advanced'))
[u'Advanced Python']

扩展方法

方法 说明
<>.find() 搜索且只返回一个结果,同.find_all()参数
<>.find_parents() 在先辈节点中搜索,返回列表类型,同.find_all()参数
<>.find_parent() 在先辈节点中返回一个结果,同.find()参数
<>.find_next_siblings() 在后续平行节点中搜索,返回列表类型,同.find_all()参数
<>.find_next_sibling() 在后续平行节点中返回一个结果,同.find()参数
<>.find_previous_siblings() 在前序平行节点中搜索,返回列表类型,同.find_all()参数
<>.find_previous_sibling() 在前序平行节点中返回一个结果,同.find()参数

中国大学排名定向爬虫

代码:

# -*- coding: cp936 -*-
import requests
import bs4
from bs4 import BeautifulSoup
ulist = []
r = requests.get('http://www.zuihaodaxue.cn/zuihaodaxuepaiming2016.html', timeout=30)
r.raise_for_status()
r.encoding = r.apparent_encoding
html = r.text
soup = BeautifulSoup(html, "html.parser")
print("%-10s\t%-20s\t%-10s"%("排名","学校","总分"))
for tr in soup.find('tbody').children:
    if isinstance(tr, bs4.element.Tag):
        tds = tr('td')
        ulist.append([tds[0].string, tds[1].string, tds[3].string])
for i in range (100):
    u=ulist[i]
    print("%-10s\t%-20s\t%-10s"%(u[0],u[1],u[2]))

运行情况:

排名          学校                      总分      
1           清华大学                    95.9      
2           北京大学                    82.6      
3           浙江大学                    80        
4           上海交通大学                  78.7      
5           复旦大学                    70.9      
6           南京大学                    66.1      
7           中国科学技术大学            65.5      
8           哈尔滨工业大学                 63.5      
9           华中科技大学                  62.9      
10          中山大学                    62.1      
11          东南大学                    61.4      
12          天津大学                    60.8      
13          同济大学                    59.8      
14          北京航空航天大学            59.6      
15          四川大学                    59.4      
16          武汉大学                    59.1      
17          西安交通大学                  58.9      
18          南开大学                    58.3      
19          大连理工大学                  56.9      
20          山东大学                    56.3      
21          华南理工大学                  56.2      
22          吉林大学                    55.7      
23          厦门大学                    55.4      
24          北京师范大学                  54.6      
25          北京理工大学                  53.9      
26          苏州大学                    53.1      
27          中南大学                    52.5      
28          北京科技大学                  52.2      
29          南京航空航天大学           52        
30          华东理工大学                  51.9      
31          湖南大学                    51.4      
31          中国人民大学                  51.4      
33          重庆大学                    50.9      
34          华东师范大学                  50.6      
35          中国地质大学(武汉)        50.4      
36          西北工业大学                  50.3      
36          电子科技大学                  50.3      
38          中国农业大学                  48.9      
38          中国石油大学(北京)        48.9      
40          北京化工大学                  48.6      
40          北京交通大学                  48.6      
42          南京理工大学                  48.5      
43          华北电力大学(北京)        48.2      
44          北京邮电大学                  48.1      
45          西安电子科技大学            47.6      
46          武汉理工大学                  47.4      
46          上海大学                    47.4      
48          华中师范大学                  47.3      
48          东北大学                    47.3      
50          东北师范大学                  47.1      
51          东华大学                    47        
52          福州大学                    46.7      
53          首都医科大学                  46.5      
53          兰州大学                    46.5      
55          江南大学                    46.3      
56          合肥工业大学                  45.6      
57          南京医科大学                  45.5      
58          中国海洋大学                  45.3      
59          中国矿业大学                  45.2      
60          暨南大学                    44.6      
61          西南大学                    44.4      
62          南京农业大学                  44.3      
62          河海大学                    44.3      
64          哈尔滨工程大学                 44.2      
65          华中农业大学                  44        
66          中国药科大学                  43.7      
67          西南交通大学                  43.6      
68          天津医科大学                  43.3      
69          西北农林科技大学            42.8      
69          南京师范大学                  42.8      
71          西北大学                    42.5      
72          江苏大学                    42.3      
73          浙江工业大学                  42.1      
74          北京林业大学                  42        
75          南京邮电大学                  41.9      
75          南方医科大学                  41.9      
75          陕西师范大学                  41.9      
75          南京工业大学                  41.9      
79          北京工业大学                  41.8      
80          燕山大学                    41.5      
81          华南师范大学                  41.4      
82          河北工业大学                  41.1      
83          北京中医药大学                 41        
83          浙江师范大学                  41        
83          汕头大学                    41        
86          长安大学                    40.9      
87          沈阳药科大学                  40.8      
87          湘潭大学                    40.8      
89          大连海事大学                  40.6      
90          浙江理工大学                  40.5      
91          杭州师范大学                  40.4      
91          大连医科大学                  40.4      
93          河北大学                    40.3      
94          杭州电子科技大学            40.2      
94          中央民族大学                  40.2      
96          安徽大学                    40        
97          山西大学                    39.4      
97          宁波大学                    39.4      
97          石家庄铁道大学                 39.4      
100         扬州大学                    39.3      

你可能感兴趣的:(python)