数据采集与融合技术实验课程作业一
数据采集与融合技术实验课程作业一
目录
作业内容
作业①:
要求:用requests和BeautifulSoup库方法定向爬取给定网址(http://www.shanghairanking.cn/rankings/bcur/2020)的数据,屏幕打印爬取的大学排名信息。
输出信息:
排名 | 学校名称 | 省市 | 学校类型 | 总分 |
---|---|---|---|---|
1 | 清华大学 | 北京 | 综合 | 852.5 |
2 | ...... |
作业②:
要求:用requests和re库方法设计某个商城(自已选择)商品比价定向爬虫,爬取该商城,以关键词“书包”搜索页面的数据,爬取商品名称和价格。
输出信息:
序号 | 价格 | 商品名 |
---|---|---|
1 | 65.00 | xxx |
2 | ...... |
作业③:
要求:爬取一个给定网页( https://news.fzu.edu.cn/yxfd.htm)或者自选网页的所有JPEG和JPG格式文件
输出信息:将自选网页内的所有JPEG和JPG文件保存在一个文件夹中
作业①:爬取大学排名信息
主要代码
# 定义获取院校数据的函数
def get_university_data():
url = 'https://www.shanghairanking.cn/rankings/bcur/2021'
response = requests.get(url)
response.encoding = 'utf-8'
soup = BeautifulSoup(response.text, 'html.parser')
university_data = []
# 查找包含院校信息的表格
table = soup.find('table')
for row in table.find_all('tr')[1:]:
cols = row.find_all('td')
if len(cols) > 1:
rank = cols[0].text.strip()
name = ' '.join(cols[1].text.strip().split()) # 删除换行符
province = cols[2].text.strip()
type_ = cols[3].text.strip() # 院校类型
total_score = cols[4].text.strip() # 总分
university_data.append((rank, name, province, type_, total_score))
return university_data
代码运行结果
作业心得
- 数据抓取与解析
在这次作业中,我使用了 requests 库来发送 HTTP 请求,并使用 BeautifulSoup 库来解析 HTML 内容。这两个库的结合实现数据抓取和解析。通过解析网页中的表格数据,我能够提取出每所大学的排名、名称、所在省份、类型和总分。 - 数据展示
为了更好地展示抓取到的数据,我使用了 PrettyTable 库。这个库可以将数据以表格的形式美观地展示出来。通过设置表格的字段名称和对齐方式,我能够清晰地展示每所大学的详细信息。
作业②:爬取商城中商品名称与价格
主要代码
# 获取网页内容
def get_html(url):
headers = {
'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/129.0.0.0 Safari/537.36'
}
try:
response = requests.get(url, headers=headers)
response.raise_for_status() # 确保请求成功
return response.text
except requests.RequestException as e:
print(f"Error fetching data from {url}: {e}")
return ""
# 解析网页内容,提取商品名称和价格
def parse_page(data):
uinfo = []
plt = re.findall(r'"sku_price":"([\d.]+)"', data) # 商品价格
tlt = re.findall(r'"ad_title_text":"(.*?)"', data) # 商品名称
min_length = min(len(plt), len(tlt))
for i in range(min_length):
price = plt[i]
name = tlt[i].strip()
uinfo.append((name, price)) # 添加名称和价格到uinfo列表
return uinfo
代码运行结果
作业心得
- 数据抓取与解析
在这次作业中,我使用了 requests 库来发送 HTTP 请求,并使用 BeautifulSoup 库来解析 HTML 内容。这两个库的结合实现数据抓取和解析。通过解析网页中的 JSON 数据,我能够提取出每个商品的名称和价格。 - 正则表达式的应用
在数据解析过程中,我使用了 re 库中的正则表达式来提取商品的价格和名称。在这次作业中,我通过正则表达式提取了所需的数据。
作业③:爬取网页JPEG和JPG格式文件
主要代码
# 获取网页内容
def get_html(url):
headers = {
'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/129.0.0.0 Safari/537.36'
}
try:
response = requests.get(url, headers=headers)
response.raise_for_status() # 确保请求成功
return response.text
except requests.RequestException as e:
print(f"Error fetching data from {url}: {e}")
return ""
# 解析网页内容,提取图片链接
def parse_page(html, base_url):
soup = BeautifulSoup(html, 'html.parser')
img_urls = []
for img in soup.find_all('img'):
src = img.get('src')
if src and (src.lower().endswith('.jpg') or src.lower().endswith('.jpeg')):
full_url = urljoin(base_url, src)
img_urls.append(full_url)
return img_urls
代码运行结果
作业心得
- 数据抓取与解析
在这次作业中,我使用了 requests 库来发送 HTTP 请求,并使用 BeautifulSoup 库来解析 HTML 内容。通过解析网页中的数据,我能够提取出所需的图片的URL信息。 - URL 处理
在这次作业中,我使用了 urljoin 函数来处理相对 URL 和绝对 URL 的拼接。这个函数可以确保生成的 URL 是正确的,避免了手动拼接 URL 可能带来的错误。