当前位置: 首页 > news >正文

数据采集与融合技术作业1

1.作业①:
要求:用requests和BeautifulSoup库方法定向爬取给定网址(http://www.shanghairanking.cn/rankings/bcur/2020)的数据,屏幕打印爬取的大学排名信息。
输出信息:

排名 学校名称 省市 学校类型 总分
1 清华大学 北京 综合 852.5

1.1作业代码和图片

import requests
from bs4 import BeautifulSoup//导入库
url='http://www.shanghairanking.cn/rankings/bcur/2020'
headers={'user-agent':'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/141.0.0.0 Safari/537.36 Edg/141.0.0.0'}
response = requests.get(url,headers = headers)
response.encoding = "utf-8"
data = response.text//获取网页的html源码
soup=BeautifulSoup(data,'lxml')
rank=[]
name=[]
province=[]
stype=[]
grade=[]rank_tags=soup.select('tr[data-v-389300f0] td[data-v-389300f0]:nth-child(1)')
for tag in rank_tags://获取各个大学的排名并存到相应的列表中tags=tag.text.split('\n')tag=tags[1].strip()rank.append(tag)name_tags=soup.select('tr[data-v-389300f0] span[class="name-cn"]')
for tag in name_tags://获取各个大学的名字并存到相应的列表中tags=tag.text.split('\n')tag=tags[0]name.append(tag)province_tags=soup.select('tr[data-v-389300f0] td[data-v-389300f0]:nth-child(3)')
for tag in province_tags://获取各个大学所在省市并存到相应的列表中tags=tag.text.split('\n')tag=tags[1].strip()province.append(tag)stype_tags=soup.select('tr[data-v-389300f0] td[data-v-389300f0]:nth-child(4)')
for tag in stype_tags://获取各个大学的类型并存到相应的列表中tags=tag.text.split('\n')tag=tags[1].strip()stype.append(tag)grade_tags=soup.select('tr[data-v-389300f0] td[data-v-389300f0]:nth-child(5)')
for tag in grade_tags://获取各个大学的得分并存到相应的列表中tags=tag.text.split('\n')tag=tags[1].strip()grade.append(tag)
print('排名    学校名称    省市    学校类型    总分')//输出结果
for i in range(30):print(f' {rank[i]}    {name[i]}    {province[i]}    {stype[i]}    {grade[i]}')

屏幕截图 2025-10-26 215327
1.2 心得体会
通过本次实践,我对于用requests和BeautifulSoup库方法爬取网站信息有了更深的理解,也在一定程度上增强了我对于HTML的理解,也提高了我的编码实践能力,为后续要完成更加复杂的实践任务打下基础

2.作业②:
要求:用requests和re库方法设计某个商城(自已选择)商品比价定向爬虫,爬取该商城,以关键词“书包”搜索页面的数据,爬取商品名称和价格。
输出信息:

序号 价格 商品名
1 65.00 XXX
2......

2.1作业代码和图片

import requests
import re
url = 'https://search.dangdang.com/?key=%CA%E9%B0%FC&act=input&category_id=4003728&type=4003728&att=1000012%3A1873#J_tab'
try:headers = {"User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/118.0.0.0 Safari/537.36"}response = requests.get(url,headers = headers)data = response.textstart=(re.search(r'<ul class="bigimg cloth_shoplist" id="component_38">.*</ul>',data)).start()end=(re.search(r'<ul class="bigimg cloth_shoplist" id="component_38">.*</ul>',data)).end()table=data[start:end] #截取含有需要内容的html源码if table:print("序号\t价格\t\t商品名称")i=1while re.search(r'<a title=" ', table)!=None:#每找到一组需要的书包名称和价格就将table缩短,去掉含有已经找到信息的源码start = re.search(r'<a title=" ', table).end()end = re.search(r'  ddclick=', table).start()name_bag = table[start:end - 1]#提取书包名称start = re.search(r'<span class="price_n">', table).end()end = re.search(r'</span>', table).start()price_bag = table[start+5:end]#提取书包的价格table = table[end:]xin = re.search('</li>', table).end()table = table[xin:]#去除包含已经找到信息的源码后的新的tableif price_bag and name_bag:#打印找到的书包的名称和价格print("{}\t{}\t{}".format(i, price_bag, name_bag))i += 1else:print("{}\t未找到商品价格或名称".format(i))i += 1
except Exception as err:print(err)

屏幕截图 2025-10-26 211916
2.2 心得体会
通过本次实践任务,进一步加深了我对正则表达式操作符的理解,也让我掌握了更多re库的方法,懂得如何运用具体的正则表达式操作符爬取需要的信息,提高了个人的编程实践能力。

3.作业③:
要求:爬取一个给定网页( https://news.fzu.edu.cn/yxfd.htm)或者自选网页的所有JPEG、JPG或PNG格式图片文件
输出信息:将自选网页内的所有JPEG、JPG或PNG格式图片件保存在一个文件夹中
3.1作业代码和图片

def downloadImage(ID,src,tExt):#下载相应图像到本地文件的函数try:imgName='download\\'+ID+'.'+tExturllib.request.urlretrieve(src,imgName)except Exception as err:print(err)def initializeDownload():#对本地相应文件夹做初始化if not os.path.exists('download'):os.mkdir('download')fs=os.listdir('download')if fs:for f in fs:os.remove('download\\'+f)def spider(url):#核心爬虫函数global page,count,DB,threadspage=page+1print('Page',page,url)try:req=urllib.request.Request(url,headers=headers)resp=urllib.request.urlopen(req)html=resp.read().decode()#获取网页源码soup=BeautifulSoup(html,'lxml')divs=soup.select("div[class='n_right fr'] div[class='img slow']")for div in divs:img=div.select_one('img')src=''tExt=''if img:src=urllib.request.urljoin(url,img['src'])#获取图片的urlp=src.rfind('.')if p>=0:tExt=src[p+1:]if tExt in ["jpg","png","jpeg"]:#判断是否为符合要求的图片count=count+1ID='%06d'%(count)T=threading.Thread(target=downloadImage,args=[ID,src,tExt])#找到相应图片并进行开启一个线程进行下载T.start()threads.append(T)nextUrl=''links=soup.select("div[class='pb_sys_common pb_sys_normal pb_sys_style2'] span[class='p_next p_fun'] a")#找含有包含翻页信息的a标签for link in links:href=link['href']nextUrl=urllib.request.urljoin(url,href)#得到下一页的urlif nextUrl:spider(nextUrl)#进行下一页图像信息的爬取except Exception as err:print(err)
headers={'user-agent':'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/141.0.0.0 Safari/537.36 Edg/141.0.0.0'}
initializeDownload()
threads=[]
page=0
count=0
spider(url='https://news.fzu.edu.cn/yxfd.htm')
for T in threads:T.join()#循环等待子线程,确保子线程运行完毕后才结束程序
print('Total %d pages,%d items'%(page,count))

屏幕截图 2025-10-26 221331

屏幕截图 2025-10-26 221355

http://www.hskmm.com/?act=detail&tid=39703

相关文章:

  • RT-Thread Nano源码浅析
  • 关于SQLite - 世界上装机量最多的数据库
  • 《从 “被动听” 到 “主动学”:课堂听讲助力大学生思维成长》
  • 用AI批量生成产品视频!Python+Google Veo 3.1 API让电商转化率飙升
  • 模拟IIC与硬件IIIC哪个更常用?
  • 每日反思(2025_10_26)
  • 251019 NOIP 模拟赛 T2 | dp 及其优化、调整法最优解性质、数形结合
  • 小作业 14(2018 北京高考文科)
  • 10.23总结
  • 10.24总结
  • 第六章习题
  • 速通 花卉鉴赏 短文
  • Agent常见模式 - 智慧园区
  • 概率论测试
  • 2025.10.26总结
  • AI元人文:从战略能力到价值对话的实现框架
  • react-router7.9.4使用
  • Python---开发桌面应用程序
  • Python实现验证码识别的完整流程解析
  • 207. 课程表
  • 基于Python的验证码自动识别方案设计与实现
  • 记录一下
  • 中科大「数学分析教程——上册」习题选做 - Neuro
  • 回忆录:梦开始的往事
  • 20232418 2025-2026-1 《网络与系统攻防技术》实验三实验报告
  • 大学生为啥一定要认真听讲
  • ti2
  • 单像素demo初探
  • 以听筑基,以行践知:解锁学习新范式的思考
  • Day4表单-imput标签