欢迎来到Introzo百科
Introzo百科
当前位置:网站首页 > 技术 > 2023年数据采集与融合技术实践作业1

2023年数据采集与融合技术实践作业1

日期:2023-10-03 16:17

作业①:

需求:使用requests和BeautifulSoup库方法从给定的URL(http://www.introzo.com/rankings/bcur/2020)爬取数据,并将爬取到的大学排名信息打印在屏幕上。

输出信息:

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

导入bs4.element
从 bs4 导入 BeautifulSoup
导入 urllib.request
#从网站获取信息
def getHTMLText(url):
    尝试:
        请求 = urllib.request.Request(url)
        数据 = urllib.request.urlopen(req)
        数据 = www.introzo.com().decode()
        返回数据
    除了异常错误:
        打印(错误)
#对html中的内容进行处理并整合
def fillList(列表,html):
    汤 = BeautifulSoup(html,"html.parser")
    对于 soup.find('tbody').children 中的 tr:
        if isinstance(tr,bs4.element.Tag):
            a = tr('a')
            tds = tr('td')
            list.append([tds[0].text.strip(),a[0].string.strip()
                         ,tds[2].text.strip(),tds[3].text.strip()
                         ,tds[4].text.strip()])
#输出学校排名
def printList(list1,num):tplt = "{0: ^10}\t{1: ^10}\t{2: ^12}{3: ^10}\t{4: ^10}"
    print(tplt.format("排名","学校名称","省市","学校类型","总分"))
    对于范围内的 i(num):
        u = 列表 1[i]
        打印(tplt.format(u [0],u [1],u [2],u [3],u [4]))
    print("上面共有记录" + str(num) + "Bar.")
元素=[]
url = "https://www.introzo.com/rankings/bcur/2020"#网站信息

html = getHTMLText(网址)
填充列表(元素,html)
打印列表(元素,30)

效果如下

经验

通过这次实验,我学习了request和BeautifulSoup库中比较简单的知识,学会了find、BeautifulSoup、request等函数的使用,让我受益匪浅。

作业②:

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

输出信息:

序列号 价格 产品名称
1 65.00 xxx

来自 selenium 导入 webdriver
导入时间
进口重新

所有名称 = []
所有价格 = []
browser = webdriver.Edge() # 创建驱动程序对象(使用edge浏览器打开)browser.get('https://www.introzo.com/?r=/l&kw=%25E4%25B9%25A6%25E5%258C%2585&origin_id=&sort=0')

时间.睡眠(3)

# 刷新浏览器
浏览器刷新()

#获取html界面中所有元素
html = 浏览器.page_source

#使用正则表达式提取产品名称和价格
名称 = re.findall('[\u4e00-\u9fa50-9a-zA-Z【】\-!]*包[\u4e00-\u9fa50-9a-zA-Z【】\-!]*', html)
价格 = re.findall('\d*\.*\d*', html)

#观察元素特征,区分元素,保留有用的元素
对于名称中的名称:
    名称 = str(名称).split(">")[1]
    名称 = 名称.split("<")[0]
    all_name.append(名称)
对于价格中的价格:
    价格 = str(价格).split(">")[1]
    all_price.append(价格)

#输出产品名称和价格
for i in range(1,61): # 提取60条产品信息
    print(str(i)+' '+all_name[i]+' '+all_price[i])

效果如下

经验

这个作业教会了我使用selenium库访问网页,学习使用re.find_all函数处理获取到的元素

作业③:

要求:抓取给定网页(https://www.introzo.com/info/1071/4481.htm)或自选网页的所有JPEG、JPG格式文件

输出信息:将所选网页中的所有JPEG和JPG文件保存在文件夹中

导入urllib.request
从 bs4 导入 BeautifulSoup
#需要抓取的网站URL
url = "https://www.introzo.com/info/1071/4481.htm"
#获取网页元素
响应 = urllib.request.urlopen(url)
内容 = 响应.read()
html = content.decode("utf-8")
#打印(html)
汤 = BeautifulSoup(html,"lxml")
# 打印(汤)
图像 = www.introzo.com('img[src]')
元素=[]
#将图片地址与网页元素分开
对于图像中的图像:
    # 打印(类型(图像))
    image1 = str(image).split('"')[1]
    #print(类型(图像1))
    image2 = image1.split('"')[0]
    #打印(图像2)
    elements.append("https://www.introzo.com/"+image2)
#下载图片到指定文件夹
我=0
对于元素中的元素:
    urllib.request.urlretrieve(element, f'D:/pythonProject/caiji/shijian1/{i}.jpg')
    我+=1
    打印(元素)

效果如下

经验

通过这次实验,我学会了如何使用request.urlretrieve函数来下载图片,让我受益匪浅。

关灯