网页 抓取 innertext 试题(南阳理工学院ACM题目网站-ACM在线评测系统练习题目数据)
优采云 发布时间: 2021-11-22 23:11网页 抓取 innertext 试题(南阳理工学院ACM题目网站-ACM在线评测系统练习题目数据)
内容
二、通过编写爬虫程序,进一步了解HTTP协议。
使用 conda 创建一个名为 crawler 的 python 虚拟环境。在这个虚拟环境下,使用pip或者conda安装requests、beautifulsoup4等必要的包(如果网络有问题请切换国内镜像网站或国外网站仓库,注意两个安装工具使用不同的仓库)。使用jupyter、pycharm、spyder、vscoder等IDE编程环境时,需要选择设置IDE后端使用的python版本或虚拟环境。比如使用jupyter notebook时,参考(),在jupyter运行的web界面选择对应的python kernel Kernel(带虚拟环境列表);如果使用pycharm,参考()选择对应的现有虚拟环境。然后参考附件中的爬虫示例代码:
1)学习示例代码,对关键代码语句写详细注释,完成编程捕捉并保存南洋理工ACM题目的练习题数据网站实践领域-ACM在线测评系统;
2) 重写爬虫示例代码,爬取近年重庆交大新闻网站所有信息公告()的发布日期和标题,写入CSV电子表格。
网站 上的发布日期和标题格式示例如下:
《2021-10-28;重庆市城轨车辆系统集成与控制重点实验室2021年开放基金申请指南》
2021-10-28;公共交通装备设计与系统集成重庆市重点实验室2021年度开放基金申请通知
2021-10-28;关于2021年组织新教师参观科学城校区实验平台的通知
1.爬虫介绍
网络爬虫(也称为网络蜘蛛、网络机器人,在 FOAF 社区中,更常见的是网络追逐)是根据某些规则自动抓取万维网上信息的程序或脚本。简单来说就是通过编写脚本模拟浏览器发起获取数据的请求。
2.爬取的原理
3. 爬虫分类
(1)General Purpose Web Crawler: 爬取整个页面的源数据。爬虫系统(crawler)
(2)Focused Web Crawler:爬取的是一个页面的部分数据(数据分析)
(3)Incremental Web Crawler:用于监控网站数据更新的状态,从而抓取网站中最新更新的数据
(4)Deep Web Crawler:网页按存在方式可分为表面网页(Surface Web)和深层网页(Deep Web,也称为Invisible Web Pages或Hidden Web)。表面网页页面是指传统搜索引擎可以索引的页面,主要是由超链接可以到达的静态网页组成的网页。Deep Web是那些大部分内容无法通过静态链接获取而隐藏在搜索背后的网页表单。只有用户提交一些关键词才能获得网页。
爬虫系列(一) 网络爬虫介绍
4.Anaconda 环境配置
打开 Anaconda 提示
创建虚拟环境(crawler是环境名,可以自己改,python=2.7是下载的python版本,也可以自己改)
输入命令
创造环境
conda create -n pythonwork python=2.7
激活环境
激活爬虫
在这个虚拟环境中,使用pip或者conda来安装requests、beautifulsoup4等必要的包。
conda install -n 爬虫请求
conda install -n crawler beautifulsoup4
康达安装tqdm
完成后可以看到创建的虚拟环境,切换到这个虚拟环境,安装Spyder
5.示例代码注释
import requests
from bs4 import BeautifulSoup
import csv
from 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')
for pages in tqdm(range(1, 11 + 1)):
r = requests.get(f'http://www.51mxd.cn/problemset.php-page={pages}.htm', Headers)
r.raise_for_status()
r.encoding = 'utf-8'
soup = BeautifulSoup(r.text, 'html5lib')
td = soup.find_all('td')
subject = []
for t in td:
if t.string is not None:
subject.append(t.string)
if len(subject) == 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题目信息爬取完成!!!')
5.1个指南包
#导入包
import requests
from bs4 import BeautifulSoup
import csv
from tqdm import tqdm#在电脑终端上显示进度,使代码可视化进度加快
5.2 定义访问浏览器所需的请求头、写入csv文件所需的头、主题数据列表
# 模拟浏览器访问
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'
# 题目数据
subjects = []
# 表头
csvHeaders = ['题号', '难度', '标题', '通过率', '通过数/总提交数']
5.3 定义爬取函数,爬取第1到11页
for pages in tqdm(range(1, 11 + 1)):
r = requests.get(f'http://www.51mxd.cn/problemset.php-page={pages}.htm', Headers)
r.raise_for_status()
r.encoding = 'utf-8'
soup = BeautifulSoup(r.text, 'html5lib')
td = soup.find_all('td')#讲所有含TD的项提取出来
subject = []
for t in td:
if t.string is not None:
#利用string方法获取其中的内容
subject.append(t.string)
if len(subject) == 5:
subjects.append(subject)
subject = []
5.4 写入文件
with open('..\\source\\nylgoj.csv', 'w', newline='') as file:
fileWriter = csv.writer(file)
fileWriter.writerow(csvHeaders)
fileWriter.writerows(subjects)
print('\n题目信息爬取完成!!!')
6.编程完成捕获并保存南洋理工ACM练习题数据网站练习场-ACM在线测评系统
6.1 进入官网实践领域-ACM在线测评系统
6.2
实验代码
import requests
from bs4 import BeautifulSoup
import csv
from 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')
for pages in tqdm(range(1, 11 + 1)):
r = requests.get(f'http://www.51mxd.cn/problemset.php-page={pages}.htm', Headers)
r.raise_for_status()
r.encoding = 'utf-8'
soup = BeautifulSoup(r.text, 'html.parser')
td = soup.find_all('td')
subject = []
for t in td:
if t.string is not None:
subject.append(t.string)
if len(subject) == 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题目信息爬取完成!!!')
跑
打开生成的 .csv 文件:
爬虫成功!
6.例2:抓取中交大学新闻近年所有信息的时间和标题网站
6.1进入官网信息通知-重庆交通大学新闻网
6.2Code
# -*- coding: utf-8 -*-
"""
Created on Sun Nov 14 21:17:21 2021
@author: hp
"""
import requests
from bs4 import BeautifulSoup
import csv
from tqdm import tqdm
# 模拟浏览器访问
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.44'}
#csv的表头
cqjtu_head=["日期","标题"]
#存放内容
cqjtu_infomation=[]
#获取新闻标题和时间
def get_time_and_title(page_num,Headers):#页数,请求头
if page_num==66 :
url='http://news.cqjtu.edu.cn/xxtz.htm'
else :
url=f'http://news.cqjtu.edu.cn/xxtz/{page_num}.htm'
r=requests.get(url,headers=Headers)
r.raise_for_status()
r.encoding="utf-8"
array={#根据class来选择
'class':'time',
}
title_array={
'target':'_blank'
}
page_array={
'type':'text/javascript'
}
soup = BeautifulSoup(r.text, 'html.parser')
time=soup.find_all('div',array)
title=soup.find_all('a',title_array)
temp=[]
for i in range(0,len(time)):
time_s=time[i].string
time_s=time_s.strip('\n ')
time_s=time_s.strip('\n ')
#清除空格
temp.append(time_s)
temp.append(title[i+1].string)
cqjtu_infomation.append(temp)
temp=[]
# 爬取题目
print('新闻信息爬取中:\n')
for pages in tqdm(range(66, 0,-1)):
get_time_and_title(pages,Headers)
# 存放题目
with open('cqjtu_news.csv', 'w', newline='') as file:
fileWriter = csv.writer(file)
fileWriter.writerow(cqjtu_head)
fileWriter.writerows(cqjtu_infomation)
print('\n新闻信息爬取完成!!!')
跑
打开生成的csv文件
爬虫成功!