爬虫入门&&实例练习

目录

1.爬虫介绍

2.爬虫原理

3.爬虫分类

4.Anaconda 环境配置

 5.示例代码注解

6.编程完成对南阳理工学院ACM题目网站 练习场 - ACM在线评测系统 练习题目数据的抓取和保存

6.实例2:抓取重交大新闻网站中近几年所有的信息通知时间和标题


二、通过爬虫程序的编写,进一步理解HTTP协议。

用conda建立一个名为crawler的python虚拟环境,在此虚拟环境中用pip或conda安装requests、beautifulsoup4等必要包(若有网络问题,请切换国内镜像网站或国外网站仓库,注意两个安装工具使用不同的仓库)。当使用jupyter、pycharm、spyder、vscoder等IDE编程环境时,需要自己选择设置IDE后台使用的python版本或虚拟环境。比如当使用jupyter notebook时,参考(https://blog.csdn.net/qq_35654046/article/details/106972448),在jupyter运行的web界面中选择对其应的python内核Kernel(有虚拟环境列表);如果使用pycharm,参考(https://blog.csdn.net/ifubing/article/details/105153541)选择相应的已有虚拟环境。然后参考附件中爬虫示例代码:

1)学习示例代码,对关键代码语句写出详细注释,编程完成对南阳理工学院ACM题目网站 练习场 - ACM在线评测系统 练习题目数据的抓取和保存;

2)改写爬虫示例代码,将重庆交通大学新闻网站中近几年所有的信息通知(http://news.cqjtu.edu.cn/xxtz.htm) 的发布日期和标题全部爬取下来,并写到CSV电子表格中。

网站上的发布日期和标题 格式示例如下所示:

"2021-10-28;城市轨道车辆系统集成与控制重庆市重点实验室 2021 年度开放基金申报指南

2021-10-28;公共交通装备设计与系统集成重庆市重点实验室2021年度开放基金申报通知

2021-10-28;关于组织2021年新入职教师参观科学城校区实验平台的通知

1.爬虫介绍

网络爬虫(又被称为网页蜘蛛,网络机器人,在FOAF社区中间,更经常的称为网页追逐者),是一种按照一定的规则,自动地抓取万维网信息的程序或者脚本。简单来说就是通过编写脚本模拟浏览器发起请求获取数据。

2.爬虫原理

å¨è¿éæå¥å¾çæè¿°

3.爬虫分类

  (1)通用网络爬虫(General Purpose Web Crawler):爬取一整张页面源码数据. 抓取系统(爬虫)

  (2)聚焦网络爬虫(Focused Web Crawler):爬取的是一张页面中局部的数据(数据解析)

  (3)增量式网络爬虫(Incremental Web Crawler):用于监测网站数据更新的情况,从而爬取网站中最新更新出来的数据

  (4)深层网络爬虫(Deep Web Crawler):Web 页面按存在方式可以分为表层网页(Surface Web)和深层网页(Deep Web,也称 Invisible Web Pages 或 Hidden Web)。 表层网页是指传统搜索引擎可以索引的页面,以超链接可以到达的静态网页为主构成的 Web 页面。Deep Web 是那些大部分内容不能通过静态链接获取的、隐藏在搜索表单后的,只有用户提交一些关键词才能获得的 Web 页面。

爬虫系列(一) 网络爬虫简介_半虹小站-CSDN博客_网络爬虫爬虫简介_diaolouan9546的博客-CSDN博客

4.Anaconda 环境配置

打开Anaconda Prompt

创建虚拟环境(crawler是环境名,可自行更改,python=2.7是下载的python版本,也可自行更改)

输入命令

创建环境

conda create -n pythonwork python=2.7

激活环境

activate crawler

在此虚拟环境中用pip或conda安装requests、beautifulsoup4等必要包

conda install -n crawler requests

conda install -n crawler beautifulsoup4

conda install 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.2代码

# -*- 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文件

 

 爬虫成功!

  • 1
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值