700字范文,内容丰富有趣,生活中的好帮手!
700字范文 > 【网络爬虫】网络爬虫之入门练习

【网络爬虫】网络爬虫之入门练习

时间:2020-05-12 18:04:29

相关推荐

【网络爬虫】网络爬虫之入门练习

一、网络爬虫基本介绍

网络爬虫(又被称为网页蜘蛛,网络机器人,在FOAF社区中间,更经常的称为网页追逐者),是一种按照一定的规则,自动地抓取万维网信息的程序或者脚本。

简单来说就是通过编写脚本模拟浏览器发起请求获取数据。爬虫从初始网页的URL开始, 获取初始网页上的URL,在抓取网页的过程中,不断从当前页面抽取新的url放入队列。直到满足系统给定的停止条件才停止。

二、爬取南阳理工OJ题目

爬取目标网址:练习场 - ACM在线评测系统

爬取任务:爬取每道题的题号难度标题通过率通过数/总提交数

1. 网页分析

打开待爬取的网页,发现改变页数仅需改变网址/problemset.php-page=n.htm中的变量n

查看页面源码,找到待爬取的数据位置

2. 内容爬取

编写代码

import requestsfrom bs4 import BeautifulSoupimport csvfrom tqdm import tqdm# 模拟浏览器访问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')# tqdm作业:以进度条方式显示爬取进度# 爬取11页所有题目信息for pages in tqdm(range(1, 11 + 1)):# get请求第pages页r = requests.get(f'/problemset.php-page={pages}.htm', Headers)# 判断异常r.raise_for_status()# 设置编码r.encoding = 'utf-8'# 创建BeautifulSoup对象,用于解析该html页面数据soup = BeautifulSoup(r.text, 'lxml')# 获取所有td标签td = soup.find_all('td')# 存放某一个题目的所有信息subject = []# 遍历所有tdfor t in td:if t.string is not None:subject.append(t.string) # 获取td中的字符串if len(subject) == 5: # 每5个为一个题目的信息subjects.append(subject)subject = []# 存放题目with open('NYOJ_Subjects.csv', 'w', newline='') as file:fileWriter = csv.writer(file)fileWriter.writerow(csvHeaders) # 写入表头fileWriter.writerows(subjects) # 写入数据print('\n题目信息爬取完成!!!')

查看爬取文件

三、爬取重交新闻通知

爬取目标网址:练习场 - ACM在线评测系统

爬取任务:爬取每个新闻的发布日期+标题

1. 网页分析

打开待爬取的网页,查找时间与标题位置

2. 内容爬取

代码

# -*- coding: utf-8 -*-"""Created on Wed Nov 17 14:39:03 @author: 86199"""import requestsfrom bs4 import BeautifulSoupimport csvfrom tqdm import tqdmimport 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)):# 发出请求request = urllib.request.Request(f'http://news./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)if hasattr(e, "reason"):print(e.reason)# 解析网页soup = BeautifulSoup(html, 'html5lib')# 存放一条新闻subject = []# 查找所有li标签li = soup.find_all('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('test.csv', 'w', newline='',encoding='utf-8') as file:fileWriter = csv.writer(file)fileWriter.writerow(csvHeaders)fileWriter.writerows(subjects)print('\n信息爬取完成!!!')

查看爬取文件

四、总结

本文粗略介绍了网络爬虫,并通过爬虫程序的编写,进一步理解HTTP协议。实现了对南阳理工学院ACM题目网站练习题目数据的抓取和保存,以及对重交新闻网站中近几年所有的信息通知发布日期和标题进行爬取和保存。

五、参考

网络爬虫入门_一只特立独行的猪️的博客-CSDN博客

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。