c爬虫抓取网页数据(4.网络爬虫的合法性Robots协议:又称机器人协议或爬虫协议)

优采云 发布时间: 2021-12-26 05:07

  c爬虫抓取网页数据(4.网络爬虫的合法性Robots协议:又称机器人协议或爬虫协议)

  内容

  一、爬虫简介

  1.什么是网络爬虫?

  网络爬虫(也称为网络蜘蛛、网络机器人,在 FOAF 社区中,更常见的是网络追逐者)是按照一定的规则自动抓取万维网上信息的程序或脚本。其他不太常用的名称包括蚂蚁、自动索引、模拟器或蠕虫。

  2.爬虫类型

  根据系统结构和实现技术,网络爬虫大致可以分为以下几类:通用网络爬虫、聚焦网络爬虫、增量网络爬虫、深网爬虫(Deep Web Crawler)。实际的网络爬虫系统通常是通过多种爬虫技术的组合来实现的。

  3.网络爬虫的使用范围

  ① 作为搜索引擎的网页采集器,抓取整个互联网,如谷歌、百度等。

  ②作为垂直搜索引擎,抓取特定主题信息,如视频网站、招聘网站等。

  ③作为测试网站前端的检测工具,用于评估网站前端代码的健壮性。

  4.网络爬虫的合法性

  机器人协议:又称机器人协议或爬虫协议,该协议规定了搜索引擎抓取网站内容的范围,包括网站是否希望被搜索引擎抓取,哪些内容不允许被抓取。网络爬虫“有意识地”在本地抓取或不抓取网页内容。自推出以来,机器人协议已成为网站保护自身敏感数据和网民隐私的国际惯例。

  5.网络搜索策略

  网络爬取策略可分为深度优先、广度优先和最佳优先。在很多情况下,深度优先会导致爬虫被困。目前,广度优先和最佳优先的方法很常见。

  6.爬虫的基本结构

  一个网络爬虫通常收录

四个模块:

  • URL 管理模块

  • 下载模块

  • 分析模块

  • 存储模块

  

  二、环境准备(一)创建python虚拟环境

  使用 conda 创建一个名为 crawler 的 python 虚拟环境。在这个虚拟环境下,使用pip或者conda安装requests、beautifulsoup4等必要的包(如果网络问题请切换国内镜像网站或国外网站仓库,注意使用这两个安装工具不同的仓库)。使用jupyter、pycharm、spyder、vscoder等IDE编程环境时,需要选择设置IDE后端使用的python版本或虚拟环境。比如使用jupyter notebook时,参考(),在jupyter运行的web界面选择对应的python kernel Kernel(带虚拟环境列表);如果使用pycharm,参考()选择对应的现有虚拟环境。

  使用 conda create -n crawler python=3.8 命令新建一个名为 crawlerpython version 3.8 的虚拟环境

  

  你开始创造

  

  已创建

  

  使用命令conda env list查看已经存在的虚拟环境,爬虫已经存在,base是conda自带的环境,uuu是我之前创建的

  

  Activate crawler 进入爬虫环境,conda activate 退出当前环境,activate 是进入基础环境

  

  conda remove --name 环境名称 --all 卸载环境

  Jupyter notebook 本身不支持选择虚拟环境,每次有新项目时都需要重新配置所有插件。使用nb_conda插件将jupyter notebook变成pycharm一样可选择的运行环境。

  在基础环境中使用conda install nb_conda命令安装nb_conda

  

  在conda虚拟环境中使用conda install -n environment name ipykernel命令安装ipykernel

  

  可以在jupyter notebook中显示

  

  (二)安装库

  环境准备

  Python安装,这部分可以参考我之前的文章Python环境配置&Pycharm安装,到官网下载对应的安装包,安装一路Next;

  pip安装,pip是Python的包管理器,目前的Python安装包一般都自带pip,不需要自己安装;

  安装requests,beautifulsoup库,通过如下语句完成安装:

  pip 安装请求

  pip 安装 beautifulsoup4

  谷歌浏览器(铬);

  pip 安装请求

  

  pip 安装 beautifulsoup4

  

  pip 安装 html5lib

  

  三、 爬取南洋理工ACM主题网站

  学习样例代码,对关键代码句写详细注释,编写程序完成南洋理工ACM题库练习题数据的采集和存储;

  (一)查看页面源码

  点击进入南洋理工ACM专题网站,

  右键->查看页面源代码

  

  

  (二)代码运行

  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')

