文章目录
- 一、初识网络爬虫
- 1.1 网络爬虫定义
- 1.2 爬虫原理
- 1.3 爬虫工作的过程
- 二、示例一
- 2.1 需要的内置库以及第三方库
- 2.2 具体代码
- 2.3 结果展示:
- 三、示例二
- 3.1 确定要爬取信息的位置
- 3.2 具体代码
- 3.3 结果展示
- 四、总结
- 五、参考文献
一、初识网络爬虫
1.1 网络爬虫定义
网络爬虫英文名叫Web Crawler或Web Spider,是一种自动浏览网页并采集所需要信息的程序
1.每个节点都是一个网页
2.每条边都是一个超链接
3.网络爬虫就是从这样一个网络图中抓取感兴趣的内容
1.2 爬虫原理
- 爬虫从初始网页的URL开始, 获取初始网页上的URL
- 在抓取网页的过程中,不断从当前页面上抽取新的URL放入队列
- 直到满足系统给定的停止条件
1.3 爬虫工作的过程
- URL管理模块:发起请求。一般是通过HTTP库,对目标站点进行请求。等同于自己打开浏览器,输入网址
- 下载模块:获取响应内容(response)。如果请求的内容存在于服务器上,那么服务器会返回请求的内容,一般为:HTML,二进制文件(视频,音频),文档,Json字符串等
- 解析模块:解析内容。对于用户而言,就是寻找自己需要的信息。对于Python爬虫而言,就是利用正则表达式或者其他库提取目标信息
- 存储模块:保存数据。解析得到的数据可以多种形式,如文本,音频,视频保存在本地
网络爬虫具体详情参考:什么是网络爬虫?有什么用?怎么爬?终于有人讲明白了
二、示例一
爬取南阳理工学院ACM题目网站http://www.51mxd.cn/ 练习题目数据的抓取和保存
编程工具:vscode
运行环境:Python3.8
2.1 需要的内置库以及第三方库
2.2 具体代码
- 导入库(本次调用了 requests网页请求库和Beautiful Soup网页解析库)
import requests #导入网页请求库
from bs4 import BeautifulSoup #导入网页解析库
import csv
from tqdm import tqdm #Tqdm 是一个快速,可扩展的Python进度条
完整代码:
import requests #导入网页请求库
from bs4 import BeautifulSoup #导入网页解析库
import csv
from tqdm import tqdm #Tqdm 是一个快速,可扩展的Python进度条#模拟浏览器访问
Headers = 'Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/70.0.3538.25 Safari/537.36 Core/1.70.3741.400 QQBrowser/10.5.3863.400'#表头
csvHeaders = ['题号','难度','标题','通过率','通过数/总提交数']#题目数据
subjects = [];#爬取题目
print('题目信息爬取中:\n')
for pages in tqdm(range(1,11+1)):#信息从第1页到12页#传入urlr=requests.get(f'http://www.51mxd.cn/problemset.php-page={pages}.htm',Headers)#检查是否异常r.raise_for_status()#输出文档为utf-8编码r.encoding = 'utf-8'# 解析URLsoup = BeautifulSoup(r.text, 'html5lib')#查找爬取与csvHeaders表头中相关所有内容td = soup.find_all('td')#新定义一个subject用来存放当前页面爬取的满足特征的信息subject = []for t in td:if t.string is not None:subject.append(t.string)if len(subject) == 5:#通过长度判断subject内容是否爬取到上面5项subjects.append(subject)#把subject存放进上面的subjects中subject = []#subject置空# 存放题目
with open('information.csv', 'w', newline='') as file:fileWriter = csv.writer(file)fileWriter.writerow(csvHeaders)fileWriter.writerows(subjects)print('\n题目信息爬取完成!!!')
2.3 结果展示:
三、示例二
将重庆交通大学新闻网站中近几年所有的信息通知(http://news.cqjtu.edu.cn/xxtz.htm) 的发布日期和标题全部爬取下来,并写到CSV电子表格中。
3.1 确定要爬取信息的位置
1.右键要爬的信息,点击检查
2.观察我们需要爬取的信息所在的位置
这里爬取的是时间和标题
3.2 具体代码
import requests #导入网页请求库
from bs4 import BeautifulSoup #导入网页解析库
import csv
from tqdm import tqdm #Tqdm 是一个快速,可扩展的Python进度条
import urllib.request, urllib.error # 制定URL 获取网页数据#所有新闻标题
subjects=[]#模拟浏览器访问
Headers = {#模拟浏览器头部信息
"User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36 Edg/95.0.1020.53"}#表头
csvHeaders=['时间','标题']print('信息爬取中:\n')
for pages in tqdm(range(1,65+1)):#信息从第一页到66页#发出请求request=urllib.request.Request(f'http://news.cqjtu.edu.cn/xxtz/{pages}.htm',headers=Headers)html="";#请求成功则获取网页内容try:response = urllib.request.urlopen(request)html = response.read().decode("utf-8")except urllib.error.URLError as e:if hasattr(e,"code"):print(e.code) #如果捕获到了HTTPError,则输出codeif hasattr(e,"reason"):print(e.reason) #如果捕获到了URLError,则输出reason#解析网页soup=BeautifulSoup(html,'html5lib')#存放一条新闻subject=[]#查找所有li标签li=soup.find_all('li')#执行流程:l依次表示li中的一个元素,遍历完所有元素循环结束for l in li:#查找满足条件的div标签if l.find_all('div',class_="time") is not None and l.find_all('div',class_="right-title") is not None:#时间for time in l.find_all('div',class_="time"):subject.append(time.string)#新闻标题for title in l.find_all('div',class_="right-title"):for t in title.find_all('a',target="_blank"):subject.append(t.string)if subject:print(subject)subjects.append(subject)subject=[]
#保存数据
with open('new.csv','w',newline='',encoding='utf-8') as file:fileWriter=csv.writer(file)fileWriter.writerow(csvHeaders)fileWriter.writerows(subjects)print('\n信息爬取完成!!!')
3.3 结果展示
四、总结
简单的网络爬虫还是比较容易实现,Python中通过调用库来进行爬虫获取信息比较简单方便。爬虫的深入理解还需要我们长时间的学习。
五、参考文献
网络爬虫入门
什么是网络爬虫?有什么用?怎么爬?终于有人讲明白了