<<--B站..........欢迎来到DGX的博客..........GitHub-->>

我的B站

Python爬虫的简单应用(任务25,易知)

1.问题:请用requests库的get()函数访问如下一个网站2次,打印返回状态,text()内容,计算text()属性和content属性所返回网页内容的长度。(百度主页)

import requests
url="https://www.baidu.com/"
def gethtml(url):
    try:
        print("第",i+1,"次访问")
        r=requests.get(url,timeout=30)
        r.raise_for_status()
        print("text编码方式为",r.encoding)
        print("网络状态码为:",r.status_code)
        print("text在属性:",type(r.text))
        print("content属性:",type(r.content))
        print("网页长度:",len(r.text))
        r.encoding="utf-8"
        print("text内容:",r.text)
    except:
        return "Error!"
for i in range(2):
    print(gethtml(url))

运行结果:

第 1 次访问
text编码方式为 ISO-8859-1
网络状态码为: 200
text在属性: <class 'str'>
content属性: <class 'bytes'>
网页长度: 2443
text内容: <!DOCTYPE html>

<!--STATUS OK--><html> <head><meta http-equiv=content-type content=text/html;charset=utf-8><meta http-equiv=X-UA-Compatible content=IE=Edge><meta content=always name=referrer><link rel=stylesheet type=text/css href=https://ss1.bdstatic.com/5eN1bjq8AAUYm2zgoY3K/r/www/cache/bdorz/baidu.min.css><title>百度一下,你就知道</title></head> <body link=#0000cc> <div id=wrapper> <div id=head> <div class=head_wrapper> <div class=s_form> <div class=s_form_wrapper> <div id=lg> <img hidefocus=true src=//www.baidu.com/img/bd_logo1.png width=270 height=129> </div> <form id=form name=f action=//www.baidu.com/s class=fm> <input type=hidden name=bdorz_come value=1> <input type=hidden name=ie value=utf-8> <input type=hidden name=f value=8> <input type=hidden name=rsv_bp value=1> <input type=hidden name=rsv_idx value=1> <input type=hidden name=tn value=baidu><span class="bg s_ipt_wr"><input id=kw name=wd class=s_ipt value maxlength=255 autocomplete=off autofocus=autofocus></span><span class="bg s_btn_wr"><input type=submit id=su value=百度一下 class="bg s_btn" autofocus></span> </form> </div> </div> <div id=u1> <a href=http://news.baidu.com name=tj_trnews class=mnav>新闻</a> <a href=https://www.hao123.com name=tj_trhao123 class=mnav>hao123</a> <a href=http://map.baidu.com name=tj_trmap class=mnav>地图</a> <a href=http://v.baidu.com name=tj_trvideo class=mnav>视频</a> <a href=http://tieba.baidu.com name=tj_trtieba class=mnav>贴吧</a> <noscript> <a href=http://www.baidu.com/bdorz/login.gif?login&tpl=mn&u=http%3A%2F%2Fwww.baidu.com%2f%3fbdorz_come%3d1 name=tj_login class=lb>登录</a> </noscript> <script>document.write('<a href="http://www.baidu.com/bdorz/login.gif?login&tpl=mn&u='+ encodeURIComponent(window.location.href+ (window.location.search === "" ? "?" : "&")+ "bdorz_come=1")+ '" name="tj_login" class="lb">登录</a>');

                </script> <a href=//www.baidu.com/more/ name=tj_briicon class=bri style="display: block;">更多产品</a> </div> </div> </div> <div id=ftCon> <div id=ftConw> <p id=lh> <a href=http://home.baidu.com>关于百度</a> <a href=http://ir.baidu.com>About Baidu</a> </p> <p id=cp>©2017 Baidu <a href=http://www.baidu.com/duty/>使用百度前必读</a>  <a href=http://jianyi.baidu.com/ class=cp-feedback>意见反馈</a> 京ICP证030173号  <img src=//www.baidu.com/img/gs.gif> </p> </div> </div> </div> </body> </html>


<!DOCTYPE html>

