Python爬虫实战实例:Python6个爬虫小案例(附源码)收藏这篇就够了

Python爬虫实战实例:Python6个爬虫小案例(附源码)收藏这篇就够了
引言

随着互联网的快速发展,数据成为了新时代的石油。Python作为一种高效、易学的编程语言,在数据采集领域有着广泛的应用。本文将详细讲解Python爬虫的原理、常用库以及实战案例,帮助读者掌握爬虫技能。
==(文末获取Python入门学习资料+视频教程+学习路线)==

一、爬虫原理

爬虫,又称网络爬虫,是一种自动获取网页内容的程序。它模拟人类浏览网页的行为,发送HTTP请求,获取网页源代码,再通过解析、提取等技术手段,获取所需数据。

1. HTTP请求与响应过程

爬虫首先向目标网站发送HTTP请求,请求可以包含多种参数,如URL、请求方法(GET或POST)、请求头(Headers)等。服务器接收到请求后,返回相应的HTTP响应,包括状态码、响应头和响应体(网页内容)。

2. 常用爬虫技术

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

Python入门基础教程【文末有惊喜福利】

二、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查询,适用于小型爬虫项目。

接下来将分享7个Python爬虫的小案例,帮助大家更好地学习和了解Python爬虫的基础知识。以下是每个案例的简介和源代码:

1. 爬取小说
import requests from bs4 import BeautifulSoup import time def fetch_chapter_urls(base_url, chapters): """ 从基础URL和章节列表中获取每个章节的完整URL。 这通常意味着你需要解析网站的目录或索引页面。 """ chapter_urls = [] # 这里应该有一个循环来遍历章节,并构建每个章节的URL # 但由于我们不知道具体的URL结构,所以这里只是假设 for chapter in chapters: # 假设章节URL是基于基础URL和章节名的简单拼接 chapter_url = f"{base_url}/chapter-{chapter}.html" chapter_urls.append(chapter_url) return chapter_urls def fetch_chapter_content(url): """ 从给定的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: print(f"Failed to retrieve {url}") return None soup = BeautifulSoup(response.text, 'html.parser') # 假设小说内容在<div>标签内 content = soup.find('div', class_='chapter-content') if content: return content.text else: print(f"Content not found in {url}") return None def main(base_url, start_chapter, end_chapter): # 假设我们知道章节号是从start_chapter到end_chapter chapters = range(start_chapter, end_chapter + 1) chapter_urls = fetch_chapter_urls(base_url, chapters) for url in chapter_urls: time.sleep(1) # 添加延时以避免过快请求导致的问题 content = fetch_chapter_content(url) if content: print(f"Chapter from {url}:") print(content) # 这里可以添加将内容保存到文件的逻辑 # 示例用法 base_url = 'http://example.com/novel/' start_chapter = 1 end_chapter = 10 main(base_url, start_chapter, end_chapter) 

注意

  1. 选择器fetch_chapter_content函数中的选择器(如class_='chapter-content')需要根据你的目标网站进行调整。
  2. 章节URLfetch_chapter_urls函数中的URL构建逻辑也需要根据你的目标网站进行调整。有些网站可能需要在URL中包含章节的ID或其他标识符,而不是简单的章节号。
  3. 反爬虫措施:如果网站有反爬虫机制,你可能需要添加额外的headers、使用代理、调整请求频率(如上面的time.sleep(1))或实现更复杂的逻辑来绕过这些限制。
  4. 数据存储:如果你打算保存爬取到的小说内容,你可以在fetch_chapter_content函数中添加逻辑来将内容写入文件或数据库。
2. 爬取猫眼电影Top100

这个案例使用正则表达式和requests库爬取猫眼电影Top100的电影名称、主演和上映时间等信息,并将这些信息保存到TXT文件中。

