作业1
要求:用requests和BeautifulSoup库方法定向爬取给定网址(http://www.shanghairanking.cn/rankings/bcur/2020 )的数据,屏幕打印爬取的大学排名信息。
输出信息:
| 排名 | 学校名称 | 省市 | 学校类型 | 总分 |
|---|---|---|---|---|
| 1 | 清华大学 | 北京 | 综合 | 852.5 |
| 2 | ... | ... | ... | ... |
运行截图和代码:

import urllib.request
from bs4 import BeautifulSoup
#尾号31,暂时不会翻页
def get_html(url):
headers = {'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/58.0.3029.110 Safari/537.3'}
req = urllib.request.Request(url=url, headers=headers)
html = urllib.request.urlopen(req).read().decode('utf-8')
return html
def parse_html(html):
print("排名 大学名称 省份 类型 总分")
soup = BeautifulSoup(html, 'lxml')
# 根据实际的HTML结构来找到大学排名的数据
new = soup.select("table[class='rk-table'] tbody tr") #F12发现tbody下每个tr就是大学的信息
for tr in new:
try :
td_list = tr.select("td")
if len(td_list) >= 5:
rank = td_list[0].text.strip()
name = tr.select("td a")[0].text.strip()
province = td_list[2].text.strip()
type = td_list[3].text.strip()
score = td_list[4].text.strip()
print(rank, name, province, type, score, sep="\t")
except Exception as err:
print("error")
def main():
url = "https://www.shanghairanking.cn/rankings/bcur/2020"
html = get_html(url)
parse_html(html)
if __name__ == "__main__":
main()
心得体会:
最开心的地方就是这个网站没有反爬技术了,只要正确找到元素就行了
作业2
要求:用requests和re库方法设计某个商城(自已选择)商品比价定向爬虫,爬取该商城,以关键词“书包”搜索页面的数据,爬取商品名称和价格。
输出信息:
| 序号 | 价格 | 商品名 |
|---|---|---|
| 1 | 65.00 | xxx |
| 2 | ... | ... |
运行截图和代码:

#爬取当当网“书包”搜索页的商品名称和价格
from bs4 import BeautifulSoup
from fake_useragent import UserAgent
import requests
# 创建一个随机User-Agent生成器
user_agent = UserAgent()
# 设置请求头
headers = {
'User-Agent': user_agent.random,
}
def gethtml(url):
session = requests.Session()
html = session.get(url)
return html
def crawl(html):
soup = BeautifulSoup(html, 'lxml')
names = soup.select("li[class^= 'line'] a img")
prices = soup.select("li[class^= 'line'] p[class = 'price'] span")
i = 0
for name,price in zip(names,prices):
i +=1
print("第{}个商品:".format(i))
print("商品名称:",name["alt"],"商品价格:",price.text)
if __name__ == "__main__":
url = "http://search.dangdang.com/?key=%CA%E9%B0%FC&act=input&page_index=1"
html = gethtml(url).text
crawl(html)
心得体会:
没有反爬!!一开始写的淘宝,但是反爬机制有点难对付,就转向当当了,注意到商品的名称其实就是a的title和img的alt,就直接用了
作业3
要求:爬取一个给定网页( https://xcb.fzu.edu.cn/info/1071/4481.htm)或者自选网页的所有JPEG和JPG格式文件
输出信息:将自选网页内的所有JPEG和JPG文件保存在一个文件夹中
运行截图和代码:

from bs4 import BeautifulSoup
from fake_useragent import UserAgent
import os
import requests
# 创建一个随机User-Agent生成器
user_agent = UserAgent()
# 设置请求头
headers = {
'User-Agent': user_agent.random,
}
url = "https://xcb.fzu.edu.cn/info/1071/4481.htm"
def gethtml(url):
session = requests.Session()
html = session.get(url)
return html
def crawl(html):
if not os.path.exists("picture"):
os.makedirs("picture")
soup = BeautifulSoup(html, 'lxml')
pictures = soup.select("p[class = 'vsbcontent_img'] img")
i = 0
for picture in pictures:
i +=1
picture_url = "https://xcb.fzu.edu.cn/"
img_url = picture_url + picture["src"]
image_name = "Picture{}.jpeg".format(i)
img = gethtml(img_url).content
with open("picture/" + image_name ,"wb" ) as f:
f.write(img)
if __name__ == "__main__":
html = gethtml(url).text
crawl(html)
心得体会:
图片所在的地址的前缀跟网址是不一样的,要重新设置一个url才能正确找到图片并爬取,地址直接获取的是img里的src,前面再加上url