一、作业内容
作业①:
o要求:用requests和BeautifulSoup库方法定向爬取给定网址(http://www.shanghairanking.cn/rankings/bcur/2020 )的数据,屏幕打印爬取的大学排名信息。
o输出信息:
排名 学校名称 省市 学校类型 总分
1 清华大学 北京 综合 852.5
2......
代码如下:
点击查看代码
import urllib.request
from bs4 import BeautifulSoup
# 第1步:获取网页内容
url = "http://www.shanghairanking.cn/rankings/bcur/2020"
request = urllib.request.Request(url)
response = urllib.request.urlopen(request)
html = response.read().decode('utf-8')
# 第2步:使用BeautifulSoup解析HTML
soup = BeautifulSoup(html, 'html.parser')
# 第3步:找到存储排名信息的HTML元素
table = soup.find('table', {'class': 'rk-table'})
rows = table.find_all('tr')[1:] # 跳过表头
# 第4步:格式化和打印数据
print("排名\t学校名称\t省市\t学校类型\t总分")
for row in rows[:26]: # 限制到前26行
cols = row.find_all('td')
if len(cols) >= 5:
rank = cols[0].get_text(strip=True)
uni_name = cols[1].get_text(strip=True)
province = cols[2].get_text(strip=True)
uni_type = cols[3].get_text(strip=True)
score = cols[4].get_text(strip=True)
print(f"{rank}\t{uni_name}\t{province}\t{uni_type}\t{score}")
<details>
<summary>点击查看代码</summary>
</details>
点击查看代码
排名 学校名称 省市 学校类型 总分
1 清华大学Tsinghua University双一流/985/211 北京 综合 852.5
2 北京大学Peking University双一流/985/211 北京 综合 746.7
3 浙江大学Zhejiang University双一流/985/211 浙江 综合 649.2
4 上海交通大学Shanghai Jiao Tong University双一流/985/211 上海 综合 625.9
5 南京大学Nanjing University双一流/985/211 江苏 综合 566.1
6 复旦大学Fudan University双一流/985/211 上海 综合 556.7
7 中国科学技术大学University of Science and Technology of China双一流/985/211 安徽 理工 526.4
8 华中科技大学Huazhong University of Science and Technology双一流/985/211 湖北 综合 497.7
9 武汉大学Wuhan University双一流/985/211 湖北 综合 488.0
10 中山大学Sun Yat-Sen University双一流/985/211 广东 综合 457.2
11 西安交通大学Xian Jiaotong University双一流/985/211 陕西 综合 452.5
12 哈尔滨工业大学Harbin Institute of Technology双一流/985/211 黑龙江 理工 450.2
13 北京航空航天大学Beihang University双一流/985/211 北京 理工 445.1
14 北京师范大学Beijing Normal University双一流/985/211 北京 师范 440.9
15 同济大学Tongji University双一流/985/211 上海 理工 439.0
16 四川大学Sichuan University双一流/985/211 四川 综合 435.7
17 东南大学Southeast University双一流/985/211 江苏 综合 432.7
18 中国人民大学Renmin University of China双一流/985/211 北京 综合 409.7
19 南开大学Nankai University双一流/985/211 天津 综合 402.1
20 北京理工大学Beijing Institute of Technology双一流/985/211 北京 理工 395.6
21 天津大学Tianjin University双一流/985/211 天津 理工 390.3
22 山东大学Shandong University双一流/985/211 山东 综合 387.9
23 厦门大学Xiamen University双一流/985/211 福建 综合 383.3
24 吉林大学Jilin University双一流/985/211 吉林 综合 379.5
25 华南理工大学South China University of Technology双一流/985/211 广东 理工 379.4
26 中南大学Central South University双一流/985/211 湖南 综合 378.6
价格
商品名
1
65.00
xxx
2......
代码如下:
点击查看代码
import requests
from bs4 import BeautifulSoup
def fetch_jd_data(keyword):
# 定义请求头,模拟浏览器发送请求
headers = {
'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/58.0.3029.110 Safari/537.3'
}
# 发送请求
url = f"https://search.jd.com/Search?keyword={keyword}&enc=utf-8"
response = requests.get(url, headers=headers)
products = []
# 判断是否请求成功
if response.status_code == 200:
# 获取页面内容
page_content = response.text
# 使用 BeautifulSoup 解析页面内容
soup = BeautifulSoup(page_content, 'html.parser')
# 根据HTML结构提取商品信息,可能需要调整选择器来适应实际结构
product_info_list = soup.select('.gl-item')[:60] # 限制为60项
for product_info in product_info_list:
title = product_info.select_one('.p-name em')
price = product_info.select_one('.p-price i')
if title and price:
products.append({
"name": title.get_text(),
"price": price.get_text()
})
else:
print("Failed to retrieve data.")
return products
if __name__ == "__main__":
keyword = "书包"
for idx, product in enumerate(fetch_jd_data(keyword), start=1):
print(f"{idx}. Name: {product['name']}, Price: {product['price']}")
点击查看代码
运行结果:1. Name: GMT轻巧护脊书包小学生独角兽款1-4年级22L, Price: 668.00
2. Name:
Vnine City香港第九城堡 书包小学生男孩护脊儿童书包1-3-6年级英伦风女生减负双肩背包CS1BV3973C剑桥蓝, Price: 199.00
3. Name: 回力双肩包男士背包大容量时尚休闲旅行包电脑包高中大学生初中书包女 黑色【冲天鸭挂件】, Price: 79.00
4. Name: 酷森书包男背包双肩包女韩版初中高中大学生大容量防泼水笔记本电脑 蓝色大号【挂件+徽章】, Price: 58.00
5. Name: 回力双肩包男初中高中大学生书包大容量背包轻便电脑包休闲旅行男包 黑色, Price: 59.00
6. Name: 回力书包男初中生大容量高中生大学生书包减负多功能电脑包女双肩背包 黑色【升级款无挂件】, Price: 89.00
7. Name: BESNOS品牌双肩包男时尚简约潮流新款纯色尼龙背包休闲大容量防泼水电脑 浅灰色 黑色大号(47*32*18cm), Price: 1299.00
8. Name: 京东京造 TANK运动双肩包 大容量 180°展开 商务旅行户外背包书包电脑包, Price: 129.00
9. Name: 格尔顿背包男书包大学生双肩包女初高中电脑包大容量休闲旅行包 黑色(带猩猩挂件), Price: 47.00
10. Name: 双星(doublestar)背包男书包初中女双肩包潮牌大容量高中大学生休闲运动电脑包 黑色【单包】, Price: 29.90
11. Name:
Vnine City香港第九城堡 小学生书包男孩女生1-3-5年级儿童减负书包抑菌一体式打开双肩背包 宇航员蓝, Price: 229.00
12. Name: 京东京造 轻量双肩背包20L升级版2.0 男女运动旅行通勤学生书包 炭黑, Price: 49.90
13. Name: Gmt for kids初中高中生书包护脊减负双肩包大容量轻便背包5-9年级男暗夜传说, Price: 958.00
14. Name: 回力书包男大容量背包休闲百搭双肩包女初中高中生大学生旅行电脑包 黑色【冲天鸭挂件】, Price: 79.00
15. Name: 酷森书包男初高中大学生背包女双肩包大容量防泼水可放15.6英寸电脑 灰色【带格子挂件】, Price: 59.00
16. Name: 朗酷书包初中女高中大学生双肩包男背包大容量简约百搭休闲耐磨防泼水 黑色(恐龙挂件+徽章), Price: 37.90
17. Name: Edison爱迪生小学生书包男护脊反光大容量防泼水儿童双肩背包2213-1蓝绿, Price: 169.00
18. Name:
Vnine City香港第九城堡 书包小学生女孩抑菌减负儿童兔子书包1-4年级一体式打开男孩双肩背包 樱花粉, Price: 259.00
19. Name: Nipendo书包初中男生新款高中大学生女潮牌大容量电脑背包情侣双肩包 酒红色 小号普通版, Price: 1799.00
20. Name: 双星书包初中女双肩包高中大学生背包大容量运动出行笔记本电脑包 米白色【带大长腿白色精灵挂件】, Price: 79.00
21. Name: 悍骑(HANQI)双肩包男电脑包背包女16英寸书包初中高中大学生大容量笔记本包 灰色【16英寸标准版】, Price: 29.90
22. Name: 悍骑 双肩包男士背包大容量书包大学生初高中学生旅行包防水电脑包 灰色加大版【防水面料】, Price: 69.90
23. Name: 卡拉羊(KALA·Y)书包小学生男孩女生1-4年级儿童减负护脊双肩包背包2587藏青, Price: 299.00
24. Name: 回力书包学生女新款初中生高中生大容量背包简约双肩包宽肩带书包轻便 白色小熊【冲天鸭挂件】, Price: 99.00
25. Name: BESNOS高端商务双肩包男士大容量多功能出差旅行包15.6英寸电脑包男背包 典雅黑【32*47*18CM】, Price: 1598.00
26. Name: 京东京造 轻量小背包10L升级版2.0 双肩男女学生书包运动旅行 炭黑, Price: 29.90
27. Name: 菲派书包女双肩包男初高中大学生背包大容量耐磨15.6吋笔记本电脑包 红色【带猩猩挂件】, Price: 59.00
28. Name: 布依诺书包小学生女儿童书包一二三到六年级双肩包大容量运动减负背包 蓝色大号【带圆兔子挂件】, Price: 61.00
29. Name: 双星背包男士双肩包初高中大学生书包大容量休闲防泼水电脑旅行包 黑色款, Price: 49.00
30. Name: 织兰书包初中女背包高中大学生男双肩包大容量校园风简约运动百搭耐磨 白色印花(带鸭子挂件), Price: 68.00
作业③:
要求:爬取一个给定网页( https://xcb.fzu.edu.cn/info/1071/4481.htm )或者自选网页的所有JPEG和JPG格式文件
输出信息:将自选网页内的所有JPEG和JPG文件保存在一个文件夹中
代码如下:
点击查看代码
import os
import requests
from bs4 import BeautifulSoup
from urllib.parse import urlparse, urljoin
# URL
URL = 'https://xcb.fzu.edu.cn/info/1071/4481.htm'
# 获取网页内容
response = requests.get(URL)
response.raise_for_status()
# 使用BeautifulSoup解析网页内容
soup = BeautifulSoup(response.content, 'html.parser')
# 查找所有img标签
img_tags = soup.find_all('img')
# 创建保存图片的文件夹
save_path = 'downloaded_images1'
if not os.path.exists(save_path):
os.makedirs(save_path)
# 下载并保存图片
for img in img_tags:
img_url = img['src']
if img_url.endswith(('.jpeg', '.jpg')):
img_url = urljoin(URL, img_url) # Convert relative URL to absolute, if needed
response = requests.get(img_url, stream=True)
filename = os.path.join(save_path, os.path.basename(urlparse(img_url).path))
with open(filename, 'wb') as img_file:
for chunk in response.iter_content(chunk_size=8192):
img_file.write(chunk)
print("下载完成!")