news 2026/10/25 13:29:12

爬虫详解:原理、常用库与实战案例!

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
爬虫详解:原理、常用库与实战案例!
一.爬虫介绍
1.什么是爬虫
2.爬虫的工作流程
以下是爬虫工作的一般流程:
爬虫的工作需要考虑一些因素,例如网页的反爬虫机制、遵守网站的robots.txt文件、限速策略以避免对服务器造成过大负载等。同时,应该遵守法律和道德规范,在抓取数据时尊重网站的隐私政策和使用条款。
3. 常用爬虫技术

(1)请求库:如requests、aiohttp等,用于发送HTTP请求。
(2)解析库:如BeautifulSoup、lxml、PyQuery等,用于解析网页内容。
(3)存储库:如pandas、SQLite等,用于存储爬取到的数据。
(4)异步库:如asyncio、aiohttp等,用于实现异步爬虫,提高爬取效率。

二、Python爬虫常用库
1. 请求库

(1)requests:简洁、强大的HTTP库,支持HTTP连接保持和连接池,支持SSL证书验证、Cookies等。
(2)aiohttp:基于asyncio的异步HTTP网络库,适用于需要高并发的爬虫场景。

2. 解析库

(1)BeautifulSoup:一个HTML和XML的解析库,简单易用,支持多种解析器。
(2)lxml:一个高效的XML和HTML解析库,支持XPath和CSS选择器。
(3)PyQuery:一个Python版的jQuery,语法与jQuery类似,易于上手。

3. 存储库

(1)pandas:一个强大的数据分析库,提供数据结构和数据分析工具,支持多种文件格式。
(2)SQLite:一个轻量级的数据库,支持SQL查询,适用于小型爬虫项目。

三、编写一个简单的Python爬虫
1.设计爬虫需求
2.编写代码

(1)使用requests库发送HTTP请求,获取网页源代码。
(2)使用BeautifulSoup库解析网页内容,提取所需数据。
(3)使用pandas库存储数据,并保存为CSV文件。

3.运行爬虫并展示结果
import requests from bs4 import BeautifulSoup import pandas as pd # 豆瓣电影TOP250的基础URL base_url = 'https://movie.douban.com/top250' # 定义一个函数来获取页面内容 def get_page_content(url): headers = { 'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/58.0.3029.110 Safari/537.3'} response = requests.get(url, headers=headers) if response.status_code == 200: return response.text else: print('请求页面失败:', response.status_code) return None # 定义一个函数来解析页面内容 def parse_page_content(html): soup = BeautifulSoup(html, 'html.parser') movie_list = soup.find_all('div', class_='item') movies = [] for movie in movie_list: title = movie.find('span', class_='title').get_text() rating = movie.find('span', class_='rating_num').get_text() director = movie.find('p', class_='').find('a').get_text() movies.append({'title': title, 'rating': rating, 'director': director}) return movies # 定义一个函数来保存数据到CSV文件 def save_to_csv(movies): df = pd.DataFrame(movies) df.to_csv('douban_top250.csv', index=False, encoding='utf_8_sig') # 主函数,用于运行爬虫 def main(): movies = [] for i in range(0, 250, 25): # 豆瓣电影TOP250分为10页,每页25部电影 url = f'{base_url}?start={i}&filter=' html = get_page_content(url) if html: movies.extend(parse_page_content(html)) save_to_csv(movies) print('爬取完成,数据已保存到douban_top250.csv') # 运行主函数 if __name__ == '__main__': main()
在实际使用中,需要根据豆瓣网站的实际情况调整以下内容:
1.URL和参数:
2.BeautifulSoup选择器:
此外,为了遵守网站的使用协议和法律法规,请确保在编写爬虫时遵循以下几点:
最后,由于网站结构可能会发生变化,上述代码可能需要根据实际情况进行调整。在实际应用中,请确保您的爬虫行为合法合规。
四、爬虫实战案例
1. 分析网站结构
2. 编写爬虫代码

(1)使用requests库发送带参数的HTTP请求,获取职位列表。
(2)使用lxml库解析职位列表,提取职位详情页URL。
(3)使用PyQuery库解析职位详情页,提取职位信息。
(4)使用SQLite数据库存储职位信息。

3. 结果展示与分析
import requests from lxml import etree from pyquery import PyQuery as pq import sqlite3 # 创建或连接SQLite数据库 conn = sqlite3.connect('job.db') cursor = conn.cursor() # 创建职位信息表 cursor.execute('CREATE TABLE IF NOT EXISTS job (id INTEGER PRIMARY KEY, title TEXT, salary TEXT, company TEXT, location TEXT)') # 分析网站结构后得到的职位列表URL url = 'https://www.example.com/jobs' # 发送HTTP请求获取职位列表 params = { 'page': 1, # 假设页面参数为page,这里请求第1页 'city': 'beijing' # 假设城市参数为city,这里请求北京地区的职位} response = requests.get(url, params=params) response.encoding = 'utf-8' # 设置字符编码,防止乱码 # 使用lxml解析职位列表,提取职位详情页URL html = etree.HTML(response.text) job_list = html.xpath('//div[@class="job-list"]/ul/li/a/@href') # 假设职位详情页URL在a标签的href属性中 # 遍历职位详情页URL,爬取职位信息 for job_url in job_list: job_response = requests.get(job_url) job_response.encoding = 'utf-8' job_html = pq(job_response.text) # 使用PyQuery解析职位详情页,提取职位信息 title = job_html('.job-title').text() # 假设职位名称在class为job-title的元素中 salary = job_html('.job-salary').text() # 假设薪资信息在class为job-salary的元素中 company = job_html('.job-company').text() # 假设公司名称在class为job-company的元素中 location = job_html('.job-location').text() # 假设工作地点在class为job-location的元素中 # 存储职位信息到SQLite数据库 cursor.execute('INSERT INTO job (title, salary, company, location) VALUES (?, ?, ?, ?)', (title, salary, company, location)) conn.commit() # 关闭数据库连接 cursor.close() conn.close()
在实际使用中,需要根据目标网站的实际情况调整以下内容:
此外,为了遵守网站的使用协议和法律法规,请确保在编写爬虫时遵循以下几点:
五、爬虫注意事项与技巧
1.遵循Robots协议**
2.设置合理的请求间隔
3.处理反爬虫策略
4.使用代理IP、Cookies等技巧
5.分布式爬虫的搭建与优化
6.Scrapy:
7.Scrapy-Redis:
以上就是文章的内容了,相信大家对爬虫应该有了比较全面的认识了,爬虫在各个领域都具有广泛的应用,希望读者能够动手实践,不断提高自己的技能水平。

