网页 抓取 innertext 试题(参考网络爬虫入门_一只特立独行的猪的博客-CSDN博客)

优采云 发布时间: 2021-11-23 13:05

  网页 抓取 innertext 试题(参考网络爬虫入门_一只特立独行的猪的博客-CSDN博客)

  一、网络爬虫基本介绍

  网络爬虫(也称为网络蜘蛛、网络机器人,在 FOAF 社区中,更常见的是网络追逐)是根据某些规则自动抓取万维网上信息的程序或脚本。

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

  二、 爬行南洋理功 OJ 问题

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

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

  1. 网络分析

  打开要爬取的网页,发现改变页数只需要改变URL n.htm中的变量n

  

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

  

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

# 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('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 2021

@author: 86199

"""

import requests

from bs4 import BeautifulSoup

import csv

from tqdm import tqdm

import 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.cqjtu.edu.cn/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博客

0 个评论

要回复文章请先登录注册


官方客服QQ群

微信人工客服

QQ人工客服


线