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

发布时间 2023-09-23 18:11:11作者: 人生几何5

作业①:

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

输出信息:

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

import bs4.element
from bs4 import BeautifulSoup
import urllib.request
#获得网站中的信息
def getHTMLText(url):
    try:
        req = urllib.request.Request(url)
        data = urllib.request.urlopen(req)
        data = data.read().decode()
        return data
    except Exception as err:
        print(err)
#处理html中的内容,并整合
def fillList(list,html):
    soup = BeautifulSoup(html,"html.parser")
    for tr in soup.find('tbody').children:
        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("排名", "学校名称", "省市", "学校类型", "总分"))
    for i in range(num):
        u = list1[i]
        print(tplt.format(u[0], u[1], u[2], u[3], u[4]))
    print("以上共有记录" + str(num) + "条。")
element = []
url = "https://www.shanghairanking.cn/rankings/bcur/2020"#网址信息

html = getHTMLText(url)
fillList(element, html)
printList(element, 30)

效果如下所示

心得体会

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

作业②:

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

输出信息:

序号 价格 商品名
1 65.00 xxx

from selenium import webdriver
import time
import re

all_name = []
all_price = []
browser = webdriver.Edge()	# 创建driver对象(用edge浏览器打开)
browser.get('https://www.guangshop.com/?r=/l&kw=%25E4%25B9%25A6%25E5%258C%2585&origin_id=&sort=0')

time.sleep(3)

# 刷新浏览器
browser.refresh()

# 最大化浏览器窗口
browser.maximize_window()

#获得html界面中所有的元素
html = browser.page_source

#利用正则表达式提取商品名称与价格
names = re.findall('<span data-v-f62188ba="">[\u4e00-\u9fa50-9a-zA-Z【】\-!]*包[\u4e00-\u9fa50-9a-zA-Z【】\-!]*</span>', html)
prices = re.findall('<span data-v-f62188ba="" class="price">\d*\.*\d*', html)

#观察元素特性,对元素进行区分,保留有用元素
for name in names:
    name = str(name).split(">")[1]
    name = name.split("<")[0]
    all_name.append(name)
for price in prices:
    price = str(price).split(">")[1]
    all_price.append(price)

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

效果如下所示

心得体会

本次作业让我学会使用selenium库进行对网页的访问,学会使用re.find_all函数对获得的元素进行处理

作业③:

要求:爬取一个给定网页( https://xcb.fzu.edu.cn/info/1071/4481.htm)或者自选网页的所有JPEG和JPG格式文件

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

import urllib.request
from bs4 import BeautifulSoup
#需要爬取网站的网址
url = "https://xcb.fzu.edu.cn/info/1071/4481.htm"
#获得网页元素
response = urllib.request.urlopen(url)
content = response.read()
html = content.decode("utf-8")
#print(html)
soup = BeautifulSoup(html,"lxml")
# print(soup)
images = soup.select('img[src]')
elements = []
#从网页元素中分出图片地址
for image in images:
    # print(type(image))
    image1 =  str(image).split('"')[1]
    #print(type(image1))
    image2 = image1.split('"')[0]
    #print(image2)
    elements.append("https://xcb.fzu.edu.cn/"+image2)
#下载图片到指定文件夹
i = 0
for element in elements:
    urllib.request.urlretrieve(element, f'D:/pythonProject/caiji/shijian1/{i}.jpg')
    i+=1
    print(element)

效果如下所示

心得体会

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