作业一
要求:用requests和BeautifulSoup库方法定向爬取给定网址(http://www.shanghairanking.cn/rankings/bcur/2020)的数据,屏幕打印爬取的大学排名信息。
输出信息:
排名 学校名称 省市 学校类型 总分
1 清华大学 北京 综合 852.5
代码:
import requests
from bs4 import BeautifulSoup
line = "{:^10}\t{:^10}\t{:^12}\t{:^12}\t{:^10}" # 定义一个格式化字符串,用于输出表格数据。
print(line.format("排名", "学校名称", "省份", "学校类型", "总分"))
url = 'http://www.shanghairanking.cn/rankings/bcur/2020'
response = requests.get(url)
response.encoding = 'utf-8'
content = response.text
soup = BeautifulSoup(content,'lxml')
trs = soup.select('tbody>tr') # 通过CSS选择器获取网页中所有表格行()元素
for tr in trs:
sum = tr.select('td')
rank = sum[0].text.strip() # 获取排名数据
name = sum[1].find("div",class_="link-container").text.strip() # 获取学校名称数据
province = sum[2].text.strip() # 获取省份数据
tybe = sum[3].text.strip() # 获取类型数据
score = sum[4].text.strip() # 获取总分数据
print(line.format(rank,name,province,tybe,score))
运行结果:

心得体会:
通过使用requests和BeautifulSoup库方法定向爬取数据,是我初步了解爬虫的概念,同时加强了对requests和BeautifulSoup库的运用,加深了对爬虫的理解,然而这段代码也存在一些问题。首先,没有处理可能出现的网络错误,例如服务器无法访问、请求超时等。其次,没有处理网页的结构可能会发生变化的情况。如果网页的结构发生了变化,例如某个元素的标签变了,或者某个元素的类名变了,那么这段代码可能就无法正常工作了。总之这只是一个简单爬虫程序,还需要不断地学习。
作业二
要求:用requests和re库方法设计某个商城(自已选择)商品比价定向爬虫,爬取该商城,以关键词“书包”搜索页面的数据,爬取商品名称和价格。
代码:
import re import requests url = 'http://search.dangdang.com/?' headers = { 'User-Agent':'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/117.0.0.0 Safari/537.36' } data = { 'key':'书包' } response = requests.get(url=url, params=data,headers=headers) response.encoding = 'gbk' # 通过F12里的console输入document.charset获得编码格式 content = response.text # 使用正则表达式查找商品名字和价格 name = re.findall(r".' alt=' (.*?)' /><p class=",content) # 由于这个正则表示式过于复杂,采用在线网址生成 price = re.findall(r'<span class="price_n">¥(.+?)</span>',content) # 设置输出格式 line = "{:^4}\t{:^4}\t{:^14}" print(line.format("序号", "价格", "商品名")) for i in range(1,len(price)): print(line.format(i,price[i-1],name[i-1]))
运行结果:
心得体会:这个作业是用re库和requests库来解决,但是我感觉用re库反而比较复杂点,在爬取当当网的书包数据时,爬取书包名称的正则表达式实在搞不出来,最后用生成网站生成成功,嗯,总之加深了对re库和requests库的理解与运用
作业三
要求:爬取一个给定网页( https://xcb.fzu.edu.cn/info/1071/4481.htm )或者自选网页的所有JPEG和JPG格式文件
输出信息:将自选网页内的所有JPEG和JPG文件保存在一个文件夹中
代码:
import requests
from bs4 import BeautifulSoup
import os
# 要爬取的网页URL
url = "https://xcb.fzu.edu.cn/info/1071/4481.htm"
# 检查名为"downloaded_images"的文件夹是否存在
output_folder = "downloaded_images"
if not os.path.exists(output_folder):
os.makedirs(output_folder)
response = requests.get(url)
response.encoding = 'utf-8'
content = response.text
soup = BeautifulSoup(content, 'lxml')
# 找到网页中所有的<img>标签
imgs = soup.find_all('img')
count = 0 # 是用来给图片排序
for img in imgs:
img_url = 'https://xcb.fzu.edu.cn' + img['src']
response = requests.get(img_url, stream=True)
with open(f'C:/Users/李嘉迅/PycharmProjects/pythonProject/数据采集/实验一/downloaded_images/image{count}.jpg', 'wb') as file:
# 使用了一个循环来迭代处理响应的内容,每次处理的数据块大小为1024字节。如果获取到的数据块非空,则将其写入文件中。
for chunk in response.iter_content(chunk_size=1024):
if chunk:
file.write(chunk)
count += 1
运行结果:

心得体会:这次爬取比较顺利,没什么好说的,但是有些网站会使用JavaScript动态加载图片,需要更复杂的爬虫技术来处理。此外,有些网站会对爬虫进行反爬措施,如限制访问频率、要求登录等,要学习的还是很多。