导航

数据采集与融合技术实践作业一

Posted on 2023-09-21 16:27    阅读(34)  评论(0编辑  收藏  举报

数据采集与融合技术实践作业一

                                                                                   102102136 陈耕

作业1:

(1)作业内容

实验要求:

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

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

代码内容:

# 导入
import requests 
from bs4 import BeautifulSoup  
import bs4  
from selenium import webdriver  # 导入selenium库,用于模拟浏览器操作
from selenium.webdriver.common.by import By  # 导入By类,用于指定元素定位方式


def getHTMLText(url):
#发送HTTP请求,获取网页内容。
    try:
        r = requests.get(url, timeout=30)  
        r.raise_for_status()  
        r.encoding = r.apparent_encoding  
        return r.text  
    except:
        return ""


def fillUnivList(ulist, html):
#解析HTML内容并将学校信息存入ulist列表。
    soup = BeautifulSoup(html, "html.parser")  
    for tr in soup.find('tbody').children:  
        if isinstance(tr, bs4.element.Tag):  
            tds = tr('td') 
            a = tr('a', 'name-cn') 
            ulist.append([tds[0].string.strip(), a[0].string.strip(), tds[2].text.strip(), tds[4].string.strip()])
            # 将学校排名、学校名称、总分分别存入ulist列表


def printUnivList(ulist, num):
#打印学校信息
    print("{:^20}\t{:^20}\t{:^20}".format("排名", "学校名称", "总分"))  # 打印表头
    for i in range(num):
        u = ulist[i]  
        print("{:^20}\t{:^20}\t{:^20}".format(u[0], u[1], u[3]))  # 打印学校排名、学校名称、总分


def main():
    uinfo = []  # 创建一个空列表存储学校信息
    url = "https://www.shanghairanking.cn/rankings/bcur/2021" # 目标网页的URL
    html = getHTMLText(url)  
    fillUnivList(uinfo, html)  
    printUnivList(uinfo, 30)  # 打印(未能翻页,实现前30个)
	
main()

具体实现:

image

(2)心得体会:

使用urllib.request和BeautifulSoup库方法进行定向爬取,具体内容是大学排名信息TOP N、学校名称、省市、学校类型、总分,查找标签等内容较为简单。

作业2:

(1)作业内容

实验要求:

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

输出信息:

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

代码内容:

# 导入
import re  
import time  
import urllib.parse  
import urllib.request 
from selenium import webdriver  # 导入selenium库,用于模拟浏览器操作

Lname = []  # 创建一个空列表,用于存储商品名称
Lprince = []  # 创建一个空列表,用于存储商品价格

print('正在爬取 ...')

browser.get('https://www.guangshop.com/?r=/l&kw=%25E4%25B9%25A6%25E5%258C%2585&origin_id=&sort=0')#将商城网站设置为:逛商城
time.sleep(15)  # 等待页面加载完成
browser.refresh()  # 刷新
ab = browser.page_source  # 获取页面源代码

# 使用正则表达式匹配商品名称和价格(关键就是正则表达式的表示)
name = re.findall('<span data-v-f62188ba="">[\u4e00-\u9fa50-9a-zA-Z【】\-!]*包[\u4e00-\u9fa50-9a-zA-Z【】\-!]*</span>', ab)
prince = re.findall('<span data-v-f62188ba="" class="price">\d*\.*\d*', ab)

# 遍历匹配结果,将商品名称和价格存入对应的列表
for item in name:
    item = item.replace('<span data-v-f62188ba="">', '')
    item = item.replace('</span>', '')
    Lname.append(item)
for item in prince:
    item = item.replace('<span data-v-f62188ba="" class="price">', '')
    Lprince.append(item)

# 打印商品名称和价格
for i in range(1, 61):
    print(str(i) + '. ' + Lname[i] + '     ' + Lprince[i])

具体实现:

image

(2)心得体会:

在同学推荐下了解到了selenium库,体验到使用webdriver进行网页爬取的便捷,对定向爬虫更加了解。
淘宝网作为一个大型电商平台,为了保护自身的利益和数据安全,采取了一系列反爬机制如IP限制、验证码、用户行为分析等来防止恶意爬虫对其网站进行大量访问和数据抓取。所以再一开始并没有顺利爬取。在更换商城网站之后成功运行。

作业3:

(1)作业内容

实验要求:

要求:
爬取一个给定网页( https://xcb.fzu.edu.cn/info/1071/4481.htm)
或者自选网页的所有JPEG和JPG格式文件
输出信息:
将自选网页内的所有JPEG和JPG文件保存在一个文件夹中

代码内容:

#导入
from bs4 import BeautifulSoup
import re
import urllib.request
import time
from selenium import webdriver
browser = webdriver.Edge()	# 创建browser对象
#打开网站
browser.get('https://xcb.fzu.edu.cn/info/1071/4481.htm')
i = 1
time.sleep(15)# 等待页面加载完成
html = browser.page_source# 获取页面源代码
soup = BeautifulSoup(html, "lxml") # 解析HTML
list = []# 创建一个空列表list,用于存储图片链接
lis = soup.select("img")# 使用CSS选择器获取所有img标签

x = 1
for ls in lis:
    image_name = "C:/Users/admin/PycharmProjects/pythonProject1/爬虫/实践/" + str(x) + ".jpg"# 图片保存路径
    x = x +1
    image_url = "https://xcb.fzu.edu.cn" + str(ls["src"])# 图片链接
    print(image_url)
    try:
        urllib.request.urlretrieve(image_url, filename=image_name) # 下载图片并保存到本地
    except urllib.error.URLError as error:
        print(error)

具体实现:

image

image

(2)心得体会:

1.图片下载的过程是较为缓慢的,可能是因为校园内网;
2.学会了使用webdriver来爬取动态网页;
3.在正则表达式的表达中初次表达不成功,完成后也有了更深的印象。