当前位置: 首页 > article >正文

【Python】简单的爬虫抓取

效果:抓取某个学校网站的教授名录,并获取研究方向。
由于网站使用的都是明文,所以抓起来没什么难度,且平时访问量小,很值得用来练习。
在这里插入图片描述
代码如下,解释请见注释

import time

import requests
from bs4 import BeautifulSoup

# 创建一个包含浏览器头部信息的字典,模拟浏览器,可以骗过一些简单的反爬虫网站
headers = {
	'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/96.0.4664.45 Safari/537.36',
	# 可以根据需要添加更多的头部信息,比如:
	# 'Accept': 'text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,*/*;q=0.8',
	# 'Accept-Language': 'en-US,en;q=0.5',
	# 'Accept-Encoding': 'gzip, deflate, br',
	# 'DNT': '1', # Do Not Track 请求头表明用户不希望被追踪
	# 'Connection': 'keep-alive',
	# 'Upgrade-Insecure-Requests': '1',
	# 如果需要处理cookies,也可以在这里设置'Cookie'字段
	# 'Cookie': 'your_cookie_here',
}


# 获取教师信息
def request_teacher_info(url):
	# 发送GET请求,并带上headers
	response = requests.get(url, headers=headers)
	content = response.content.decode('utf-8')

	# 确保请求成功
	if response.status_code == 200:
		soup = BeautifulSoup(content, 'html.parser')
		# 抓取div标签下,class为infobox的标签
		infobox_div = soup.find('div', class_='infobox')
		# 抓取span标签,class为'h_info',并且包含"姓名"字样
		name_span = infobox_div.find('span', class_='h_info', string='姓名:')
		# 抓取"姓名"字样后一个字样,即实际姓名
		name = name_span.find_next_sibling('span').get_text(strip=True)
		# 同样的方法抓研究方向,想继续抓,还有邮箱,发表论文这些,都是一样的套路
		research_direction_span = infobox_div.find('span', class_='h_info', string='研究方向:')
		research_direction = research_direction_span.find_next_sibling('span').get_text(strip=True)
		print(f"{name}  研究方向:{research_direction}")
	else:
		print(f"请求失败,状态码为:{response.status_code}")


# 获取教师列表
def request_teacher_list(url):
	# 发送GET请求,并带上headers
	response = requests.get(url, headers=headers)
	content = response.content.decode('utf-8')
	link_list = []
	# 确保请求成功
	if response.status_code == 200:
		# 使用BeautifulSoup解析HTML内容
		soup = BeautifulSoup(content, 'html.parser')

		right_list_r = soup.find('div', class_='right-list r')
		# 教师列表
		teacher_lists = right_list_r.find_all('div', class_='teacher-list')
		for teacher_list in teacher_lists:
			job_type = teacher_list.find("h2", class_="title l")
			# 这些打印信息可以忽略,重要信息已在request_teacher_info()中展示
			print(job_type.get_text(strip=True))
			professor_ul = teacher_list.find_all('ul')[0]
			a_list = professor_ul.find_all('a', href=True)

			for a in a_list:
				link = a['href']
				link_list.append(link)
				print(link)
			print("=" * 50)
	return link_list


link_list1 = request_teacher_list("https://example.com")
for link in link_list1:
	request_teacher_info(link)
	# time.sleep(0.5)


http://www.kler.cn/a/286735.html

相关文章:

  • DRG/DIP 2.0时代下基于PostgreSQL的成本管理实践与探索(下)
  • doris:Broker Load
  • skynet 源码阅读 -- 启动主流程
  • Vue3.5 企业级管理系统实战(三):页面布局及样式处理 (Scss UnoCSS )
  • 使用 `scanpy` 观察 `AnnData` 对象内部数据结构
  • Effective C++ 规则41:了解隐式接口和编译期多态
  • 前端配置环境
  • USB3202N多功能数据采集卡16位模拟量250K频率LabVIEW采集卡
  • 音视频-图像篇(YUV和RGB)
  • Django1.5自定义User模型
  • docxtpl配合Jinja2实现word中复杂表格实现
  • Spring Boot集成消息队列:RabbitMQ与Kafka实践指南
  • 甄选范文“论软件系统建模方法及其应用”,软考高级论文,系统架构设计师论文
  • EXCEL VBA根据数据生成word文档周报并加背景格式突出显示
  • Java对象的访问定位技术
  • docker部署project-exam-system项目
  • 【华为OD】2024D卷——停车场车辆统计
  • 音视频入门基础:WAV专题(7)——FFmpeg源码中计算WAV音频文件每个packet的size值的实现
  • 十三、泛型
  • Java后端服务端渲染与客户端渲染:SSR与CSR的权衡
  • 第一个golang项目增加help指令并调整指令模式
  • 【最全深度学习介绍】基本概念、类型、应用、优缺点、与机器学习区别是什么?
  • CART算法原理及Python实践
  • Axure RP9安装教程(Pro版)
  • 为k8s准备docker 私有仓库 harbor
  • Scrum 敏捷模型、软件测试