自动抓取网页数据(参考Python爬虫利器二之BeautifulSoup的用法)

优采云 发布时间: 2021-11-15 14:26

  自动抓取网页数据(参考Python爬虫利器二之BeautifulSoup的用法)

  内容

  一、网络爬虫基本介绍

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

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

  二、 爬行南洋理功 OJ 问题

  抓取目标网址:

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

  1. 网络分析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题目信息爬取完成!!!')

  三、爬取重新提交消息通知

  抓取目标网址:

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

  1. 网络分析2. 内容抓取

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

  四、总结

  本文对网络爬虫进行了粗略的介绍,并通​​过爬虫程序的编写,进一步了解HTTP协议。实现了南洋理工ACM题目网站练习题目数据的抓取和存储,以及重新提交的新闻网站@中所有信息通知的发布日期和标题的检索和存储> 近年来。

  五、参考

  Beautiful Soup 的用法,第二个 Python 爬虫工具

0 个评论

要回复文章请先登录注册


官方客服QQ群

微信人工客服

QQ人工客服


线