import requests import re # 请求URL url = '<https://maoyan.com/board/4>' # 请求头部 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.36' } # 解析页面函数 def parse_html(html): pattern = re.compile('<p><a href=".*?" title="(.*?)">(.*?)</a></p>.*?<p>(.*?)</p>.*?<p>(.*?)</p>', re.S) items = re.findall(pattern, html) for item in items: yield { '电影名称': item[1], '主演': item[2].strip(), '上映时间': item[3] } # 保存数据函数 def save_data(): f = open('maoyan_top100.txt', 'w', encoding='utf-8') for i in range(10): url = '<https://maoyan.com/board/4?offset=>' + str(i*10) response = requests.get(url, headers=headers) for item in parse_html(response.text): f.write(str(item) + '\\\\n') f.close() if __name__ == '__main__': save_data() 
3. 爬取全国高校名单

这个案例使用正则表达式和requests库爬取全国高校名单,并将这些信息保存到TXT文件中。

import requests import re # 请求URL url = '<http://www.zuihaodaxue.com/zuihaodaxuepaiming2019.html>' # 请求头部 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.36' } # 解析页面函数 def parse_html(html): pattern = re.compile('<tr>.*?<td>(.*?)</td>.*?<td><div>.*?<a href="(.*?)" target="_blank">(.*?)</a></div></td>.*?<td>(.*?)</td>.*?<td>(.*?)</td>.*?</tr>', re.S) items = re.findall(pattern, html) for item in items: yield { '排名': item[0], '学校名称': item[2], '省市': item[3], '总分': item[4] } # 保存数据函数 def save_data(): f = open('university_top100.txt', 'w', encoding='utf-8') response = requests.get(url, headers=headers) for item in parse_html(response.text): f.write(str(item) + '\\\\n') f.close() if __name__ == '__main__': save_data() 
4. 爬取中国天气网城市天气

这个案例使用xpath和requests库爬取中国天气网的城市天气,并将这些信息保存到CSV文件中。

Python入门基础教程【文末有惊喜福利】

import requests from lxml import etree import csv # 请求URL url = '<http://www.weather.com.cn/weather1d/101010100.shtml>' # 请求头部 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.36' } # 解析页面函数 def parse_html(html): selector = etree.HTML(html) city = selector.xpath('//*[@id="around"]/div/div[1]/div[1]/h1/text()')[0] temperature = selector.xpath('//*[@id="around"]/div/div[1]/div[1]/p/i/text()')[0] weather = selector.xpath('//*[@id="around"]/div/div[1]/div[1]/p/@title')[0] wind = selector.xpath('//*[@id="around"]/div/div[1]/div[1]/p/span/text()')[0] return city, temperature, weather, wind # 保存数据函数 def save_data(): f = open('beijing_weather.csv', 'w',, encoding='utf-8-sig') writer = csv.writer(f) writer.writerow(['城市', '温度', '天气', '风力']) for i in range(10): response = requests.get(url, headers=headers) city, temperature, weather, wind = parse_html(response.text) writer.writerow([city, temperature, weather, wind]) f.close() if __name__ == '__main__': save_data() 
5. 爬取当当网图书信息

这个案例使用xpath和requests库爬取当当网图书信息,并将这些信息保存到CSV文件中。

import requests from lxml import etree import csv # 请求URL url = '<http://search.dangdang.com/?key=Python&act=input>' # 请求头部 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.36' } # 解析页面函数 def parse_html(html): selector = etree.HTML(html) book_list = selector.xpath('//*[@id="search_nature_rg"]/ul/li') for book in book_list: title = book.xpath('a/@title')[0] link = book.xpath('a/@href')[0] price = book.xpath('p[@class="price"]/span[@class="search_now_price"]/text()')[0] author = book.xpath('p[@class="search_book_author"]/span[1]/a/@title')[0] publish_date = book.xpath('p[@class="search_book_author"]/span[2]/text()')[0] publisher = book.xpath('p[@class="search_book_author"]/span[3]/a/@title')[0] yield { '书名': title, '链接': link, '价格': price, '作者': author, '出版日期': publish_date, '出版社': publisher } # 保存数据函数 def save_data(): f = open('dangdang_books.csv', 'w',, encoding='utf-8-sig') writer = csv.writer(f) writer.writerow(['书名', '链接', '价格', '作者', '出版日期', '出版社']) response = requests.get(url, headers=headers) for item in parse_html(response.text): writer.writerow(item.values()) f.close() if __name__ == '__main__': save_data() 
6. 爬取新浪微博