# tqdm作业:以进度条方式显示爬取进度

# 爬取11页所有题目信息

for pages in tqdm(range(1, 11 + 1)):

# get请求第pages页

r = requests.get(f'http://www.51mxd.cn/problemset.php-page={pages}.htm', Headers)

# 判断异常

r.raise_for_status()

# 设置编码

r.encoding = 'utf-8'

# 创建BeautifulSoup对象,用于解析该html页面数据

soup = BeautifulSoup(r.text, 'html.parser')

# 获取所有td标签

td = soup.find_all('td')

# 存放某一个题目的所有信息

subject = []

# 遍历所有td

for 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('D:/jupyter/package/1.csv', 'w', newline='') as file:

fileWriter = csv.writer(file)

fileWriter.writerow(csvHeaders) # 写入表头

fileWriter.writerows(subjects) # 写入数据

print('\n题目信息爬取完成!!!')

  运行,报错ModuleNotFoundError: No module named'tqdm',tqdm文件丢失,使用命令pip install tqdm安装

  

  错误 FeatureNotFound:找不到具有您请求的功能的树*敏*感*词*:lxml。需要安装解析器库吗,用pip install lxml安装,然后还是不行,自动安装最新版本,更换刚刚下载的版本删除:pip卸载lxml,下载指定版本试试: pip install lxml==3.7.0. 或不!!

  然后第二种方法,把参数lxml改成html.parser

  soup = BeautifulSoup(r.text, 'html.parser')

  没关系!激动的心和握手~

  

  (三)结果

  

  四、 爬上重庆交通大学新闻网站

  重写爬虫示例代码,爬取重庆交通大学新闻网站近年所有信息公告()的发布日期和标题,写入CSV电子表格。

  (一)查看网页源码

  重庆交通大学新闻网

  

  右键->查看网页源代码

  

  (二)代码运行

  import requests

from bs4 import BeautifulSoup

import csv

from tqdm import tqdm

# 模拟浏览器访问

cqjtu_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_page_number():

r=requests.get(f"http://news.cqjtu.edu.cn/xxtz.htm",headers=cqjtu_Headers)

r.raise_for_status()

r.encoding="utf-8"

page_array={

'type':'text/javascript'

}

soup = BeautifulSoup(r.text, 'html5lib')

page_num=soup.find_all('script',page_array)

page_number=page_num[4].string#只靠标签这些定位好像不是唯一,只能手动定位了

page_number=page_number.strip('function a204111_gopage_fun(){_simple_list_gotopage_fun(')#删掉除页数以外的其他内容

page_number=page_number.strip(',\'a204111GOPAGE\',2)}')

page_number=int(page_number)#转为数字

return page_number

def get_time_and_title(page_num,cqjtu_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=cqjtu_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=[]

def write_csv(cqjtu_info):

with open('D:/jupyter/package/2.csv', 'w', newline='',encoding='utf-8') as file:

fileWriter = csv.writer(file)

fileWriter.writerow(cqjtu_head)

fileWriter.writerows(cqjtu_info)

print('爬取信息成功')

page_num=get_page_number()#获得页数

for i in tqdm(range(page_num,0,-1)):

get_time_and_title(i,cqjtu_Headers)

write_csv(cqjtu_infomation)

  跑

  

  (三)结果

  像这样打开

  

  记事本打开

  

  参考

  Jupyter notebook 选择虚拟环境运行代码

  Anaconda安装教程,管理虚拟环境

  Python爬虫练习(爬取OJ题和学校信息通知)

0 个评论

要回复文章请先登录注册


官方客服QQ群

微信人工客服

QQ人工客服


线