这个爬虫使用了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=[]#存入此列表
观察源码规律
所有大学信息都在中 存放每个大学的信息 存放具体信息(图片中截取部分太小 可以查看网页源码观察)
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()