python爬虫高校新闻

python爬取高校新闻

# -*- coding:UTF-8 -*-
from bs4 import BeautifulSoup
import requests
import pymongo

def spider(url):
	server = 'http://www.ysu.edu.cn/info/2178/'
	req = requests.get(url)
	global number				#gobal引用全局变量
	global title_list
	global content_list
	html = req.content.decode('utf-8')#解码
	div_bf = BeautifulSoup(html,'html.parser')#html解析器
	news_content = div_bf.find_all('div',class_='content')#find_all返回的是列表
	news_title = div_bf.select('form > div > div > h3')#select是BeautifulSoup的函数
	for item in news_content:#循环遍历列表
		if item.text not in title_list:#写入列表,如果不存在则写入
			content_list.append(item.text)
	for title in news_title:
		if title.text not in title_list:
	 		title_list.append(title.text)
	news_content = div_bf.select('form > div > div > a')
	try:
		if number == 1 :
			next_url = server + news_content[0].get('href')#第一页的下一条新闻地址
			number = number + 1
		else:
			next_url = server + news_content[1].get('href')#下一条新闻地址
			number = number + 1	
		print(number)
		if number < 160:
			return spider(next_url)
	except Exception as e:#捕捉异常 最后一页没有下一条
		print('新闻爬虫完毕!')
def database():
	global title_list
	global content_list
	client = pymongo.MongoClient("localhost:27017")#连接数据库
	db = client.test#获取数据库名称
	users = db.users#获取集合
	db.users.remove()#清空数据库信息
	for i in range(len(title_list)-3):
		db.users.insert({'title': title_list[i], 'content':content_list[i]})#json数据
	try:
		while True:
			search = input('请输入查询内容:\n')
			u = db.users.find_one({"title":search})#查询一条数据,使用循环查询
			print(u.get('content'))
	except Exception as e:
		print('新闻查询结束!')
	
if __name__ == '__main__':
	number = 1
	title_list = []
	content_list = []
	url = 'http://www.ysu.edu.cn/info/2178/4041.htm'
	spider(url)
	print('新闻标题列表如下:')
	for each in title_list:
		print(each)
	database()

爬虫时候遇到各种小问题(主要为有些新闻没有权限查看);现在这个代码中的url可能已失效;注释已详细注明。

可以使用Django来展示结果,这一部分由于当时时间有限并未完成。

### 高校图书馆座位选择的Python爬虫实现 要通过 Python 编写的爬虫程序自动完成高校图书馆的座位选择,可以按照以下方法构建解决方案: #### 1. **需求分析** 自动化选座的核心在于模拟用户的登录行为以及后续的操作流程。这通常涉及以下几个方面: - 登录到目标网站并保持会话状态。 - 获取可用座位列表及其对应的时间段数据。 - 提交选定的座位请求。 这些操作可以通过 `requests` 或者更高级别的框架如 `Scrapy` 来实现[^2]。 #### 2. **技术栈的选择** 使用的技术主要包括但不限于以下几种工具和技术库: - **Requests**: 处理 HTTP 请求和响应。 - **BeautifulSoup** (或者 lxml): 解析 HTML 页面结构提取所需的数据。 - **Selenium**: 如果页面依赖 JavaScript 动态加载,则可能需要用到 Selenium 进行动态渲染处理[^3]。 #### 3. **具体实现步骤** 以下是简化版的代码示例用于说明基本逻辑: ```python import requests from bs4 import BeautifulSoup def login(url, username, password): session = requests.Session() payload = { 'username': username, 'password': password } headers = {'User-Agent': 'Mozilla/5.0'} response = session.post(url, data=payload, headers=headers) if response.status_code == 200 and "欢迎" in response.text: print("登录成功!") return session else: raise Exception("登录失败") def get_available_seats(session, seats_url): res = session.get(seats_url) soup = BeautifulSoup(res.content, 'html.parser') available_seats = [] for seat_info in soup.find_all('div', class_='seat'): id_ = seat_info['data-id'] status = seat_info['data-status'] if status == 'available': available_seats.append(id_) return available_seats def reserve_seat(session, reservation_url, seat_id): params = {"action": "reserve", "seatId": seat_id} resp = session.post(reservation_url, data=params) if resp.ok and "预订成功" in resp.text: print(f"座位 {seat_id} 成功预定.") elif not resp.ok or "已满员" in resp.text: print(f"未能预定座位 {seat_id}.") else: print("未知错误.") if __name__ == "__main__": base_url = "http://example-library.com" login_endpoint = f"{base_url}/login" seats_list_endpoint = f"{base_url}/seats/list" reserve_endpoint = f"{base_url}/reservation" user_session = login(login_endpoint, "your_username", "your_password") avail_seats = get_available_seats(user_session, seats_list_endpoint) if avail_seats: chosen_seat = avail_seats[0] reserve_seat(user_session, reserve_endpoint, chosen_seat) ``` 上述代码展示了如何利用 Requests 和 Beautiful Soup 实现简单的自动化过程[^4]。 #### 4. **注意事项** - 爬取过程中需尊重目标服务器的服务款,避免频繁访问造成负担甚至被封禁 IP 地址。 - 对于复杂的交互场景(比如验证码验证),需要额外考虑解决策略,例如 OCR 技术识别图形验证码[^5]。 ---
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值