pyhton网络爬虫之实例爬虫

实力爬中国大学排名

有人的地方就有江湖,有大学的地方就有排名
我们要写一个程序 它能通过这个链接爬取大学排名,并能将大学排名屏幕输出
也就是说输入:url链接
输出:排名 大学名称 总分
技术路线:用到requests库和bs4库
定向爬虫:仅对所给的url进行爬取,而不进行扩展,爬取其他的url链接

程序的结构设计:

1.从网络上获取大学排名的网页内容-------------------getHTMLText()

2.提取网页内容中的信息到合适的数据结构-------------------fillUnivList()

3.利用数据结构展示并输出结果-------------------------printUnivList()


实例编写:

#由于实现了网络访问请求,所以要导入requests库 BeautifulSoup库
import requests
import BeautifulSoup 
#刚才引入了三个函数用来对应三个步骤,分别是getHTMLText(),fillUnivList()以及printUnivList()函数,下面我们定义一下这三个函数:

def getHTMLText(url):  #输入是需要获取的url信息,输出是返回的url内容
    return""

def fillUnivList(ulist,html):   #需要把获取的html页面放到list列表中,这个列表我们记作ulist
    pass

def printUnivList(ulist,num):  #把列表的信息打印出来,还多了一个参数num,也就是你需要将列表中的多少个元素打印出来
    print('Suc'+str(num))


def main():      #还需要定义一个主函数
     
    uinfo=[]   #将大学信息放到一个列表中 叫做uinfo
    url="http://www.zuihaodaxue.com/zuihaodaxuepaiming2017.html"     #给出大学排名的url链接
    #下面分别调取三个函数
    html=getHTMLText(url)   #将url转换成html页面
    fillUnivList(uinfo,html)     #将html提取后的信息放在uinfo用户信息列表中
    printUnivList(uinfo,20)    #然后打印大学信息
main()


下面我们将三个定义的函数内容填进去,使得程序可以正确运行


首先来看一下 getHtmlText()  它主要是将url信息从网络上爬取下来,并且将其中的html页面返回给其他函数

def getHTMLText(url):

    try:

        r=requests.get(url,timeout=30)

        r.raise_for_status()

        r.encoding=r.apparent_encoding()

        return r.text

 except:

     return ""


pyhton网络爬虫之实例爬虫_第1张图片


以上

接下来看一下fillUnivList()函数 是根据html内容提取最关键的信息,我们观察一下该网页的源代码就会发现所有大学的信息都在标签tbody里面 在tr标签中包含了当前大学的所有数据信息,而且每个tr标签中的信息又被td标签包围,首先我们需要在html页面中获取tbody 标签获取所有大学的信息,然后再tbody标签中解析tr标签获取每一个大学的信息,再把tr标签中的td标签找到,把每一个大学的相关的数据参数找到写到对应的ulist列表中,我们可以用我们前次课学到的遍历以及查找方法进行获得

def fillUnivList(ulist,html):

   soup=BeautifulSoup(html,"html.parser")

  for tr in soup.find('tbody').children:   #我们利用find函数查找tbody标签,并且把它的孩子做一个遍历,这里每一个tr 就是一所大学对应的信息,可是tbody标签中的儿子标签中的有可能是字符串类型的 然后我们需要的大学信息是tr标签里面,是标签类型的,我们需要过滤掉非标签类型的字符串类型,用到isinstance来对类型做一个判断

def fillUnivList(ulist,html):

   soup=BeautifulSoup(html,"html.parser")

  for tr in soup.find('tbody').children:      #首先解析html代码中的tbody标签,然后在tbody标签中找到每一所大学对应的tr标签,并且在tr标签中找到所对应的td标签,把我们需要                                                                       的td标签的三个值加入到列表中

    if  tr isinstance(tr,bs4.element.Tag):    #(如果不是bs4库定义的tag类型就会被过滤掉)

           tds=tr('td')     #把tr标签里的所有td标签存成tds

           ulist.append([tds[0].string,tds[1]string,tds[2].string])




def printUnivList(ulist,num):

 print("{:^10}\t{:^6}\t{:^10}'.format('排名',’大学名称‘,'总分'))

for in range num: 

    u=ulist[i]                 #用print函数实现了对表头的打印 接下来打印大学的其他信息,我们知道大学信息保存在ulist中,我们想输出的学校数量用num来表示

    print("{:^10}\t{:^6}\t{:^10}'.format(u[0],u[1],u[2]))


print('Suc'+str(num))





**********************今天先到这吧,累死了  我要回去睡觉******************************


你可能感兴趣的:(pyhton网络爬虫之实例爬虫)