<!--STATUS OK--><html> <head><meta http-equiv=content-type content=text/html;charset=utf-8><meta http-equiv=X-UA-Compatible content=IE=Edge><meta content=always name=referrer><link rel=stylesheet type=text/css href=https://ss1.bdstatic.com/5eN1bjq8AAUYm2zgoY3K/r/www/cache/bdorz/baidu.min.css><title>百度一下,你就知道</title></head> <body link=#0000cc> <div id=wrapper> <div id=head> <div class=head_wrapper> <div class=s_form> <div class=s_form_wrapper> <div id=lg> <img hidefocus=true src=//www.baidu.com/img/bd_logo1.png width=270 height=129> </div> <form id=form name=f action=//www.baidu.com/s class=fm> <input type=hidden name=bdorz_come value=1> <input type=hidden name=ie value=utf-8> <input type=hidden name=f value=8> <input type=hidden name=rsv_bp value=1> <input type=hidden name=rsv_idx value=1> <input type=hidden name=tn value=baidu><span class="bg s_ipt_wr"><input id=kw name=wd class=s_ipt value maxlength=255 autocomplete=off autofocus=autofocus></span><span class="bg s_btn_wr"><input type=submit id=su value=百度一下 class="bg s_btn" autofocus></span> </form> </div> </div> <div id=u1> <a href=http://news.baidu.com name=tj_trnews class=mnav>新闻</a> <a href=https://www.hao123.com name=tj_trhao123 class=mnav>hao123</a> <a href=http://map.baidu.com name=tj_trmap class=mnav>地图</a> <a href=http://v.baidu.com name=tj_trvideo class=mnav>视频</a> <a href=http://tieba.baidu.com name=tj_trtieba class=mnav>贴吧</a> <noscript> <a href=http://www.baidu.com/bdorz/login.gif?login&tpl=mn&u=http%3A%2F%2Fwww.baidu.com%2f%3fbdorz_come%3d1 name=tj_login class=lb>登录</a> </noscript> <script>document.write('<a href="http://www.baidu.com/bdorz/login.gif?login&tpl=mn&u='+ encodeURIComponent(window.location.href+ (window.location.search === "" ? "?" : "&")+ "bdorz_come=1")+ '" name="tj_login" class="lb">登录</a>');

                </script> <a href=//www.baidu.com/more/ name=tj_briicon class=bri style="display: block;">更多产品</a> </div> </div> </div> <div id=ftCon> <div id=ftConw> <p id=lh> <a href=http://home.baidu.com>关于百度</a> <a href=http://ir.baidu.com>About Baidu</a> </p> <p id=cp>©2017 Baidu <a href=http://www.baidu.com/duty/>使用百度前必读</a>  <a href=http://jianyi.baidu.com/ class=cp-feedback>意见反馈</a> 京ICP证030173号  <img src=//www.baidu.com/img/gs.gif> </p> </div> </div> </div> </body> </html>


第 2 次访问
text编码方式为 ISO-8859-1
网络状态码为: 200
text在属性: <class 'str'>
content属性: <class 'bytes'>
网页长度: 2443
text内容: <!DOCTYPE html>

