题目一
# 要求:用requests和BeautifulSoup库方法定向爬取给定网址(http://www.shanghairanking.cn/rankings/bcur/2020 )的数据,
# 屏幕打印爬取的大学排名信息。
#102102138陈培庆
from bs4 import BeautifulSoup
from bs4 import UnicodeDammit
import urllib.request
def daxue():
# 要爬取的网站
url="http://www.shanghairanking.cn/rankings/bcur/2020"
req=urllib.request.Request(url)
data=urllib.request.urlopen(req)
# 读取网站信息
data=data.read()
dammit=UnicodeDammit(data,["utf-8","gbk"])
data=dammit.unicode_markup
# beautifulsoup解析网页内容
soup=BeautifulSoup(data,"html.parser")
# 使用css语法查找元素,查找<tbody>下的<tr>标签,返回一个列表,列表中存储每个大学的信息
list=soup.select("tbody tr")
tplt = "{0:^13}\t{1:^13}\t{2:^13}\t{3:^10}\t{4:^10}"
print(tplt.format("排名","学校","省市","类型","总分",chr(12288)))
for item in list[0:40]:
ls=item.select("td")
length=len(ls)
count=0
inf=[]
for i in ls[0:5]:
count+=1
text = i.text.replace(" ", "").replace("\n", "")
inf.append(text)
# 依次输出大学信息
print(tplt.format(inf[0],inf[1],inf[2],inf[3],inf[4],chr(12288)))
daxue()
- 运行结果示意

- 心得体会
学会了css算法的使用
题目二
- 要求:用requests和re库方法设计某个商城(自已选择)商品比价定向爬虫,爬取该商城,以关键词“书包”搜索页面的数据,爬取商品名称和价格。
# 要求:用requests和re库方法设计某个商城(自已选择)商品比价定向爬虫,爬取该商城,
# 以关键词“书包”搜索页面的数据,爬取商品名称和价格。
#102102138陈培庆
import os
import pickle
import time
from bs4 import BeautifulSoup
import re
from selenium import webdriver
from selenium.webdriver.common.by import By
#自动打开网站
j = 0
#提前爬取cookie进行读取实现免登录
def readTaobaoCookies():
# if hava cookies file ,use it
# if not , getTaobaoCookies()
if os.path.exists('jdCookies.pickle'):
readPath = open('jdCookies.pickle','rb')
jdCookies = pickle.load(readPath)
return jdCookies
jdCookies = readTaobaoCookies()
def FindGoods(html):
soup = BeautifulSoup(html, "lxml")
lis = soup.select("ul[class='gl-warp clearfix'] li")
lis = soup.find_all("li", {"data-sku": re.compile("\d+")})
for li in lis:
price1 = li.find("div", attrs={"class": "p-price"}).find("strong").find("i")
price = price1.text
name1 = li.find("div", attrs={"class": "p-name"}).find("a").find("em")
name = name1.text.strip()
j = j + 1
t = '\t'
print(j, t, name, t, price)
try:
browser = webdriver.Chrome() # 创建browser对象
goods = input('请输入您想爬取的商品:')
browser.get("https://www.jd.com")
for cookie in jdCookies:
browser.add_cookie({
"domain": ".jd.com",
"name": cookie,
"value": jdCookies[cookie],
"path": '/',
"expires": None
})
input_element = browser.find_element(By.ID, "key") # 使用 id 属性定位输入框
input_element.send_keys(goods) # 输入要搜索的商品
searchbutton = browser.find_element(By.CSS_SELECTOR, 'button[clstag="h|keycount|h|keycount|head|search_a"]')
searchbutton.click()
time.sleep(10)
browser.execute_script('window.scrollTo(0, document.body.scrollHeight)')
html = browser.page_source
print("序号\t商品名称\t\t\t\t\t\t\t\t价格")
FindGoods(html)
except Exception as err:
print(err)
- 运行结果示意

- 心得体会
由于出现反爬,利用webdriver登录网页,进行网页爬取,学习了webdriver的相关内容,掌握了cookies的使用方法,提前获取cookies,从而实现免登录爬取界面
题目三
# 要求:爬取一个给定网页( https://xcb.fzu.edu.cn/info/1071/4481.htm)或者自选网页的所有JPEG和JPG格式文件
# 输出信息:将自选网页内的所有JPEG和JPG文件保存在一个文件夹中
# 102102138陈培庆
from bs4 import BeautifulSoup
import re
import urllib.request
import time
from selenium import webdriver
browser = webdriver.Chrome() # 创建browser对象
#自动打开网站
browser.get('https://xcb.fzu.edu.cn/info/1071/4481.htm')
i = 1
time.sleep(15)
browser.maximize_window()
html = browser.page_source
soup = BeautifulSoup(html, "lxml")
imagelist = []
lis = soup.select("img")
x = 1
for ls in lis:
if str(ls["src"])[-4:] == "jpeg" :
imageurl = "https://xcb.fzu.edu.cn" + str(ls["src"])
imagename = "C:/Users/88561/Desktop/爬取/" + str(x) + ".jpeg"
elif str(ls["src"])[-3:] == "jpg":
imageurl = "https://xcb.fzu.edu.cn" + str(ls["src"])
imagename = "C:/Users/88561/Desktop/爬取/" + str(x) + ".jpg"
print(imageurl)
x = x + 1
try:
urllib.request.urlretrieve(imageurl, filename=imagename)
except urllib.error.URLError as e:
print(e)
- 运行结果示意

- 心得体会
下载文件时应该注意原文件的格式,不然会导致爬取后,文件图片无法打开