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

前言

请添加图片描述

前些天发现了一个巨牛的人工智能学习网站,通俗易懂,风趣幽默,忍不住分享一下给大家:https://www.captainbed.cn/z
请添加图片描述

ChatGPT体验地址

请添加图片描述

文章目录

  • 前言
  • 引言:
  • 一、爬虫原理
    • 1. HTTP请求与响应过程
    • 2. 常用爬虫技术
  • 二、Python爬虫常用库
    • 1. 请求库
    • 2. 解析库
    • 3. 存储库
  • 三、编写一个简单的Python爬虫
  • 四、爬虫实战案例
    • 1. 分析网站结构
    • 2. 编写爬虫代码
  • 五、爬虫注意事项与技巧
  • 结语:

引言:

随着互联网的快速发展,数据成为了新时代的石油。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爬虫常用库

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爬虫

以爬取豆瓣电影TOP250为例,讲解如何编写一个简单的Python爬虫。

  1. 设计爬虫需求
    爬取豆瓣电影TOP250的电影名称、评分、导演等信息。
  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.textelse: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和参数:根据豆瓣电影的URL结构和参数进行设置。
  2. BeautifulSoup选择器:根据网页源代码的结构编写正确的选择器来提取数据。
    此外,为了遵守网站的使用协议和法律法规,请确保在编写爬虫时遵循以下几点:
  • 遵守Robots协议,不爬取网站禁止爬取的内容。
  • 设置合理的请求间隔,避免对网站服务器造成过大压力。
  • 如果遇到网站的反爬措施,如验证码、IP封禁等,请合理应对,遵守网站规定。
  • 使用爬虫获取的数据请勿用于商业目的或侵犯他人隐私。
    最后,由于网站结构可能会发生变化,上述代码可能需要根据实际情况进行调整。在实际应用中,请确保您的爬虫行为合法合规。

四、爬虫实战案例

以爬取某招聘网站职位信息为例,讲解如何编写一个实用的Python爬虫。

1. 分析网站结构

通过观察招聘网站的URL、参数和页面结构,找到职位信息的来源。

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. URL和参数:根据目标网站的URL结构和参数进行设置。
  2. Xpath表达式:根据网页源代码的结构编写正确的Xpath表达式来提取数据。
  3. PyQuery选择器:根据网页源代码的结构编写正确的CSS选择器来提取数据。
  4. 数据库操作:根据需要创建合适的数据库表结构,并插入数据。
    此外,为了遵守网站的使用协议和法律法规,请确保在编写爬虫时遵循以下几点:
  • 遵守Robots协议,不爬取网站禁止爬取的内容。
  • 设置合理的请求间隔,避免对网站服务器造成过大压力。
  • 如果遇到网站的反爬措施,如验证码、IP封禁等,请合理应对,遵守网站规定。
  • 使用爬虫获取的数据请勿用于商业目的或侵犯他人隐私。

五、爬虫注意事项与技巧

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

结语:

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

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/785074.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

【C++程序员的自我修炼】基础语法篇(二)

风力掀天浪打头 只须一笑不须愁 目录 内联函数 概念💞 性质 ⭐ 不建议变量分离 inline的优劣势 inline的局限性 auto关键字 auto的概念💞 auto的使用细则💞 auto不能推导的场景 💞 auto基于范围的for循环💞 指针空值n…

nginx的安装教程

文章目录 简介nginx安装windows下安装linux下安装 简介 nginx是一个开源的web服务器和反向代理服务器,可以用作负载均衡和HTTP缓存。它处理并发能力是十分强大的,能够经受高负载的考验。 正向代理 Nginx不仅可以做反向代理,实现负载均衡&am…

简单说清楚什么是SQL Injection?

最近看完了《The Pragmatic Programmer: 20th Anniversary Edition, 2nd Edition: Your Journey to Mastery》,在第7章:While You Are Coding的footnotes中,提到了一幅漫画: 这不仅用简单的方式说清楚了什么是SQL Injection&#…

C语言数据结构易错知识点(6)(快速排序、归并排序、计数排序)

快速排序属于交换排序,交换排序还有冒泡排序,这个太简单了,这里就不再讲解。 归并排序和快速排序都是采用分治法实现的排序,理解它们对分支思想的感悟会更深。 计数排序属于非比较排序,在数据集中的情况下可以考虑使…

百度贝塞尔曲线证码识别代码

一、前言 百度出了如图所示的验证码,需要拖动滑块,与如图所示的曲线轨迹进行重合。经过不断研究,终于解决了这个问题。我把识别代码分享给大家。 下面是使用selenium进行验证的,这样可以看到轨迹滑动的过程,如果需要…

Windows11系统缺少相关DLL解决办法

一.缺少msvcp120.dll 下载Mircrosoft Visual C 2015等系统关键组件 Microsoft Visual C 2015-2022 Redistributable (x86) - 14.34.31931 Installation Error etc.. - Microsoft Q&A 二.缺少python27.dll 重新下载python2.7进行安装(选择Windows x86-64 MSI installer)…

DS2438Z+TR智能电池监测器多场景行业应用解决方案

