故宫壁纸网页图片的爬取实验

第1关 网页爬虫选择题

  1. 湖南省政府主页URL是http://www.hunan.gov.cn/hnszf/index.html
    其中,表示网页文件名称的是 D、index.html

  2. python用来通过网络连接获取网页内容的外库是:requests

  3. 要将response对象r的代码格式设置为utf8格式 应该使用下列哪个代码:

1
r.encoding='utf8'
  1. 网页内容如下
1
2
<div class="content-bt">学校简介</div>
<div class="content">湖南大学办学起源于公元976年创建的岳麓书院</div>

要提取文本学校简介,需要使用下列哪个语句

1
oup.find("div",attrs={"class":"content-bt"}).text

第2关 获取故宫壁纸网页的第一张图片的信息

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
import requests
from bs4 import   BeautifulSoup
url = "https://www.dpm.org.cn/lights/royal/p/1.html"
#代码开始
r = requests.get(url)
r.encoding = 'utf-8'
soup =BeautifulSoup(r.text,"html.parser")
pic=soup.find("div", class_="pic")
x=pic.find("img")
imglj=x.attrs['src']
imgmz=x.attrs['title'].strip()
#代码结束
print(imglj)
print(imgmz)
f1=open("tpxx.txt","w")
f1.write(imglj+"\n")
f1.write(imgmz+"\n")
f1.close()

第3关 下载故宫壁纸网页的第一张图片

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
import requests
from bs4 import   BeautifulSoup
url = "https://www.dpm.org.cn/lights/royal/p/1.html"
r=requests.get(url)
r.encoding = 'utf-8'
soup=BeautifulSoup(r.text,"html.parser")
pic=soup.find("div", class_="pic")
x=pic.find("img")
imglj=x.attrs["src"]
imgmz=x.attrs["title"].strip()
#代码开始
r=requests.get(imglj)
cpmc="image//"+imgmz+".jpg"
f1=open(cpmc,"bw")
f1.write(r.content)
f1.close()

#代码结束

第4关 下载故宫壁纸网页的单页的多张图片

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
import requests
from bs4 import   BeautifulSoup
url = "https://www.dpm.org.cn/lights/royal/p/1.html"
#代码开始
r = requests.get(url)
r.encoding = 'utf-8'
soup = BeautifulSoup(r.text,"html.parser")
pics=soup.find_all("div", class_="pic")
i=1
for pic in pics:  
    x=pic.find("img")  
    imglj=x.attrs["src"]
    imgmz=x.attrs["title"].strip()  
    r=requests.get(imglj)  
    f=open("image/"+str(i)+imgmz+".jpg","wb")
    i=i+1
    f.write(r.content)
    f.close()
#代码结束

第5关 获取故宫壁纸前三个网页的多张图片的信息

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
import requests
from bs4 import   BeautifulSoup
#代码开始
i=1
for j in range(1,6):
    url = "https://www.dpm.org.cn/lights/royal/p/"+str(j)+".html"
    r = requests.get(url)
    r.encoding = 'utf-8'
    soup = BeautifulSoup(r.text,"html.parser")
    pics = soup.find_all("div",class_="pic")
    for pic in pics:
        x = pic.find("img")
        imglj = x.attrs["src"]
        imgmz = x.attrs["title"].strip()
        r = requests.get(imglj)
        f1 = open("image/"+str(i)+imgmz+".jpg","wb")
        f1.write(r.content)
        f1.close()
        i += 1        
#代码结束

正则表达式入门

第1关 查找第一个匹配的字符串

1
2
3
4
5
6
7
8
9
10
11
12
13
14
# coding=utf-8
# 在此导入python正则库
########## Begin ##########
import re
########## End ##########
check_name = input()
# 在此使用正则匹配'张明'的信息,结果存储到is_zhangming中
########## Begin ##########
is_zhangming = re.search(r'张明',check_name)
########## End ##########
if is_zhangming is not None:
    print(is_zhangming.span())
else:
    print(is_zhangming)

第2关 基础正则表达式–字符组

1
2
3
4
5
6
7
8
# coding=utf-8
import re
input_str = input()
# 编写获取python和Python的正则,并存储到match_python变量中
########## Begin ##########
match_python=re.findall(r'[Pp]ython',input_str)
########## End ##########
print(match_python)

第3关 基础正则表达式–区间与区间取反

