做爬虫首先先分析网页找到自己需要的数据标签,再根据标签进行爬取数据
下面是我们要爬取的网页的链接
http://www.zuihaodaxue.com/zuihaodaxuepaiming2019.html
-
分析网页
-
代码获取网页代码
import requests #没有此库的pip安装 page = requests.get("http://www.zuihaodaxue.com/zuihaodaxuepaiming2019.html") #将编码同一 page.encoding = page.apparent_encoding page.text 这样就获取到了网页的源代码
-
如何处理数据
首先导入bs4库中的BeautifulSoup函数 此函数是针对html界面更加美化的显示 并且提供了一些基于html树的搜索方法便于对标签,标签的属性 以及标签的属性值 和标签里面的字符串的获取。from bs4 import BeautifulSoup soup = BeautifulSoup(page.text,"html.parser")#后面的参数表名是按什么类型的语言来进行美化的 #测试 下 获取标签对象 soup.tbody soup.tr # 获取td标签的align属性值<td align="left">89</td> soup.td.attrs['align'] # 获取89 soup.td.string tbody = soup.tbody #如果网页中有多个tbody的话考虑更换其他出现率较小的属性进行获取 因为tbody 在我要获取的网页中只有一个 trs = tbody.find_all('tr') ulist=[] #存储需要的数据 for tr in trs: tds = tr.find_all('td') ulist.append(tds[0].string,td[1].string,td[1].string)
完整源代码
"""
爬取最好大学的排名
"""
import requests
from bs4 import BeautifulSoup
import re
#获取网页的源代码
def getHTMLText(html):
try:
page = requests.get(html)#获取响应的文本
page.raise_for_status #异常处理函数
page.encoding = page.apparent_encoding#转码处理
return page.text
except:
print("爬取失败")
return None
#获取想要的信息并存储到列表中
def getTableText(text):
#存储需要的信息
ulist=[]
soup = BeautifulSoup(text,"html.parser")
tbody = soup.tbody#获取tbody的标签因为我要爬取的网页只有一个tbody所以下面我只用tbody来查找
trs = tbody.find_all('tr')
for tr in trs:
tds = tr.find_all('td')
ulist.append([tds[0].string,tds[1].string,tds[2].string])
return ulist
#chr(12288)解决了中文的空格个英文的空格大小不一样问题从而实现了文字的对齐
def printSort(ulist,num):
tplit = "{0:^10}\t{1:{3}^10}\t{2:^10}"
print(tplit.format("排名","学校名字","市区",chr(12288)))
for i in range(num):
td=ulist[i]
print(tplit.format(td[0],td[1],td[2],chr(12288)))
if __name__=="__main__":
ulist=[]#设置空列表以接收数据
url="http://www.zuihaodaxue.com/zuihaodaxuepaiming2019.html"
text = getHTMLText(url)
if text is not None:
ulist = getTableText(text)
printSort(ulist,20)
结果展示