2023数据采集与融合实践作业一
作业一
(1)用requests和BeautifulSoup库方法定向爬取给定网址(http://www.shanghairanking.cn/rankings/bcur/2020 )的数据,屏幕打印爬取的大学排名信息。
import urllib.request
from bs4 import BeautifulSoup
url = "http://www.shanghairanking.cn/rankings/bcur/2020"
#用response.urllib打开url
response = urllib.request.urlopen(url)
#读取数据
html_content = response.read()
#对数据进行解析
soup = BeautifulSoup(html_content, "html.parser")
#通过查阅网页源代码找到我们所需要的元素位置
table = soup.find("table", {"class": "rk-table"})
print("排名\t学校名称\t省市\t学校类型\t总分")
#因为学号是27,因此遍历tr元素的前27行
for row in table.find_all("tr")[1:28]:
columns = row.find_all("td")
rank = columns[0].text.strip()
school_name = columns[1].text.strip()
province_city = columns[2].text.strip()
school_type = columns[3].text.strip()
total_score = columns[4].text.strip()
print(f"{rank}\t{school_name}\t{province_city}\t{school_type}\t{total_score}")
结果显示如下:

心得体会:在完成这项任务的过程中,对爬取静态页面的数据有了一定的了解,在实践的过程中对老师在课堂上所讲的理论知识有了更深的体会
(2)用requests和re库方法设计某个商城(自已选择)商品比价定向爬虫,爬取该商城,以关键词“书包”搜索页面的数据,爬取商品名称和价格。
本次作业选择爬取当当商城,爬取出搜索结果为书包的第一页商品名称和价格
import urllib.request
from bs4 import BeautifulSoup
import chardet
# 获取网页内容
def getHTMLText(url):
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.36"
}
try:
req = urllib.request.Request(url, headers=headers) # 创建请求对象并设置请求头
data = urllib.request.urlopen(req).read() # 发送请求并读取响应数据
encoding = chardet.detect(data)['encoding'] # 使用chardet库检测网页编码
data = data.decode(encoding, 'ignore') # 解码网页内容
return data
except Exception as err:
print("Error:", err)
return None
# 解析网页内容
def parsePage(data):
uinfo = []
soup = BeautifulSoup(data, 'html.parser') # 使用BeautifulSoup解析网页内容
items = soup.find_all("li", class_=lambda x: x and x.startswith('line')) # 查找包含商品信息的<li>元素
for i, item in enumerate(items):
price = item.find("p", class_="price").span.get_text(strip=True) # 提取商品价格
name = item.find("p", class_="name").a["title"] # 提取商品名称
uinfo.append([i + 1, price, name]) # 将商品信息添加到列表
return uinfo
# 打印商品列表
def printGoodsList(uinfo):
tplt = "{0:^5}\t{1:^10}\t{2:^20}"
print(tplt.format("序号", "价格", "商品名称"))
for i in uinfo:
print(tplt.format(i[0], i[1], i[2]))
# 主函数
def main():
url = 'http://search.dangdang.com/?key=%CA%E9%B0%FC&act=input'
data = getHTMLText(url)
if data:
uinfo = parsePage(data)
printGoodsList(uinfo)
if __name__ == '__main__':
main()
结果显示如下:

心得体会:加深了对urllib.request和Beautifulsoup这些库的了解和使用,以及认识到网站中好爬取的数据是比较少的,大部分都有复杂的反爬机制
(3)爬取一个给定网页( https://xcb.fzu.edu.cn/info/1071/4481.htm)或者自选网页的所有JPEG和JPG格式文件
代码如下所示:
import os
import requests
from bs4 import BeautifulSoup
from urllib.parse import urljoin
import re
url = "https://xcb.fzu.edu.cn/info/1071/4481.htm"
response = requests.get(url)
if response.status_code == 200:
# 使用Beautiful Soup解析网页内容
soup = BeautifulSoup(response.text, "html.parser")
# 创建一个文件夹来保存JPEG和JPG文件
os.makedirs("C:\\Users\\佘培强\\Desktop\\数据融合与采集技术作业\\images", exist_ok=True)
# 查找所有图片标签(<img>)并下载JPEG和JPG文件
img_tags = soup.find_all("img")
for img_tag in img_tags:
img_url = img_tag.get("src")
if img_url and (img_url.endswith(".jpg") or img_url.endswith(".jpeg")):
img_url = urljoin(url, img_url)
img_data = requests.get(img_url).content
img_name = re.sub(r'[\/:*?"<>|]', '_', os.path.basename(img_url))
with open(os.path.join("C:\\Users\\佘培强\\Desktop\\数据融合与采集技术作业\\images", img_name), "wb") as img_file:
img_file.write(img_data)
print("所有JPEG和JPG文件已保存在images文件夹中。")
else:
print("无法获取网页内容。")


浙公网安备 33010602011771号