网络爬虫入门【网络通信编程】

目录

一 爬虫

 二 爬取南阳理工OJ题目

 1. 网页分析

2. 内容爬取

 三、爬取重交新闻通知

1. 网页分析

 2. 内容爬取

四 总结

五 参考链接


一 爬虫

网络爬虫(又被称为网页蜘蛛,网络机器人)就是模拟浏览器发送网络请求,接收请求响应,一种按照一定的规则,自动地抓取互联网信息的程序。

优点:

只要是浏览器(客户端)能做的事情,爬虫都能够做。

 准备工作:

首先我们需要下载python,我下载的版本是 3.8.8
其次我们需要一个运行Python的环境,我用的是pychram

 

 二 爬取南阳理工OJ题目

爬取目标网址:

练习场 - ACM在线评测系统

 爬取任务:

题号难度标题通过率通过数/总提交数

 1. 网页分析

打开准备爬取的网页:

 页面源代码:

 

 在源码中找到待爬取的数据位置

 分析完成后,开始编写代码

2. 内容爬取

新建一个项目

编写代码:main.py
 

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, 'lxml')
    # 获取所有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('南阳理工学院题目.csv', 'w', newline='') as file:
    fileWriter = csv.writer(file)
    fileWriter.writerow(csvHeaders)  # 写入表头
    fileWriter.writerows(subjects)   # 写入数据

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

运行一下:

 查看文件:

 三、爬取重交新闻通知

1. 网页分析

爬取目标网址:信息通知-重庆交通大学新闻网

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

 查找时间与标题位置

 

 2. 内容爬取

 编写代码  test.py

import requests
from bs4 import BeautifulSoup
import csv


# 获取每页内容
def get_one_page(url):
    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'
    }
    try:
        info_list_page = []  # 一页的所有信息
        resp = requests.get(url, headers=headers)
        resp.encoding = resp.status_code
        page_text = resp.text
        soup = BeautifulSoup(page_text, 'lxml')
        li_list = soup.select('.left-list > ul > li')  # 找到所有li标签
        for li in li_list:
            divs = li.select('div')
            date = divs[0].string.strip()
            title = divs[1].a.string
            info = [date, title]
            info_list_page.append(info)
    except Exception as e:
        print('爬取' + url + '错误')
        print(e)
        return None
    else:
        resp.close()
    print('爬取' + url + '成功')
    return info_list_page


# main
def main():
    # 爬取所有数据
    info_list_all = []
    base_url = 'http://news.cqjtu.edu.cn/xxtz/'
    for i in range(1, 67):
        if i == 1:
            url = 'http://news.cqjtu.edu.cn/xxtz.htm'
        else:
            url = base_url + str(67 - i) + '.htm'
        info_list_page = get_one_page(url)
        info_list_all += info_list_page
    # 存入数据
    with open('教务新闻.csv', 'w', newline='', encoding='utf-8') as file:
        fileWriter = csv.writer(file)
        fileWriter.writerow(['日期', '标题'])  # 写入表头
        fileWriter.writerows(info_list_all)  # 写入数据


if __name__ == '__main__':
    main()

 运行:

 查看文件:

 爬取成功!

四 总结

本次实验非常简单,对于网络爬虫入门也有了初步的认识,还需要继续深入学习。

五 参考链接

【网络爬虫】网络爬虫之入门练习_YangMax1的博客-CSDN博客

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值