随着互联网技术的飞速发展,万维网已成为海量信息的载体。如何高效地从互联网中自动获取、解析和存储所需数据,成为计算机网络应用中的一个重要课题。网络爬虫(Web Crawler)作为一种自动化数据采集程序,能够模拟浏览器行为,按照预设规则遍历网页并提取有价值的信息。本课程设计旨在通过Python语言实现一个基础但完整的网络爬虫系统,以加深对HTTP协议、Socket通信、HTML解析等计算机网络核心知识的理解,并锻炼工程实践能力。
requests、BeautifulSoup、urllib等库完成HTTP请求与HTML解析。本爬虫采用经典的“生产者-消费者”简化模型,核心模块包括:
数据流向:调度器→下载器→解析器→存储,同时解析出的新URL返回调度器,形成闭环。
class WebCrawler:
def init(self, starturl, maxdepth=2, delay=1.0):
self.starturl = starturl
self.maxdepth = maxdepth
self.delay = delay
self.visited = set()
self.queue = deque([(start_url, 0)])
self.session = requests.Session()
self.session.headers.update({'User-Agent': 'Mozilla/5.0 ...'})
使用requests.Session保持会话,设置超时与重试机制:`python
def download(self, url):
try:
resp = self.session.get(url, timeout=10)
if resp.status_code == 200:
return resp.text
except requests.RequestException as e:
logging.error(f"下载失败 {url}: {e}")
return None`
结合BeautifulSoup提取<a>标签的href与文本:`python
def parse(self, html, baseurl):
soup = BeautifulSoup(html, 'html.parser')
items = []
for link in soup.findall('a', href=True):
absoluteurl = urljoin(baseurl, link['href'])
title = link.gettext(strip=True)
if title:
items.append({'url': absoluteurl, 'title': title})
return items`
采用广度优先策略,使用deque存储(url, depth),并通过visited集合去重。每次处理前检查是否超过最大深度。
仅抓取同一域名下的页面,避免爬虫失控:`python
if urlparse(absolute_url).netloc != self.domain:
continue`
将结果追加写入CSV:`python
with open('results.csv', 'a', newline='', encoding='utf-8') as f:
writer = csv.DictWriter(f, fieldnames=['url', 'title'])
writer.writerows(items)`
使用urllib.robotparser检查权限:`python
rp = robotparser.RobotFileParser()
rp.seturl(urljoin(baseurl, '/robots.txt'))
rp.read()
if not rp.canfetch(useragent, url):
return`
配置logging模块,记录程序运行状态与错误信息,便于调试与监控。
以某公开技术博客站点为示例,设置起始URL、最大深度为2、请求间隔1秒。运行结果表明:
results.csv中包含URL与标题两列,数据完整。遇到的问题与解决:
resp.encoding = resp.apparent_encoding自动识别编码。urljoin转为绝对URL。selenium或分析Ajax接口。本设计暂不涉及,但留出扩展空间。本设计以Python为工具,实现了一个具备基本完整功能的网络爬虫,覆盖了HTTP请求、HTML解析、队列管理、数据存储等核心环节。通过本次实践,我深刻理解了:
未来可进一步优化:引入多线程或异步(如aiohttp)提高抓取效率,增加数据清洗与可视化模块,或基于Scrapy框架构建更健壮的系统。本课程设计为计算机网络与程序设计课程的结合提供了良好的工程范例。
[1] Python官方文档. https://docs.python.org/3/
[2] Requests库文档. https://requests.readthedocs.io/
[3] BeautifulSoup文档. https://www.crummy.com/software/BeautifulSoup/bs4/doc/
[4] 谢希仁. 计算机网络(第8版). 电子工业出版社, 2021.
如若转载,请注明出处:http://www.hualiwangluokeji.com/product/45.html
更新时间:2026-10-05 23:17:34