DS2438ZT&R智能电池监视器为电池组提供了若干很有价值的功能:可用于标识电池组的唯一序列号;直接数字化的温度传感器省掉了电池组内的热敏电阻;可测量电池电压和电流的A/D转换器;集成电流累积器用于记录进入和流出电池的电流总…

前端学习<二>CSS基础——14-CSS3属性详解:Web字体

前言 开发人员可以为自已的网页指定特殊的字体(将指定字体提前下载到站点中),无需考虑用户电脑上是否安装了此特殊字体。从此,把特殊字体处理成图片的方式便成为了过去。 支持程度比较好,甚至 IE 低版本的浏览器也能…

格雷希尔G10系列L150A和L200A气动快速连接器,在新能源汽车线束线缆剥线后的气密性测试密封方案

线束线缆在很多用电环境都有使用,比如说新能源汽车,从电池包放电开始,高低压、通讯都开始进行工作,线束在连接的地方需要具有较高的气密性和稳定性,才能保证车辆在不同环境下能够正常的运行。 线束在组装铜鼻子前需要剥…

Linux之 线程池 | 单例模式的线程安全问题 | 其他锁

目录 一、线程池 1、线程池 2、线程池代码 3、线程池的应用场景 二、单例模式的线程安全问题 1、线程池的单例模式 2、线程安全问题 三、其他锁 一、线程池 1、线程池 线程池是一种线程使用模式。线程池里面可以维护一些线程。 为什么要有线程池? 因为在…

C++第十四弹---模板初阶

✨个人主页: 熬夜学编程的小林 💗系列专栏: 【C语言详解】 【数据结构详解】【C详解】 目录 1、泛型编程 2、函数模板 2.1、函数模板的概念 2.2、函数模板的格式 2.3、函数模板的原理 2.4、函数模板的实例化 2.5、模板参数的匹配原则 …

抽象类和接口(2)(接口部分)

❤️❤️前言~🥳🎉🎉🎉 hellohello~,大家好💕💕,这里是E绵绵呀✋✋ ,如果觉得这篇文章还不错的话还请点赞❤️❤️收藏💞 💞 关注💥&a…

增加网站搜索引擎排名的6个准则

怎样提高网站排名首页 在竞争激烈的网络世界中,网站的排名对于吸引流量和提升曝光至关重要。登上搜索引擎结果页面的首页,意味着更多的曝光和点击率。以下是一些方法,可以帮助您提高网站在搜索引擎中的排名,让其跻身首页&#xf…

2014年认证杯SPSSPRO杯数学建模A题(第二阶段)轮胎的花纹全过程文档及程序

2014年认证杯SPSSPRO杯数学建模 A题 轮胎的花纹 原题再现: 轮胎被广泛使用在多种陆地交通工具上。根据性能的需要,轮胎表面常会加工出不同形状的花纹。在设计轮胎时,往往要针对其使用环境,设计出相应的花纹形状。   第二阶段问…

SAP 销售分销中的免费货物

销售业务中,免费货物在您与客户协商价格时起着重要作用。在零售、化工或消费品这样的行业部门中,通常以免费货物的形式向客户提供折扣。 作为用户,业务用户希望能自动确定免费货物并将它们归入销售凭证中。同时需要向成本控制部门提供免费货物…

SOC内部集成网络MAC外设+ PHY网络芯片方案:PHY芯片基础知识

一. 简介 本文简单了解一下 "SOC内部集成网络MAC外设 PHY网络芯片方案" 这个网络硬件方案中涉及的 PHY网络芯片的基础知识。 二. PHY芯片基础知识 PHY 是 IEEE 802.3 规定的一个标准模块。 1. IEEE规定了PHY芯片的前 16个寄存器功能是一样的 前面说了&#xf…

[优选算法专栏]专题十五:FloodFill算法(二)

本专栏内容为:算法学习专栏,分为优选算法专栏,贪心算法专栏,动态规划专栏以及递归,搜索与回溯算法专栏四部分。 通过本专栏的深入学习,你可以了解并掌握算法。 💓博主csdn个人主页:小…

基于8086多路模拟采集LED报警系统设计

**单片机设计介绍,基于8086多路模拟采集LED报警系统设计 文章目录 一 概要二、功能设计设计思路 三、 软件设计原理图 五、 程序六、 文章目录 一 概要 基于8086多路模拟采集LED报警系统设计概要 一、引言 在工业控制、环境监测以及智能家居等领域,多…

探索http-vue-loader的奥秘:原理、使用方法、在Vue开发中的应用

🤍 前端开发工程师、技术日更博主、已过CET6 🍨 阿珊和她的猫_CSDN博客专家、23年度博客之星前端领域TOP1 🕠 牛客高级专题作者、打造专栏《前端面试必备》 、《2024面试高频手撕题》 🍚 蓝桥云课签约作者、上架课程《Vue.js 和 E…

软考历史题目

2023.3 1. 磁盘索引块1KB,每个地址项4字节,每个磁盘索引块可以存放256个物理块地址 2.5个地址项为直接索引地址,所以0-5逻辑块是直接索引 3.一级间接地址索引,每个指向的物理块存255个地址 4.二级间接地址:256个间接索引表地址…