这个案例使用selenium和requests库爬取新浪微博,并将这些信息保存到TXT文件中。

import time from selenium import webdriver import requests # 请求URL url = '<https://weibo.com/>' # 请求头部 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.36' } # 解析页面函数 def parse_html(html): print(html) # 保存数据函数 def save_data(): f = open('weibo.txt', 'w', encoding='utf-8') browser = webdriver.Chrome() browser.get(url) time.sleep(10) browser.find_element_by_name('username').send_keys('username') browser.find_element_by_name('password').send_keys('password') browser.find_element_by_class_name('W_btn_a').click() time.sleep(10) response = requests.get(url, headers=headers, cookies=browser.get_cookies()) parse_html(response.text) browser.close() f.close() if __name__ == '__main__': save_data() 

希望这6个小案例能够帮助大家更好地掌握Python爬虫的基础知识!

爬虫注意事项与技巧
  • 遵循Robots协议
  • 尊重网站的爬虫协议,避免爬取禁止爬取的内容。
  • 设置合理的请求间隔
  • 避免对目标网站服务器造成过大压力,合理设置请求间隔。
  • 处理反爬虫策略
  • 了解并应对网站的反爬虫策略,如IP封禁、验证码等。
  • 使用代理IP、Cookies等技巧
  • 提高爬虫的稳定性和成功率。
  • 分布式爬虫的搭建与优化
  • 使用Scrapy-Redis等框架,实现分布式爬虫,提高爬取效率。
Python爬虫框架
  • Scrapy:强大的Python爬虫框架,支持分布式爬取、多种数据格式、强大的插件系统等。
  • Scrapy-Redis:基于Scrapy和Redis的分布式爬虫框架,实现分布式爬取和去重功能。

结语:

通过本文的讲解,相信读者已经对Python爬虫有了较为全面的认识。爬虫技能在数据分析、自然语言处理等领域具有广泛的应用,希望读者能够动手实践,不断提高自己的技能水平。同时,请注意合法合规地进行爬虫,遵守相关法律法规。祝您学习愉快!

黑客/网络安全学习包

资料目录

  1. 成长路线图&学习规划
  2. 配套视频教程
  3. SRC&黑客文籍
  4. 护网行动资料
  5. 黑客必读书单
  6. 面试题合集

因篇幅有限,仅展示部分资料,需要点击下方链接即可前往获取

ZEEKLOG大礼包:《黑客&网络安全入门&进阶学习资源包》免费分享

1.成长路线图&学习规划

要学习一门新的技术,作为新手一定要先学习成长路线图方向不对,努力白费

对于从来没有接触过网络安全的同学,我们帮你准备了详细的学习成长路线图&学习规划。可以说是最科学最系统的学习路线,大家跟着这个大的方向学习准没问题。


因篇幅有限,仅展示部分资料,需要点击下方链接即可前往获取

ZEEKLOG大礼包:《黑客&网络安全入门&进阶学习资源包》免费分享

2.视频教程

很多朋友都不喜欢晦涩的文字,我也为大家准备了视频教程,其中一共有21个章节,每个章节都是当前板块的精华浓缩


因篇幅有限,仅展示部分资料,需要点击下方链接即可前往获取

ZEEKLOG大礼包:《黑客&网络安全入门&进阶学习资源包》免费分享

3.SRC&黑客文籍

大家最喜欢也是最关心的SRC技术文籍&黑客技术也有收录

SRC技术文籍:

黑客资料由于是敏感资源,这里不能直接展示哦!

4.护网行动资料

其中关于HW护网行动,也准备了对应的资料,这些内容可相当于比赛的金手指!

5.黑客必读书单

**

**

6.面试题合集

当你自学到这里,你就要开始思考找工作的事情了,而工作绕不开的就是真题和面试题。