<!--STATUS OK--><html> <head><meta http-equiv=content-type content=text/html;charset=utf-8><meta http-equiv=X-UA-Compatible content=IE=Edge><meta content=always name=referrer><link rel=stylesheet type=text/css href=https://ss1.bdstatic.com/5eN1bjq8AAUYm2zgoY3K/r/www/cache/bdorz/baidu.min.css><title>百度一下,你就知道</title></head> <body link=#0000cc> <div id=wrapper> <div id=head> <div class=head_wrapper> <div class=s_form> <div class=s_form_wrapper> <div id=lg> <img hidefocus=true src=//www.baidu.com/img/bd_logo1.png width=270 height=129> </div> <form id=form name=f action=//www.baidu.com/s class=fm> <input type=hidden name=bdorz_come value=1> <input type=hidden name=ie value=utf-8> <input type=hidden name=f value=8> <input type=hidden name=rsv_bp value=1> <input type=hidden name=rsv_idx value=1> <input type=hidden name=tn value=baidu><span class="bg s_ipt_wr"><input id=kw name=wd class=s_ipt value maxlength=255 autocomplete=off autofocus=autofocus></span><span class="bg s_btn_wr"><input type=submit id=su value=百度一下 class="bg s_btn" autofocus></span> </form> </div> </div> <div id=u1> <a href=http://news.baidu.com name=tj_trnews class=mnav>新闻</a> <a href=https://www.hao123.com name=tj_trhao123 class=mnav>hao123</a> <a href=http://map.baidu.com name=tj_trmap class=mnav>地图</a> <a href=http://v.baidu.com name=tj_trvideo class=mnav>视频</a> <a href=http://tieba.baidu.com name=tj_trtieba class=mnav>贴吧</a> <noscript> <a href=http://www.baidu.com/bdorz/login.gif?login&tpl=mn&u=http%3A%2F%2Fwww.baidu.com%2f%3fbdorz_come%3d1 name=tj_login class=lb>登录</a> </noscript> <script>document.write('<a href="http://www.baidu.com/bdorz/login.gif?login&tpl=mn&u='+ encodeURIComponent(window.location.href+ (window.location.search === "" ? "?" : "&")+ "bdorz_come=1")+ '" name="tj_login" class="lb">登录</a>');

                </script> <a href=//www.baidu.com/more/ name=tj_briicon class=bri style="display: block;">更多产品</a> </div> </div> </div> <div id=ftCon> <div id=ftConw> <p id=lh> <a href=http://home.baidu.com>关于百度</a> <a href=http://ir.baidu.com>About Baidu</a> </p> <p id=cp>©2017 Baidu <a href=http://www.baidu.com/duty/>使用百度前必读</a>  <a href=http://jianyi.baidu.com/ class=cp-feedback>意见反馈</a> 京ICP证030173号  <img src=//www.baidu.com/img/gs.gif> </p> </div> </div> </div> </body> </html>


<!DOCTYPE html>

<!--STATUS OK--><html> <head><meta http-equiv=content-type content=text/html;charset=utf-8><meta http-equiv=X-UA-Compatible content=IE=Edge><meta content=always name=referrer><link rel=stylesheet type=text/css href=https://ss1.bdstatic.com/5eN1bjq8AAUYm2zgoY3K/r/www/cache/bdorz/baidu.min.css><title>百度一下,你就知道</title></head> <body link=#0000cc> <div id=wrapper> <div id=head> <div class=head_wrapper> <div class=s_form> <div class=s_form_wrapper> <div id=lg> <img hidefocus=true src=//www.baidu.com/img/bd_logo1.png width=270 height=129> </div> <form id=form name=f action=//www.baidu.com/s class=fm> <input type=hidden name=bdorz_come value=1> <input type=hidden name=ie value=utf-8> <input type=hidden name=f value=8> <input type=hidden name=rsv_bp value=1> <input type=hidden name=rsv_idx value=1> <input type=hidden name=tn value=baidu><span class="bg s_ipt_wr"><input id=kw name=wd class=s_ipt value maxlength=255 autocomplete=off autofocus=autofocus></span><span class="bg s_btn_wr"><input type=submit id=su value=百度一下 class="bg s_btn" autofocus></span> </form> </div> </div> <div id=u1> <a href=http://news.baidu.com name=tj_trnews class=mnav>新闻</a> <a href=https://www.hao123.com name=tj_trhao123 class=mnav>hao123</a> <a href=http://map.baidu.com name=tj_trmap class=mnav>地图</a> <a href=http://v.baidu.com name=tj_trvideo class=mnav>视频</a> <a href=http://tieba.baidu.com name=tj_trtieba class=mnav>贴吧</a> <noscript> <a href=http://www.baidu.com/bdorz/login.gif?login&tpl=mn&u=http%3A%2F%2Fwww.baidu.com%2f%3fbdorz_come%3d1 name=tj_login class=lb>登录</a> </noscript> <script>document.write('<a href="http://www.baidu.com/bdorz/login.gif?login&tpl=mn&u='+ encodeURIComponent(window.location.href+ (window.location.search === "" ? "?" : "&")+ "bdorz_come=1")+ '" name="tj_login" class="lb">登录</a>');

                </script> <a href=//www.baidu.com/more/ name=tj_briicon class=bri style="display: block;">更多产品</a> </div> </div> </div> <div id=ftCon> <div id=ftConw> <p id=lh> <a href=http://home.baidu.com>关于百度</a> <a href=http://ir.baidu.com>About Baidu</a> </p> <p id=cp>©2017 Baidu <a href=http://www.baidu.com/duty/>使用百度前必读</a>  <a href=http://jianyi.baidu.com/ class=cp-feedback>意见反馈</a> 京ICP证030173号  <img src=//www.baidu.com/img/gs.gif> </p> </div> </div> </div> </body> </html>


