Python初级爬虫——爬取UIBE教务处(requests+bs4)

最基础爬虫——Python requests+bs4爬取UIBE教务处

1.使用工具

1.Python 3.x

2.第三方库 requests,bs4

3.浏览器

2.具体思路

UIBE教务处网站开放程度较高,无反爬虫措施,只需要使用最基础的爬虫手段即可。使用requests库获取网页源码,使用bs4中BeautifulSoup库进行网页解析,定位到目标元素即可。

首先得到教务处网站url为:http://jwc.uibe.edu.cn/

UIBE教务处
导入两个第三方库:

import requests
from bs4 import BeautifulSoup

然后对该url进行get,向其发起请求,并得到其文本内容,使用BeautifulSoup进行转化。

r = requests.get(r"http://jwc.uibe.edu.cn/")#此处使用原字符串避免产生字符误读
soup = BeautifulSoup(r.text)#soup即为使用BeautifulSoup转化之后的对象

然后我们定位爬取目标所在元素,此例中我们计划爬取首页上的所有重要通知的标题

打开该网页,F12检查,点击左上角的定位标识打开定位模式,再点击第一条重要通知

检查

从右侧的界面源码中我们可以观察到,每一条通知展示在页面ul(class = newsList)元素的每一个li元素中,因此我们先使用find定位该ul元素,然后在该元素中使用find_all找到所有的li元素:

div_newslist = soup.find("ul", class_ = "newsList")#由于class是python关键字,此处需要在class后买你加上下划线
li_lst = div_newslist.find_all("li")#得到的li_lst是一个列表,列表的每一个元素是一个li元素

进一步观察发现通知的标题展示在li中的a标签中,且展示在该标签中的title属性,所以遍历li_lst列表,打印出里面每一个元素中a标签中的title属性:

for li in li_lst:
    a = li.find("a")
    print(a["title"])#打印属性使用中括号的形式,打印内容使用.text的形式
    #如要将爬取到的内容存储进文件里,可在此使用一个列表进行暂存,然后将该列表写入文件

我们即可获取到所需的全部通知标题了:
爬取结果

3.代码

全部代码如下:

import requests
from bs4 import BeautifulSoup

r = requests.get(r"http://jwc.uibe.edu.cn/")#此处使用原字符串避免产生字符误读
soup = BeautifulSoup(r.text)#soup即为使用BeautifulSoup转化之后的对象
div_newslist = soup.find("ul", class_ = "newsList")#由于class是python关键字,此处需要在class后买你加上下划线
li_lst = div_newslist.find_all("li")#得到的li_lst是一个列表,列表的每一个元素是一个li元素
for li in li_lst:
    a = li.find("a")
    print(a["title"])#打印属性使用中括号的形式,打印内容使用.text的形式
    #如要将爬取到的内容存储进文件里,可在此使用一个列表进行暂存,然后将该列表写入文件

4. 注意

1. 编码问题

有的网站可能不是使用requests默认的”ISO“进行编码,requests获取到的内容可能呈现乱码,这种情况下可以查看requests对象的apparent_encoding属性来查看其编码,并通过设置其encoding属性来改变编码方式。

it_encoding = r.apparent_encoding
print(it_encoding)#根据请求头判断的网页的编码方式
r.encoding = it_encoding

2.休眠问题

当需要爬取一个服务器下的多个网站时,可能会因为访问速度过快被禁止访问,这种情况下一般需要在爬取中进行一定时间的休眠。

import time
import random
#导入两个库
time.sleep(random.random())#休眠一个0到1的随机时间,单位:s
#该语句一般加在每一次访问的前面
#当访问量较大,目标网站反爬虫措施较严格时,可将随机区间延长

3. 请求头问题

部分网站会通过辨认请求头来判定请求是否为人工用户发起的,如果使用爬虫默认的请求头,则拒绝访问的概率较大。

对于部分有反爬措施,但反爬措施不是很严格的网站,可以使用最简单的请求头:

header = {"user-agent" : "Mozilla/5.0"}

对于一些较为严格的网站,可能需要构造专门的请求头来模拟人为访问。

对于其他反反爬手段,敬请参阅本人其他博客

python大作业 一、Turtle创意大PK 自拟题目,完成一个利用Python程序的创意绘图,采用turtle库绘图为主,不少于50行代码,可选采用其他库。 (滑稽绘制) 二、程序练习 2.1 问题描述(10分) 人们常常提到"一万小时定律",就是不管你做什么事情,只要坚持一万小时,应该都可以成为该领域的专家。那么,10000小时是多少年多少天呢? 2.2 问题描述(10分)0380031003800341590145037657 编写计算从n到m和的函数‬,函数名为sum(n,m)‬,函数返回值为n到m所有数据的和‬,使用该函数计算输入数据x,y之间所有数据的和。 2.3 问题描述(15分) 编写函数judgeTri(a,b,c),判断以参数a,b,c的值为边长能否构成三角形并判断三角形的形状;若是锐角三角形,返回R;若是直角三角形,返回Z;若是钝角三角形,返回D;若三边长不能构成三角形,返回ERROR。 2.4 问题描述(15分) 用户输入一个字符串,分别统计其中小写字母、大写字母、数字、空格和其他字符的个数,并在一行内输出小写字母、大写字母、数字、空格和其他字符的个数。 2.5 问题描述(20分) 程序的功能: (1) 使用随机库功能,生成一个包含10个不重复且小于200的正整数列表ls1,输出ls1。‬ (2) 使用列表排序方法,对ls1按奇数在前偶数在后,并且奇数之间的相对顺序不变,偶数之间的相对顺序也不变进行排序,再输出ls1。‬ (3) 使用列表排序方法,对ls1按元素字符长度降序进行排序,输出ls1。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值