更多内容为防止和谐,可以扫描获取~

因篇幅有限,仅展示部分资料,需要点击下方链接即可前往获取

ZEEKLOG大礼包:《黑客&网络安全入门&进阶学习资源包》免费分享

Read more

这回真的“装”到了!来OpenClaw全国纵深行,你只需要带一台电脑……

这回真的“装”到了!来OpenClaw全国纵深行,你只需要带一台电脑……

AI Agent 的风,已经从 GitHub 吹到了线下。 过去几个月,越来越多开发者开始讨论一个问题: 当 AI 不再只是聊天,而是可以执行任务,软件会变成什么样? 在这股浪潮中,一个开源项目迅速进入开发者视野——OpenClaw,在 GitHub 上获得大量关注,相关教程、实践案例不断出现。有人用它自动整理资料,有人用它管理开发流程,还有人尝试让它执行复杂的工作流。 很多开发者第一次意识到: AI 不只是工具,它可能成为“执行者”。 不过,在技术社区之外,大多数人对 Agent 的理解仍停留在概念层面。 * AI Agent 到底是什么? * 如何在自己的电脑上运行? * 普通开发者能否真正用起来? 带着这些问题,一场围绕 OpenClaw 的开发者城市行动正在展开。 ZEEKLOG 发起的OpenClaw 全国纵深行将走进 20 个城市,用最直接的方式回答一个问题——如果

By Ne0inhk

CVE-2026-1731漏洞利用现状与网络安全防护策略研究——基于BeyondTrust产品高危漏洞的分析

远程访问类产品作为企业数字化运维与跨域办公的核心基础设施,其安全漏洞已成为网络威胁攻击者的主要利用入口。 本文以BeyondTrust Remote Support(RS)与Privileged Remote Access(PRA)产品存在的CVE-2026-1731高危漏洞为研究对象,通过分析该漏洞的技术成因、定级特征与权限利用逻辑,结合在野利用的实际监测数据,解构了攻击者利用该漏洞实施攻击的完整链路,并探讨其与历史漏洞CVE-2024-12356的技术关联性,揭示BeyondTrust产品在输入验证环节存在的系统性安全缺陷。 同时,本文前瞻性预判了该漏洞后续的威胁演化趋势,并从企业端紧急处置、长效防护,以及厂商端产品研发、应急响应等维度,构建多主体、全流程的安全防护体系,为远程访问类产品的漏洞防御与网络安全建设提供实践参考。 引言 在数字化与全球化发展背景下,远程支持、特权远程访问类产品已成为金融、医疗、高科技等行业实现跨地域运维、精细化权限管理的核心工具,其安全性直接关系到企业网络基础设施的整体防护能力。此类产品因对接企业内网核心资源、承载权限管理功能,已成为黑产团伙与

By Ne0inhk
Spring Boot AOP(二) 代理机制解析

Spring Boot AOP(二) 代理机制解析

博主社群介绍: ① 群内初中生、高中生、本科生、研究生、博士生遍布,可互相学习,交流困惑。 ② 热榜top10的常客也在群里,也有数不清的万粉大佬,可以交流写作技巧,上榜经验,涨粉秘籍。 ③ 群内也有职场精英,大厂大佬,跨国企业主管,可交流技术、面试、找工作的经验。 进群免费赠送写作秘籍一份,助你由写作小白晋升为创作大佬,进群赠送ZEEKLOG评论防封脚本,送真活跃粉丝,助你提升文章热度。 群公告里还有全网大赛约稿汇总/博客提效工具集/ZEEKLOG自动化运营脚本 有兴趣的加文末联系方式,备注自己的ZEEKLOG昵称,拉你进群,互相学习共同进步。 文章目录 * Spring Boot AOP(二) 代理机制解析 * 1. 代理机制概述 * 2. JDK 动态代理源码解析 * 核心类和方法 * 流程示意 * 特点 * 3. CGLIB 代理源码解析 * 核心类 * 调用流程

By Ne0inhk