[Finished in 0.7s]

  

 

 2.问题:

这是一个简单的html页面,请保持为字符串,完成后面的计算要求。

a.打印head标签内容和你的学号后两位

b 获取body标签内容

c 获取id为first的标签对象

d 获取并打印html页面中的中文字符

html页面:

<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<title>菜鸟教程(runoob.com)</title>
</head>
<body>
     
    <h1>我的第一个标题</h1>
 
    <p id="first">我的第一个段落</p>
</body>
    <table border="1">
 
    <tr>
        <td>2,cell 1</td>
        <td>2,cell 2</td>
    </tr>
</table>
</html>
 

爬虫代码:

import re
from bs4 import BeautifulSoup
soup=BeautifulSoup('''<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<title>菜鸟教程(runoob.com)</title>
</head>
<body>
     
    <h1>我的第一个标题</h1>
 
    <p id="first">我的第一个段落</p>
</body>
    <table border="1">
 
    <tr>
        <td>2,cell 1</td>
        <td>2,cell 2</td>
    </tr>
</table>
</html>
 
''')
print("head标签:",soup.head,"学号:40")
print("获取id为first的标签对象:",soup.find_all(id="first"))
print("获取并打印html页面中的中文字符",re.findall(u'[\u1100-\uFFFDh]+?',soup.text))

运行结果:

head标签: <head>
<meta charset="utf-8"/>
<title>菜鸟教程(runoob.com)</title>
</head> 学号:40
获取id为first的标签对象: [<p id="first">我的第一个段落</p>]
获取并打印html页面中的中文字符 ['菜', '鸟', '教', '程', '(', ')', '我', '的', '第', '一', '个', '标', '题', '我', '的', '第', '一', '个', '段', '落', ',']

3.爬取中国大学2019年排名,并把抓取的数据保存为csv文件

代码:

import pandas as pd
info = []#用来存放爬取信息
url ="http://www.zuihaodaxue.com/zuihaodaxuepaiming2019.html"
try:
    r=requests.get(url,timeout=100)
    r.raise_for_status()
    r.encoding=r.apparent_encoding
    soup  = BeautifulSoup(r.text,"html.parser")
    for tr in soup.find("tbody").children:
        if isinstance(tr,bs4.element.Tag):
            tds=tr.find_all("td")
            info.append([tds[0].string,tds[1].string,tds[3].string])
    print("{0:^10}\t{1:{3}^10}\t{2:^10}".format("排名","学校名称","总分",chr(12288)))
    for i in range(50):
        print("{0:^10}\t{1:{3}^10}\t{2:^10}".format(info[i][0],info[i][1],info[i][2],chr(12288)))
    name = ["排名","学校名称","总分"]
    test = pd.DataFrame(columns=name,data=info)
    test.to_csv(r"C:\Users\Administrator\Desktop\test2.csv")
    print("保存成功")
except Exception as e :
    print(e)

