作业①:
要求:用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函数进行下载图片,让我受益匪浅。