python爬虫入门之爬取大学排名

这个爬虫使用了requests和BeautifulSoup

import requests

import bs4

from bs4 import BeautifulSoup

获取页面源码

url='http://www.zuihaodaxue.com/zuihaodaxuepaiming2016.html'

r=requests.get(url)

r.status_code返回值为200 可以访问

r.encoding='utf-8'#改变编码格式

demo=r.text

做一锅汤

soup=BeautifulSoup(demo,'html.parser')

将目的信息存入一个列表中

ulist=[]#存入此列表

观察源码规律


所有大学信息都在<tbody>中 <tr>存放每个大学的信息 <td>存放具体信息(图片中截取部分太小 可以查看网页源码观察)

for tr in soup.find('tbody').children:

if isinstance(tr,bs4.element.Tag):#tbody的children中可能存在string类型 判断一下是否属于tag

tds=tr('td')

ulist.append([td[0].string,td[1].string,td[2].string])#append中的参数是list类型 注意[]  td[0]表示第一个td 标签

ulist中已经存好了大学信息

输出前二十个大学信息

先输出一个表头

print('{:^10}{:^6}\t{:^10}'.format('大学排名','大学名称','所在省份'))

for循环输出信息

for i in range(num):
        u=ulist[i]
        print('{:^10}\t{:^6}\t{:^10}'.format(u[0],u[1],u[2]))

###关于format


输出后的内容


此时爬取大学信息这个爬虫就完成了

图中输出的格式不太规整 没有对齐 完善一下

输出时:

print('{0:^10}\t{1:{3}^10}\t{2:^10}'.format('大学排名','大学名称','所在省份',chr(12288)))#第二个{}增加了{3}宽度变为了10 表示如果宽度不够用format中的第四个参数填充
#chr(12288)表示中文字符空格    :前的0 1 2表示与相应的槽对应

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

完善之后的输出为


格式规范了很多

代码

import requests
from bs4 import BeautifulSoup
import bs4
def getHTMLText(url):
    try:
        r=requests.get(url)
        r.encoding='utf-8'
        r.raise_for_status()
        return r.text
    except:
        return''
def Getlist(ulist,demo):
    soup=BeautifulSoup(demo,'html.parser')
    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[2].string])
            #return ulist


def printlist(ulist,num):
    print('{0:^10}\t{1:{3}^10}\t{2:^10}'.format('大学排名','大学名称','所在省份',chr(12288)))
    for i in range(num):
        u=ulist[i]
        print('{0:^10}\t{1:{3}^10}\t{2:^10}'.format(u[0],u[1],u[2],chr(12288)))


def main():
    utext=[]
    url='http://www.zuihaodaxue.com/zuihaodaxuepaiming2016.html'
    demo=getHTMLText(url)
    Getlist(utext,demo)
    printlist(utext,20)


main()

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值