保存的csv文件不在这里提供,下面为爬取到的部分数据 

 排名    	   学校名称   	    总分    
    1     	   清华大学   	   94.6   
    2     	   北京大学   	   76.5   
    3     	   浙江大学   	   72.9   
    4     	  上海交通大学  	   72.1   
    5     	   复旦大学   	   65.6   
    6     	 中国科学技术大学 	   60.9   
    7     	  华中科技大学  	   58.9   
    7     	   南京大学   	   58.9   
    9     	   中山大学   	   58.2   
    10    	 哈尔滨工业大学  	   56.7   
    11    	 北京航空航天大学 	   56.3   
    12    	   武汉大学   	   56.2   
    13    	   同济大学   	   55.7   
    14    	  西安交通大学  	   55.0   
    15    	   四川大学   	   54.4   
    16    	  北京理工大学  	   54.0   
    17    	   东南大学   	   53.6   
    18    	   南开大学   	   52.8   
    19    	   天津大学   	   52.3   
    20    	  华南理工大学  	   52.0   
    21    	   中南大学   	   50.3   
    22    	  北京师范大学  	   49.7   
    23    	   山东大学   	   49.1   
    23    	   厦门大学   	   49.1   
    25    	   吉林大学   	   48.9   
    26    	  大连理工大学  	   48.6   
    27    	  电子科技大学  	   48.4   
    28    	   湖南大学   	   48.1   
    29    	   苏州大学   	   47.3   
    30    	  西北工业大学  	   46.7   
    31    	  中国人民大学  	   46.1   
    32    	  华东师范大学  	   46.0   
    33    	 南京航空航天大学 	   44.8   
    34    	 对外经济贸易大学 	   44.7   
    35    	  南方科技大学  	   44.6   
    36    	  华东理工大学  	   44.5   
    37    	   重庆大学   	   44.4   
    38    	  南京理工大学  	   44.3   
    39    	  北京科技大学  	   43.9   
    40    	   东北大学   	   43.7   
    41    	   上海大学   	   43.4   
    42    	  北京邮电大学  	   42.9   
    42    	  上海财经大学  	   42.9   
    42    	  中国农业大学  	   42.9   
    45    	  武汉理工大学  	   42.8   
    46    	  北京交通大学  	   42.6   
    46    	  华中师范大学  	   42.6   
    48    	 西安电子科技大学 	   42.1   
    49    	  中央财经大学  	   41.8   
    50    	  北京化工大学  	   41.7   
保存成功
[Finished in 15.6s]

  

其它方法

import csv
import os
import requests
import pandas
from bs4 import BeautifulSoup
allUniv = []
def getHTMLText(url):
    try:
        r = requests.get(url, timeout=30)
        r.raise_for_status()
        r.encoding = 'utf-8'
        return r.text
    except:
        return ""
def fillUnivList(soup):
    data = soup.find_all('tr')
    for tr in data:
        ltd = tr.find_all('td')
        if len(ltd)==0:
            continue
        singleUniv = []
        for td in ltd:
            singleUniv.append(td.string)
        allUniv.append(singleUniv)
def writercsv(save,num,title):
    if os.path.isfile(save):
        with open(save,'a',newline='')as f:
            csv_write=csv.writer(f,dialect='excel')
            for i in range(num):
                u=allUniv[i]
                csv_write.writerow(u)
    else:
         with open(save,'w',newline='')as f:
            csv_write=csv.writer(f,dialect='excel')
            csv_write.writerow(title)
            for i in range(num):
                u=allUniv[i]
                csv_write.writerow(u)
 
title=["排名","学校名称","省市","总分","生源质量","培养结果","科研规模","科研质量","顶尖成果","顶尖人才","科技服务","产学研究合作","成果转化"]
save="C:\\Users\\Administrator\\Desktop\\sqlit_test02.csv"
def main():
    url = 'http://www.zuihaodaxue.com/zuihaodaxuepaiming2019.html'
    html = getHTMLText(url)
    soup = BeautifulSoup(html, "html.parser")
    fillUnivList(soup)
    writercsv(save,10,title)
main()

  

 

 
posted @ 2020-05-13 15:03  DG息  阅读(418)  评论(0)    收藏  举报