首页
技术小册
AIGC
面试刷题
技术文章
MAGENTO
云计算
视频课程
源码下载
PDF书籍
「涨薪秘籍」
登录
注册
1.1 HTTP基本原理
1.2 Web 网页基础
1.3 爬虫的基本原理
1.4 Session和Cookie
1.5 代理的基本原理
1.6 多线程和多进程的基本原理
2.1 urllib的使用
2.2 requests的使用
2.3 正则表达式
2.4 httpx的使用
2.5 基础爬虫案例实战
3.1 XPath的使用
3.2 Beautiful Soup的使用
3.3 pyquery的使用
3.4 parsel 的使用
4.1 TXT 文本文件存储
4.2 JSON 文件存储
4.3 CSV 文件存储
4.4 MySQL 存储
4.5 MongoDB 文档存储
4.6 Redis缓存存储
4.7 Elasticsearch 搜索引擎存储
4.8 RabbitMQ 的使用
5.1 什么是 Ajax
5.2 Ajax分析方法
5.3 Ajax 分析与爬取实战
6.1 协程的基本原理
6.2 aiohttp的使用
6.3 aiohttp 异步爬取实战
7.1 Selenium 的使用
7.2 Splash 的使用
7.3 Pyppeteer 的使用
7.4 Playwright 的使用
7.5 Selenium 爬取实战
7.6 Pyppeteer 爬取实战
7.7 CSS 位置偏移反爬案例分析与爬取实战
7.8 字体反爬案例分析与爬取实战
8.1 使用 OCR 技术识别图形验证码
8.2 使用 OpenCV 识别滑动验证码的缺口
8.3 使用深度学习识别图形验证码
8.4 使用深度学习识别滑动验证码的缺口
8.5 使用打码平台识别验证码
8.6 手机验证码的自动化处理
9.1 代理的设置
9.2 代理池的维护
9.3 付费代理的使用
9.4 ADSL 拨号代理的搭建方法
9.5 代理反爬案例爬取实战
10.1 模拟登录的基本原理
10.2 基于Session和Cookie的模拟登录爬取实战
10.3 基于JWT的模拟登录爬取实战
10.4 大规模账号池的搭建
11.1 网站加密和混淆技术简介
11.2 浏览器调试常用技巧
11.3 JavaScript Hook 的使用
11.4 无限 debugger 的原理与绕过
11.5 使用 Python 模拟执行 JavaScript
11.6 使用 Node.js 模拟执行 JavaScript
11.7 浏览器环境下 JavaScript 的模拟执行
11.8 AST 技术简介
11.9 使用 AST 技术还原混淆代码
11.10 特殊混淆案例的还原
11.11 WebAssembly 案例分析和爬取实战
11.12 JavaScript 逆向技巧总结
11.13 JavaScript 逆向爬取实战
当前位置:
首页>>
技术小册>>
Python3网络爬虫开发实战(上)
小册名称:Python3网络爬虫开发实战(上)
### 2.5 基础爬虫案例实战 在前面的章节中,我们系统地学习了Python网络爬虫的基础知识,包括HTTP请求与响应、网页解析技术(如正则表达式、BeautifulSoup、lxml等)、以及处理JavaScript动态加载内容的高级技巧。现在,是时候将这些理论知识应用到实践中去了。本章节将通过一个基础但全面的爬虫案例,带你从头到尾实现一个网络爬虫项目,旨在抓取指定网站的数据,并进行简单的存储与分析。 #### 2.5.1 案例背景与目标 假设我们需要爬取一个名为“电影天堂”的网站(注:这里仅为示例,实际开发中需遵守目标网站的`robots.txt`规则及法律法规),该网站提供了丰富的电影资源下载信息,包括电影名称、导演、主演、上映时间、下载链接等。我们的目标是爬取该网站首页上所有电影的基本信息,并将这些信息保存至本地数据库或文件中。 #### 2.5.2 环境准备 在开始编写爬虫之前,请确保你的开发环境中已安装以下必要的库: - Python 3.x - requests(用于发送HTTP请求) - BeautifulSoup4(用于解析HTML) - pandas(用于数据处理) - sqlite3 或其他数据库库(用于数据存储,这里以sqlite3为例) 你可以通过pip命令安装这些库: ```bash pip install requests beautifulsoup4 pandas sqlite3 ``` 注意:`sqlite3`是Python标准库的一部分,通常不需要单独安装。 #### 2.5.3 爬虫设计 ##### 2.5.3.1 爬取流程规划 1. **发送请求**:使用`requests`库向目标网站发送HTTP GET请求,获取首页HTML内容。 2. **解析页面**:使用`BeautifulSoup`解析HTML,提取电影列表中的相关信息。 3. **数据存储**:将提取的数据保存到sqlite数据库中。 4. **异常处理**:添加异常处理机制,确保爬虫稳定运行。 5. **日志记录**:记录爬取过程中的关键信息,便于调试和监控。 ##### 2.5.3.2 爬虫代码实现 以下是基于上述规划的爬虫代码示例: ```python import requests from bs4 import BeautifulSoup import sqlite3 import pandas as pd # 目标网站URL url = 'http://example.movieheaven.com/' # 数据库连接函数 def create_connection(db_file): conn = None try: conn = sqlite3.connect(db_file) return conn except Error as e: print(e) return conn # 创建表 def create_table(conn, create_table_sql): try: c = conn.cursor() c.execute(create_table_sql) except Error as e: print(e) # 插入数据 def insert_data(conn, movie): sql = ''' INSERT INTO movies(title, director, stars, release_date, download_link) VALUES(?,?,?,?,?) ''' cur = conn.cursor() cur.execute(sql, movie) conn.commit() # 爬取函数 def scrape_movies(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) soup = BeautifulSoup(response.text, 'html.parser') # 假设电影信息存储在class为"movie-item"的div中 movies_list = soup.find_all('div', class_='movie-item') # 数据库连接 conn = create_connection('movies.db') if conn is not None: # 创建表(如果尚未创建) create_table_sql = ''' CREATE TABLE IF NOT EXISTS movies ( id INTEGER PRIMARY KEY AUTOINCREMENT, title TEXT NOT NULL, director TEXT, stars TEXT, release_date TEXT, download_link TEXT ); ''' create_table(conn, create_table_sql) # 遍历电影列表,提取并插入数据 for movie_item in movies_list: title = movie_item.find('h3', class_='title').get_text(strip=True) director = movie_item.find('p', class_='director').get_text(strip=True) stars = movie_item.find('p', class_='stars').get_text(strip=True) release_date = movie_item.find('p', class_='release-date').get_text(strip=True) download_link = movie_item.find('a', class_='download-link').get('href') movie = (title, director, stars, release_date, download_link) insert_data(conn, movie) conn.close() # 执行爬取 scrape_movies(url) ``` #### 2.5.4 注意事项与改进 1. **遵守法律法规**:在编写爬虫时,务必遵守目标网站的`robots.txt`规则,以及相关法律法规,避免侵犯版权或进行非法数据抓取。 2. **异常处理**:上述代码中简单处理了数据库连接错误,但在实际应用中,还需考虑网络请求失败、数据解析错误等多种异常情况。 3. **性能优化**:对于大规模数据的爬取,应考虑使用多线程、异步请求等技术提高爬虫效率。 4. **数据清洗**:从网页中提取的数据往往包含大量无用信息或噪声,需要进行清洗和格式化处理。 5. **反爬虫策略应对**:目标网站可能会设置各种反爬虫策略,如动态加载、验证码验证等,需根据实际情况采取相应的应对措施。 #### 2.5.5 总结 通过本章节的基础爬虫案例实战,我们不仅复习了网络爬虫的核心技术,还通过实战项目加深了对这些技术的理解和应用。在实际开发中,你可能会遇到各种各样的问题和挑战,但只要掌握了基本的方法和思路,就能够灵活应对。希望这个案例能够为你今后的爬虫开发之路提供一些有益的参考和启示。
上一篇:
2.4 httpx的使用
下一篇:
3.1 XPath的使用
该分类下的相关小册推荐:
Python爬虫入门与实战开发(上)
Python甚础Django与爬虫
Python高性能编程与实战
Python合辑6-字典专题
Python高并发编程与实战
Python合辑3-字符串用法深度总结
Python编程轻松进阶(三)
Python合辑9-判断和循环
Python面试指南
Python神经网络入门与实践
Python机器学习基础教程(上)
实战Python网络爬虫