1
2
3
4
5
6
7
8
9
10
11
12
13
# coding=utf-8
import re
input_str = input()
# 1、编写获取到数字的正则,并输出匹配到的信息
########## Begin ##########
is_number = re.findall(r'[0-9]',input_str)
print(is_number)
########## End ##########
# 2、编写获取到不是数字的正则,并输出匹配到的信息
########## Begin ##########
is_not_number = re.findall(r'[^0-9]',input_str)
print(is_not_number)
########## End ##########

第4关 基础正则表达式–快捷方式

1
2
3
4
5
6
7
8
9
10
11
12
13
14
# coding=utf-8
import re
input_str = input()
# 1、编写获取到单词的正则,并输出匹配到的信息
########## Begin ##########
is_word = re.findall(r'\w',input_str)
print(is_word)
########## End ##########

# 2、编写获取到不是单词的正则,并输出匹配到的信息
########## Begin ##########
is_not_word = re.findall(r'\W',input_str)
print(is_not_word)
########## End ##########

第5关 字符串的开始与结束

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
# coding=utf-8
import re

input_str = input()
# 1、编写获取到以educoder开头的正则,并存储到变量a
########## Begin ##########
a = re.search(r'^educoder',input_str)
########## End ##########
if a is not None:
    print(a.span())
else:
    print(a)

# 2、编写获取到以educoder结束的正则,并存储到变量b
########## Begin ##########
b = re.search(r'educoder$',input_str)

########## End ##########
if b is not None:
    print(b.span())
else:
    print(b)

第6关 任意字符

1
2
3
4
5
6
7
8
9
# coding=utf-8
import re

input_str = input()
# 编写获取(任意字符)+ython的字符串,并存储到变量a中
########## Begin ##########
a = re.findall(r'.ython',input_str)
########## End ##########
print(a)

第7关 可选字符

1
2
3
4
5
6
7
8
# coding=utf-8
import re
input_str = input()
# 编写获取she或者he的字符串,并存储到变量a中
########## Begin ##########
a = re.findall(r's?he',input_str)
########## End ##########
print(a)

第8关 重复区间

1
2
3
4
5
6
7
8
9
10
11
12
13
# coding=utf-8
import re
input_str = input()
# 1、基于贪心模式匹配字符串中重复出现2个数字的子字符串,并存储到变量a。
########## Begin ##########
a = re.findall(r'[\d]{2}',input_str)
########## End ##########
print(a)
# 2、基于贪心模式匹配字符串中重复出现4-7个数字的子字符串,并存储到变量b。
########## Begin ##########
b = re.findall(r'[\d]{4,7}',input_str)
########## End ##########
print(b)

第9关 开闭区间与速写

1
2
3
4
5
6
7
8
9
10
11
12
13
# coding=utf-8
import re
input_str = input()
# 1、基于贪心模式匹配字符串中连续出现5个数字以上的子字符串,并存储到变量a。
########## Begin ##########
a = re.findall(r'[\d]{5,}',input_str)
########## End ##########
print(a)
# 2、匹配字符串中都为数字的子字符串,并存储到变量b。
########## Begin ##########
b = re.findall(r'[\d]+',input_str)
########## End ##########
print(b)

Python网络编程之UDP套接字编程

第1关 UDP 初体验

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
import socket



#********* Begin *********#
# 指定服务器地址和端口
serverName='localhost'
serverPort = 56789
#********* End *********#

#********* Begin *********#

# 创建UDP套接字
clientSocket = socket.socket(socket.AF_INET,socket.SOCK_DGRAM)
#********* End *********#

#********* Begin *********#

# 设置套接字超时值1秒

clientSocket.settimeout(1)

#********* End *********#

i = 0
while i < 2:
    try:

        # ********* Begin *********#
        # 生成数据报,编码为bytes以便发送
        message = ('Ping %d time'%(i+1)).encode()
        # ********* End *********#

        # ********* Begin *********#
        # 将信息发送到服务器
        clientSocket.sendto(message,(serverName,serverPort))
        # ********* End *********#

        # ********* Begin *********#
        # 从服务器接收信息,同时也能得到服务器地址,并将其输出
        modifiedMessage,serverAddress = clientSocket.recvfrom(1024)
        print('Receive %d: from %s' %(i+1,serverAddress))
        # ********* End *********#

    except Exception as e:

        # ********* Begin *********#
        # 输出超时丢包的反馈信息
        print('Sequence %d: Request timed out' %(i+1))
        # ********* End *********#
    i = i + 1

#********* Begin *********#
# 关闭该UDP套接字
clientSocket.close()
#********* End *********#

第2关 UDP 计算丢包率

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
from socket import *

#********* Begin *********#
# 指定服务器地址和端口
address = ('127.0.0.1',56789)
#********* End *********#

#********* Begin *********#
# 创建UDP套接字
s = socket(AF_INET,SOCK_DGRAM)
#********* End *********#

#********* Begin *********#
# 设置套接字超时值1秒
s.settimeout(1)
#********* End *********#
i = 0
count = 0 # 可以用来记录丢包的个数
while i < 10:
    try:
        # ********* Begin *********#
        # 生成数据报,编码为bytes,并发送给服务器
        message = bytes(f'Ping {i+1} time',encoding = 'utf-8')
        s.sendto(message,address)
        # ********* End *********#



        # ********* Begin *********#

        # 从服务器接收信息,同时也能得到来自服务器的数据,需要输出该数据,具体见编程要求
        data,address = s.recvfrom(1024)
        data = bytes.decode(data)
        print(f"Receive {i+1}: Hello, I am here")
        # ********* End *********#

    except Exception as e:

        # ********* Begin *********#
        count += 1
        # 输出超时丢包的反馈信息。记录丢包的个数,便于后面计算丢包率
        print(f"The {i+1} package is lost")
        # ********* End *********#

    i = i + 1

# ********* Begin *********#

# 计算并输出丢包率
print(f"Packet loss rate: {count/i:.2f}")
# ********* End *********#


#********* Begin *********#
# 关闭该UDP套接字
s.close()
#********* End *********#

第3关 创建基于 UDP 的 Ping 程序

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
from socket import *
import time
import socket
#********* Begin *********#
# 指定服务器地址和端口
serverName='localhost'
serverPort = 56789
#********* End *********#



#********* Begin *********#
# 创建UDP套接字
clientSocket = socket.socket(socket.AF_INET,socket.SOCK_DGRAM)
#********* End *********#



#********* Begin *********#
# 设置套接字超时值1秒
clientSocket.settimeout(1)
#********* End *********#



i = 0
while i < 10:
    sendTime = time.time() # 记录发送ping报文的当前时间戳
    try:
        # ********* Begin *********#
        # 生成数据报,编码为bytes,并发送给服务器
        message = ('Ping %d time' % (i + 1)).encode()
        clientSocket.sendto(message,(serverName,serverPort))
        # ********* End *********#
        # ********* Begin *********#
        # 从服务器接收信息,同时也能得到来自服务器的地址,需要输出该地址,(不要输出端口号!)
        # 并且需要计算和输出RTT,具体见编程要求
        modifiedMessage, serverAddress = clientSocket.recvfrom(1024)
        rtt = time.time() - sendTime
        print('Receive %d: Reply from %s RTT = %.2fs' %(i+1,serverAddress[0],rtt))
        # ********* End *********#
    except Exception as e:
        # ********* Begin *********#
        # 输出超时丢包的反馈信息。
        print('Sequence %d: Request timed out' %(i+1))
        # ********* End *********#
    i = i + 1
#********* Begin *********#
# 关闭该UDP套接字
clientSocket.close()
#********* End *********#

Socket编程

第1关 创建连接套接字

1
2
3
4
5
6
7
8
9
10
11
12
13
14
from socket import *
serverSocket = socket(AF_INET, SOCK_STREAM)  # 此步已经完成socket对象的创建,无需重新创建
serverSocket.setsockopt(SOL_SOCKET, SO_REUSEADDR, 1)
# 将TCP套接字绑定到指定端口
serverSocket.bind(('', 6789))
# 进行端口监听,客户端最大连接数为1
serverSocket.listen(1)
print("start...")
connectionSocket, addr = serverSocket.accept()

print("连接成功")
data = connectionSocket.recv(1024)
print(data.decode())
serverSocket.close()

第2关 socket传输加密图片

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
from socket import *

import rsa

