以下是一个简单的Python实现,包含欢迎界面、循环输入、统计人数和记录已经输入名字的人等功能。具体实现如下:
# 定义一个空字典用于存储已经输入名字的人
name_dict = {}
count = 0
while True:
# 打印欢迎信息并邀请输入名字和学号
print("欢迎来到阳光学院!")
name = input("请输入您的姓名:")
if name == "exit":
break
student_id = input("请输入您的学号:")
# 记录已经输入名字的人
if name not in name_dict.keys():
name_dict[name] = student_id
count += 1
# 打印已经输入名字的人
print("已经输入名字的人:")
for key, value in name_dict.items():
print(key + "," + value)
print("您已退出系统,共输入了 %d 个人的信息" % count)
通过运行该程序,可以在屏幕上打印出欢迎信息,并提示用户输入姓名和学号。同时,程序会记录已经输入名字的人,并在每次输入后打印出已经输入名字的人的列表。当用户输入“exit”时,程序会退出循环并打印出统计信息,包括输入人数以及已经输入的名字和学号列表。
很遗憾,该网址不可访问了,本案例增加的新模块是 lxml
,也就是基于该模块的学习。
既然不能访问了,那我们切换到实话实说频道,http://yglz.tousu.hebnews.cn/shss-1.html。
在原案例中,最终获取到的数据存储到了 mongodb
中,复盘案例以抓取到数据为准,存储部分参考原案例即可。
import requests
import random
from lxml import etree # 从lxml中导入etree
ua = ['Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/86.0.4240.198 Safari/537.36',
'Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/78.0.3904.108 Safari/537.36',
'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/70.0.3538.102 Safari/537.36 Edge/18.18362',
'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/90.0.4430.93 Safari/537.36']
headers = {
'user-agent':ua[random.randint(0,2)]
}
# 测试循环10页即可
for i in range(1,10):
response = requests.get(f"http://yglz.tousu.hebnews.cn/shss-{i}.html",headers=headers)
html = response.content.decode("utf-8")
print("*"*200)
tree = etree.HTML(html) # 解析html
divs = tree.xpath('//div[@class="listcon"]') # 解析列表区域div
for div in divs: # 循环这个区域
try:
# 注意下面是通过div去进行的xpath查找,同时加上try方式报错
shouli = div.xpath('span[1]/p/a/text()')[0] # 受理单位
content = div.xpath('span[2]/p/a/text()')[0] # 投诉内容
datetime = div.xpath('span[3]/p/text()')[0].replace("\n","") # 时间
status = div.xpath('span[5]/p/text()')[0].replace("\n","") # 时间
one_data = {"shouli":shouli,
"type":type,
"content":content,
"datetime":datetime,
"status":status,
}
print(one_data) # 打印数据,方便存储到mongodb里面
except Exception as e:
print("内部数据报错")
print(div)
continue
目标网站从异步请求,更换到了现在的同步数据加载,同时去除了原先的反爬限制,网站加载速度明显变快,真棒。