总结

学习资源

如果你是也准备转行学习网络安全(黑客)或者正在学习,这里开源一份360智榜样学习中心独家出品《网络攻防知识库》,希望能够帮助到你

知识库由360智榜样学习中心独家打造出品,旨在帮助网络安全从业者或兴趣爱好者零基础快速入门提升实战能力,熟练掌握基础攻防到深度对抗。

1、知识库价值

深度: 本知识库超越常规工具手册,深入剖析攻击技术的底层原理与高级防御策略,并对业内挑战巨大的APT攻击链分析、隐蔽信道建立等,提供了独到的技术视角和实战验证过的对抗方案。

广度: 面向企业安全建设的核心场景(渗透测试、红蓝对抗、威胁狩猎、应急响应、安全运营),本知识库覆盖了从攻击发起、路径突破、权限维持、横向移动到防御检测、响应处置、溯源反制的全生命周期关键节点,是应对复杂攻防挑战的实用指南。

实战性: 知识库内容源于真实攻防对抗和大型演练实践,通过详尽的攻击复现案例、防御配置实例、自动化脚本代码来传递核心思路与落地方法。

2、 部分核心内容展示

360智榜样学习中心独家《网络攻防知识库》采用由浅入深、攻防结合的讲述方式,既夯实基础技能,更深入高阶对抗技术。

360智榜样学习中心独家《网络攻防知识库》采用由浅入深、攻防结合的讲述方式,既夯实基础技能,更深入高阶对抗技术。

内容组织紧密结合攻防场景,辅以大量真实环境复现案例、自动化工具脚本及配置解析。通过策略讲解、原理剖析、实战演示相结合,是你学习过程中好帮手。

1、网络安全意识

2、Linux操作系统

3、WEB架构基础与HTTP协议

4、Web渗透测试

5、渗透测试案例分享

6、渗透测试实战技巧

7、攻防对战实战

8、CTF之MISC实战讲解

3、适合学习的人群

‌一、基础适配人群‌

  1. ‌零基础转型者‌:适合计算机零基础但愿意系统学习的人群,资料覆盖从网络协议、操作系统到渗透测试的完整知识链‌;
  2. ‌开发/运维人员‌:具备编程或运维基础者可通过资料快速掌握安全防护与漏洞修复技能,实现职业方向拓展‌或者转行就业;
  3. ‌应届毕业生‌:计算机相关专业学生可通过资料构建完整的网络安全知识体系,缩短企业用人适应期‌;

‌二、能力提升适配‌

1、‌技术爱好者‌:适合对攻防技术有强烈兴趣,希望掌握漏洞挖掘、渗透测试等实战技能的学习者‌;

2、安全从业者‌:帮助初级安全工程师系统化提升Web安全、逆向工程等专项能力‌;

3、‌合规需求者‌:包含等保规范、安全策略制定等内容,适合需要应对合规审计的企业人员‌;

因篇幅有限,仅展示部分资料,完整版的网络安全学习资料已经上传CSDN,朋友们如果需要可以在下方CSDN官方认证二维码免费领取【保证100%免费】

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/10/21 2:04:36

首程控股(0697.HK)机器人投资回报显现:明星项目已获超10倍收益

在人工智能与实体经济深度融合的浪潮中,机器人产业正成为最具颠覆性的前沿阵地。近日,首程控股(0697.HK)以其在机器人赛道亮眼的投资战绩引发市场高度关注。公司不仅宣布将于本周日(2026年1月18日)晚上7:50在抖音及视频号开启直播首秀,以机器人产品销售与市场化验证为核心,推动…

作者头像 李华
网站建设 2026/10/21 10:39:24

如何将文件从 iPhone 传输到 Android

如果您也想与朋友分享文件,或者从 iPhone 切换到 Android,那么您需要这份指南,其中包含 5 种有效的方法。您可以使用其中一种方法,轻松地将文件从 iPhone 发送到 Android。特征/方法第一部分:如何通过“切换到安卓”功…

作者头像 李华
网站建设 2026/10/17 8:00:30

一文读懂贵金属上涨的四大引擎

2025年黄金大约上涨65%,创下数十年来的最佳年度涨幅;白银全年飙升逾150%,一度突破每盎司80美元。2026年初,贵金属的牛市行情依然延续,现货黄金价格在1月中旬一度触及4622美元/盎司,白银更是暴涨并逼近90美元…

作者头像 李华
网站建设 2026/10/23 9:06:53

淘宝API SDK快速开发指南

本文将指导开发者快速接入淘宝开放平台API,通过官方SDK实现高效调用。以下为关键步骤: 1. 环境准备 安装Python SDK包: pip install top-api-python-sdk申请应用密钥: 登录淘宝开放平台,创建应用后获取app_key与app…

作者头像 李华