PUB = b'-----BEGIN RSA PUBLIC KEY-----\nMIIECgKCBAEA0clXVz1AWzgNSm7F6phzkXMoHrMywLrYKuDhh4wwnTt/08CFFN/V\nQbNk7wioAHC04D/iAe8XAH26T+i8y8zErxTTxitRN38Lrf0S1y3q+XBvQfm9z5X7\n8o6dHx/u8PMMQzwpqQZeICupLZe0+h9dP2Y05wKwnP9xRDJYelzc1VvdlNJS9x0l\nrb41+x2851ULq0z5iLUpUb4cBA2vVZ60BHKr22IhysQQ0MhUX8JnNAcQacQXJI+j\n7ROoo0dySQiHGrUKsELfUIl3XSMPBF+vF2shZnldip+uOyyMfUz35YHtlHIbyAKD\nfXWx2nkf3lMd0Fq/YfdUUcJWm6qxgvVoeCInpT2xDC4QnPQFantHEJinupajFupF\n0GBZp+/KFbgNYWqRbJzqywKA0epdMvlQsHbNfG4AkdOE4jP/WHBq73xdutajtCbd\nlFGd/VISconfpx8E0Ouj2fvoOcNIk9ed3zPF1sRJ5WsYAP7Cp1aSa98Lg9phb68E\nzsaQBMt4+bZbuJ0TC9e73P36f9j9+Cj+kFS6rVRbVbPn+oI/HWPn2BJ5W0pR5Buh\niXWhlGV+KHII63SqVx7jSmKmuTJk87FWg2q7+/joLidXvUnZbUj1eroIRtDkNA9e\n3VwCdkzUvQaBvYIEzqxE7Ej5ZL0gQHa3honCSl4aFDq7QcBnO6kti98fJIY1K0Fh\n6J94WHs80J00paSkZK77leE410Lq7ImVpq3mNwjEvp0x8K4eRMllOUWaoUcqo8tW\nS8OT5mUuP604hdK6ZAtjN5yJz9ro2ii1SkGjcx0YDVpGdK5LjKgKtWBj4ZrFMLHE\nMEquwHDpRsWZRWILrIy9gYooav43kovGMaUdRLAzlkvC2oa66aCehugvvvoW9kmE\nzihIfFuLH7W8suj69XI8v//QLQATqTc+0bBgdNlASJVk7z1m5mlNUIBX33W5V6qe\nToexbo1w1+/7Bjo80ketY1avVVWbZVIEgu1bkT+Z+DVqoU4zw6JMopu2bzlQSGbG\nF+4A3w1CK7U4dCXV/Vh7nbGSgJXjpO+EM0Hk3VcBoGReTsq5AVVOYu2I6Xrjds3b\n/Dek81JRHKCcdto4ZSpuL+73NrQwhu09EByH63cOYoSAz6mWbsUev5B12bkIheaL\nYKfCud06McA0pq5VvqEpFZDjgyszHtuVbwDcQQaXzF0Jq6X1jojjfxIakI3xUvlA\nmNk8JkFX6VdZ1NI9KbFcIBqZxbmgXQbWM6K4bJ+GXEcFZkaVZuInEMI8ak6VjmCy\nPt7Ty4WPKeDNzPSNSBi3HPPPB/yfOiMATdGXsm/jKp97RILiDi72ccdHrfzYYeei\niH7d6Dne6nKGIyXZJeFrfB1hSBvlXmIGXQIDAQAB\n-----END RSA PUBLIC KEY-----\n'

PRI = b'-----BEGIN RSA PRIVATE KEY-----\n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\nwui+fB+tk56BUG9c6c0LjkQb7+Xb5Qtdf5QDtKM=\n-----END RSA PRIVATE KEY-----\n'

pubkey = rsa.PublicKey.load_pkcs1(PUB)
serverSocket = socket(AF_INET, SOCK_STREAM)
serverSocket.setsockopt(SOL_SOCKET,SO_REUSEADDR,1)
serverSocket.bind(('', 6900)) # 将TCP欢迎套接字绑定到指定端口
serverSocket.listen(1) # 最大连接数为1
print('start...')
conn, address = serverSocket.accept()
print("连接成功")

try:
    ########### begin ##########
    # 接受客户传来的请求,并打印消息
    request = conn.recv(1024).decode()
    print(request)
    ######### end ##################



    with open('./src/step2/python.jpg', 'rb') as f:
        read_info = f.read()
        ########## beigin #############
        # 对图片信息进行加密,并发送出去
        encrypted_info = rsa.encrypt(read_info, pubkey)
        conn.send(encrypted_info)
        ############# end ##############
    conn.close()
except IOError:
    conn.close()