爬虫作业

发布时间 2023-12-19 18:51:13作者: 事事顺心ouo

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文件: