1.请用requests库的get()函数访问网站20次,打印返回状态,text()内容,计算text()属性和content属性所返回网页内容的长度。
Python代码:
1 import requests 2 3 url = "https://www.baidu.com/" 4 5 for i in range(20): 6 response = requests.get(url) 7 print("第{}次访问:".format(i + 1)) 8 print("返回状态:", response.status_code) 9 print("text()内容:", response.text) 10 print("text()内容长度:", len(response.text)) 11 print("content属性所返回网页内容长度:", len(response.content)) 12 print("")
运行结果:
——————————
2.这是一个简单的html页面,请保持为字符串,完成后面的计算要求。
要求:a.打印head标签内容和你的学号后两位:
b.获取body标签的内容
c. 获取id 为first的标签对象
d. 获取并打印html页面中的中文字符
Python代码:
1 from bs4 import BeautifulSoup 2 3 html_doc = """ 4 <!DOCTYPE html> 5 <html> 6 <head> 7 <meta charset="utf-8"> 8 <title>菜鸟教程(runoob.com)</title> 9 </head> 10 <body> 11 <h1>我的第一个标题</h1> 12 <p id="first">我的第一个段落。</p> 13 </body> 14 <table border="1"> 15 <tr> 16 <td>row 1, cell 1</td> 17 <td>row 1, cell 2</td> 18 </tr> 19 <tr> 20 <td>row 2, cell 1</td> 21 <td>row 2, cell 2</td> 22 </tr> 23 </table> 24 </html> 25 """ 26 27 print("学号:22") 28 soup = BeautifulSoup(html_doc, 'html.parser') 29 print("a:", soup.head) 30 print("b:", soup.body) 31 first_element = soup.find(id="first") 32 print("c:", first_element) 33 chinese_characters = "".join([char for char in html_doc if '\u4e00' <= char <= '\u9fff']) 34 print("d:", chinese_characters)
运行结果:
——————————
3.爬中国大学排名网站内容,https://www.shanghairanking.cn/rankings/bcur/201811
要求:(一)爬取大学排名(学号尾号1,2,爬取年份2020
(二)把爬取的数据存为csv文件
Python代码:
1 # e23.1CrawUnivRanking.py 2 import re 3 import pandas as pd 4 import requests 5 from bs4 import BeautifulSoup 6 7 allUniv = [] #储存 8 9 10 def getHTMLtext(url): #获取指定URL的HTML文本,设置超时时间为30秒 11 try: 12 r = requests.get(url, timeout=30) 13 r.raise_for_status() 14 r.encoding = 'utf-8' 15 return r.text 16 except: 17 return "" 18 19 20 def fillUnivList(soup): 21 soup.encode('utf-8') 22 data = soup.find_all('tr') #遍历解析后的HTML中的所有表格行 23 list1=[] 24 for tr in data: 25 ltd = tr.find_all('td') #对于每一行,提取其中的所有单元格(td标签) 26 if len(ltd) == 0: 27 continue 28 singleUniv = [] #如果单元格数量不为0,用于存储当前行的大学排名信息 29 for td in ltd: 30 temp=re.findall('[\u4e00-\u9fff]+' ,str(td)) #使用正则表达式提取其中的中文字符 31 if td.string!=None and td.string!="[]": 32 singleUniv.append(td.string) 33 if temp!=[]: 34 if type(temp)==list: 35 str1='' 36 for i in temp: 37 str1+=i 38 singleUniv.append(str1) 39 allUniv.append(singleUniv) 40 return allUniv 41 42 43 def printUnivList(num): 44 print("{:^4}{:^10}{:^5}{:^8}{:^10}".format("排名", "学校名称", "省市", "类型", "总分")) #表头 45 for i in range(num): 46 u = allUniv[i] 47 u[0]=u[0][29:31] 48 u[1]=u[1][:4] 49 u[4]=u[4][25:31] 50 print("{:^5}{:^10}{:^5}{:^8}{:^10}".format(u[0], u[1], u[2], u[3], u[4])) 51 def main(flag): 52 url = 'https://www.shanghairanking.cn/rankings/bcur/201711' 53 html = getHTMLtext(url) 54 soup = BeautifulSoup(html, "html.parser") 55 list1=fillUnivList(soup) 56 if flag==0: 57 printUnivList(30) #爬取多少行 58 else: 59 return list1 60 # 定义一个函数,将里面的嵌套列表的第一个元素取出 61 def combination(list1,count): 62 list2=[] 63 for i in list1: 64 list2.append(i[count]) 65 return list2 66 main(0) 67 list1=main(1) 68 # 定义一个函数,处理一下获取到的数据 69 def deal_data(list1): 70 list_1=combination(list1,0) 71 list_2=combination(list1,1) 72 list_3=combination(list1,2) 73 list_4=combination(list1,3) 74 list_5=combination(list1,4) 75 data = pd.DataFrame({ 76 "排名": list_1, 77 "学校名称": list_2, 78 '省市': list_3, 79 '类型': list_4, 80 '总分': list_5 81 }) 82 return data 83 data=deal_data(list1) 84 data.to_csv('University_grade.csv',index=False)
运行结果:
csv文件: