美文网首页菜鸟学Python
python_爬虫大学排行

python_爬虫大学排行

作者: 两点半的杂货铺 | 来源:发表于2017-08-12 14:57 被阅读23次

一、作者感悟

最近正在调整学习方向,不知道从哪入手,整天晕沉沉的总觉得要的学的东西太多,不知道从哪下手,这个爬虫是当时入门的爬虫,重新写一下思路当复习了

二、爬虫能做什么

每天都在思考这个问题,前几天一个朋友问我爬虫的问题,最后我觉得爬虫就是互联网上的"小偷",看好啥自己没有数据,那只能去‘偷’了

三、这次爬虫需要什么

基础的爬虫永远都是那么几样,requests,Beautifsoup和python 运行环境,然后在需要的就是不断学习的动力,这个爬虫比上次的字典翻译简单一点,主要就是静态网页爬虫,可以说是入门的入门了

四、开始爬虫

http://www.zuihaodaxue.cn/zuihaodaxuepaiming2016.html”爬取的连接
这里要先感谢一下之前的公司,说实话基础爬虫能上手这么快,都是之前公司的前辈们教我看的的控制台,超级感谢他们~

分析.png
打开控制台,定位一下,我们发现表格的连接都在这个table标签中了,这个就是我们这次解析的地方。
现在要做什么,要做的就是跟使用浏览器一样写一段输入网址的代码。我们就给用requests.get 方法模拟输入浏览器地址
import requests
from bs4 import BeautifulSoup
from  requests.exceptions import RequestException
def getHtml(url):
    try :
        r = requests.get(url, timeout = 30)
        if r.status_code == 200 :
            r.encoding = r.apparent_encoding
            return r.text
        return None
    except RequestException:
        return "异常"

这里做了几个处理,
第一个是timeout 我只让 我程序有三十秒缓冲,三十秒内要是访问不到连接就超时。
第二个r.status_code获取网页的响应状态码,判断是否是200
第三个 做了异常
我们现在已经模拟浏览器访问了地址,并且已经获取了服务器返回的html,下一步我们要做处理

def parser_html(html):
    soup = BeautifulSoup(html, 'html.parser')
    for temp in soup.find('tbody').children:
        try:
            tds = temp('td')
            yield [tds[0].text, tds[1].text, tds[2].text]
        except:
            continue
处理.png

先找到tobody 标签,在找到所有子标签进行处理,这里如果出现异常就继续
运行一下代码

html = getHtml('http://www.zuihaodaxue.cn/zuihaodaxuepaiming2016.html')
a= parser_html(html)
for  i in a:
    print(i)
排行.png

看了结果 ,中国16年前十的大学都在这了~
下面给出一段嵩天-[北京理工大学]-副教授源码,在处理上我的代码借鉴了老师的源码~

import requests  
from bs4 import BeautifulSoup  
import bs4  
#1爬取网页  
def GetHtml(url):  
    try:  
        r=requests.get(url,timeout=30)  
        r.raise_for_status()  
        r.encoding=r.apparent_encoding  
        return r.text  
    except:  
        return "异常"  
#2提取内容、  
def  FullList(html,ulist):  
    soup= BeautifulSoup(html,'html.parser')  
    for temp in soup.find('tbody').children:  
        if isinstance(temp,bs4.element.Tag):  
            tds=temp('td')  
            ulist.append([tds[0].string,tds[1].string,tds[2].string])  
def printUnivlist(ulist,num):  
    tplt = "{0:^10}\t{1:{3}^10}\t{2:^10}"  
    print(tplt.format("排名", "学校名称", "总分", chr(12288)))  
    for i in range(num):  
        u = ulist[i]  
        print(tplt.format(u[0], u[1], u[2], chr(12288)))  
  
  
  
#3内容的输出  
infos=[]  
url='http://www.zuihaodaxue.cn/zuihaodaxuepaiming2016.html'  
html=GetHtml(url)  
FullList(html,infos)  
printUnivlist(infos,20)

相关文章

网友评论

本文标题:python_爬虫大学排行

本文链接:https://www.haomeiwen.com/subject/mkgdrxtx.html