【python】一文了解Python爬虫 | 文末送书

news2024/11/27 18:26:41

目录

引言

1. 爬虫基础知识

1.1 什么是爬虫

1.2 HTTP协议

1.2.1 HTTP请求方法

1.GET请求

1.2.2 请求头常见字段

1.2.3 响应状态码

1.3 HTML解析

1.3.1 Beautiful Soup

       解析库

1.3.2 XPath

        xpath解析原理: 

         xpath 表达式

2. 爬虫进阶技巧

2.1 防止被反爬虫

2.1.1 User-Agent伪装

2.1.2 IP代理

2.2 登录和验证码处理

2.2.1 登录处理

2.2.2 验证码处理

结论


引言

        网络上的数据量庞大且不断增长,因此,掌握爬虫技术成为了一项重要的能力。Python作为一门功能强大且易于学习的编程语言,被广泛应用于爬虫领域。本文将介绍如何精通Python爬虫,从基础知识到高级技巧,帮助您成为一名优秀的爬虫工程师。

1. 爬虫基础知识

1.1 什么是爬虫

        爬虫是一种自动化程序,它模拟人的行为,在Web上浏览并收集相关数据。爬虫通过HTTP协议获取网页内容,解析并提取感兴趣的数据。

1.2 HTTP协议

        了解HTTP协议对于编写爬虫很重要。本节将介绍HTTP请求和响应的基本知识,以及常见的请求头和响应状态码。

1.2.1 HTTP请求方法

  • GET:获取资源

1.GET请求

        

        GET方法是最常见也是最简单的http请求方法,它主要用作于获取资源。也就是说我客户端请求什么,你服务器就原样给我返回什么。我请求的是文本,你就保持原样返回;我请求的是像CGI那样的程序,你就给我返回运行结果。

  • POST:提交数据        

        POST方法主要用来传输实体的主体.也就是说,当客户端需要向服务器传输一些东西的时候呢,这个时候就可以用POST方法了。那GET方法可以不可以呢?当然也可以,但是我们不推荐使用GET方法来对实体的主体进行传输

  • PUT:更新资源

        PUT方法主要用来传输文件,就像FTP协议的文件上传一样。但是由于Http/1.1的PUT方法不带验证机制,存在安全性问题,所以一般的网站都不用这个方法来进行文件传输。

  • DELETE:删除资源

        DELETE方法主要是用来删除某个资源,是和PUT完全相反的方法。
同时该方法也不带认证机制,所以一般网站并不会对它进行开放使用。

  • OPTIONS请求 

        OPTIONS方法用来查询:请求的指定资源都支持什么http方法。

1.2.2 请求头常见字段

  • User-Agent:标识客户端类型

  • Referer:表示请求的来源链接

  • Cookie:存储会话信息的字段

1.2.3 响应状态码

  • 200 OK:表示请求成功。服务器成功处理了请求,并返回所请求的资源。
  • 201 Created:表示成功创建了新的资源。通常在 POST 请求后返回。
  • 202 Accepted:表示服务器已接受请求,但尚未处理完成。通常用于异步操作的情况下。
  • 204 No Content:表示服务器成功处理了请求,但没有返回任何内容。一般用于删除操作或只需要确认操作是否成功而无需返回具体数据的情况下。
  • 400 Bad Request:表示请求有误,服务器无法理解。通常是由于请求参数错误、格式错误等引起的。
  • 401 Unauthorized:表示请求需要身份验证,但用户未提供有效的身份凭证。
  • 403 Forbidden:表示服务器理解请求,但拒绝执行。常见的原因包括权限不足、资源被禁止访问等。
  • 404 Not Found:表示请求的资源不存在。
  • 500 Internal Server Error:表示服务器内部错误,无法完成请求。

1.3 HTML解析

        在爬虫过程中,通常需要从HTML页面中提取数据。本节将介绍两种常用的HTML解析库:Beautiful Soup和XPath。

1.3.1 Beautiful Soup

        Beautiful Soup是Python中常用的HTML解析库之一。它可以根据标签、类名、属性等进行检索,并提供了多种方法来提取数据。

       解析库

from bs4 import BeautifulSoup
​
html_doc = """
<html>
  <head>
    <title>示例页面</title>
  </head>
  <body>
    <h1>标题</h1>
    <p class="content">内容1</p>
    <p class="content">内容2</p>
  </body>
</html>
"""
​
soup = BeautifulSoup(html_doc, 'html.parser')
title = soup.title.text
contents = soup.findAll('p', {'class': 'content'})
​
print(title)        # 输出:示例页面
print(contents)    # 输出:[<p class="content">内容1</p>, <p class="content">内容2</p>]

1.3.2 XPath

XPath是一种用于选择XML和HTML节点的语言。在Python中,可以使用lxml库进行XPath解析。

        xpath解析原理: 

        1.实现标签的定位:实例化一个etree的对象,且需要将被解析的页面源码数据加载到该对象中。

        2.调用etree对象中的xpath方法结合着xpath表达式实现标签的定位和内容的捕获。

         xpath 表达式

        

from lxml import etree
​
html_doc = """
<html>
  <head>
    <title>示例页面</title>
  </head>
  <body>
    <h1>标题</h1>
    <p class="content">内容1</p>
    <p class="content">内容2</p>
  </body>
</html>
"""
​
html = etree.HTML(html_doc)
title = html.xpath('//title/text()')
contents = html.xpath('//p[@class="content"]/text()')
​
print(title)        # 输出:['示例页面']
print(contents)    # 输出:['内容1', '内容2']

2. 爬虫进阶技巧

2.1 防止被反爬虫

        在爬虫过程中,有些网站会采取反爬虫措施。本节将介绍一些常用的反爬虫手段及其应对策略。

2.1.1 User-Agent伪装

        有些网站会根据User-Agent字段识别爬虫,因此,我们可以通过修改User-Agent字段来伪装成浏览器发送请求。

import requests
​
headers = {
    'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/91.0.4472.124 Safari/537.36'
}
​
response = requests.get(url, headers=headers)

2.1.2 IP代理

        有些网站会根据IP地址限制访问频率或者封禁某些IP地址,我们可以使用代理IP来规避这些限制。

import requests
​
proxies = {
    'http': 'http://127.0.0.1:1080',
    'https': 'http://127.0.0.1:1080'
}
​
response = requests.get(url, proxies=proxies)

2.2 登录和验证码处理

        有些网站需要登录或者输入验证码才能访问特定页面。本节将介绍如何处理这些场景。

2.2.1 登录处理

        对于需要登录的网站,我们可以使用Session对象来模拟登录和保持会话。

import requests
​
url = 'http://example.com/login'
login_data = {
    'username': 'your_username',
    'password': 'your_password'
}
​
# 创建Session对象
session = requests.Session()
​
# 发送登录请求
session.post(url, data=login_data)
​
# 使用Session对象发送其他请求,保持会话
response = session.get('http://example.com/protected_page')

2.2.2 验证码处理

        对于包含验证码的网站,可以使用第三方库,如tesseract-OCR,来识别验证码。

import requests
from PIL import Image
import pytesseract
​
url = 'http://example.com/captcha.jpg'
​
# 下载验证码图片
response = requests.get(url)
with open('captcha.jpg', 'wb') as f:
    f.write(response.content)
​
# 使用tesseract-OCR识别验证码
image = Image.open('captcha.jpg')
captcha_text = pytesseract.image_to_string(image)

结论

        本文介绍了如何精通Python爬虫,从基础知识到高级技巧,涵盖了爬虫的基本原理、HTTP协议、HTML解析、防止被反爬虫、登录和验证码处理等内容。

文末送书

        

 内容简介

        《Python数据清洗》详细阐述了与Python数据清洗相关的基本解决方案,主要包括将表格数据导入Pandas中、将HTML和JSON导入Pandas中、衡量数据好坏、识别缺失值和离群值、使用可视化方法识别意外值、使用Series操作清洗和探索数据、聚合时修复混乱数据、组合DataFrame、规整和重塑数据、用户定义的函数和类等内容。此外,本书还提供了相应的示例、代码,以帮助读者进一步理解相关方案的实现过程。

前言/序言

        

        本书是一本实用的数据清洗指南。从广义上说,数据清洗被定义为准备数据进行分析所需的所有任务。它通常由在数据清洗过程中完成的任务组成,即导入数据、以诊断方式查看数据、识别异常值和意外值、估算和填充缺失值、规整数据等。本书每个秘笈都会引导读者对原始数据执行特定的数据清洗任务。

        目前市面上已经有许多非常好的Pandas书籍,但是本书有自己的特色,我们将重点放在实战操作和原理解释上。

        由于Pandas还相对较新,因此我们所学到的有关清洗数据的经验是受使用其他工具的经验影响的。大约在2012年,作者开始使用Python和R适应其时的工作需要,在21世纪初主要使用的是C#和T-SQL,在20世纪90年代主要使用的是SAS和Stata,在20世纪80年代主要使用的是FORTRAN和Pascal。本书的大多数读者可能都有使用各种数据清洗和分析工具的经验。

        无论你喜欢使用什么工具,其重要性都比不上数据准备任务和数据属性。如果让作者撰写《SAS数据清洗秘笈》或《R数据清洗秘笈》,那么讨论的主题也几乎是一样的。本书只是采用与Python/Pandas相关的方法来解决分析师数十年来面临的相同数据清洗挑战。

        在讨论如何使用Python生态系统中的工具(Pandas、NumPy、Matplotlib和SciPy等)进行处理之前,作者会在每章的开头介绍如何思考特定的数据清洗任务。在每个秘笈中,作者会介绍它对于数据发现的含义。

        本书尝试将工具和目的连接起来。例如,我们阐释偏度和峰度之类的概念,这对于处理离群值是非常重要的,同时我们又介绍箱形图等可视化工具,强化读者对于偏度和峰度等概念的理解。

参与活动

1️⃣参与方式:关注、点赞、收藏,评论:人生苦短,我用python(每人最多可评论三条)
2️⃣获奖方式:程序随机抽取 3位,每位小伙伴将获得一本书
3️⃣活动时间:截止到 2023-08-19 22:00:00

 

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

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

相关文章

信息论基础知识

注意&#xff1a;本文只针对离散随机变量做出探讨&#xff0c;连续随机变量的情况不适用于本文探讨的内容&#xff01; &#xff08;一&#xff09;自信息 1. 自信息 I ( x ) − l o g n P ( x ) \color{blue}I(x) - log_{n}{P(x)} I(x)−logn​P(x) 注意&#xff1a; 若n …

用ChatGPT和六顶帽思考法帮助自己更好地决策和解决问题

当我们在解决复杂问题时&#xff0c;我们常常陷入单一视角的状态。创造性思维领域的先驱爱德华德博诺&#xff0c;提出了六顶帽思考法[1]&#xff0c;这意味着我们可以从六个不同的视角来思考一个问题&#xff0c;以实现高水平决策和解决问题。 每一顶“帽子”代表不同的视角。…

【Matlab】PSO优化(单隐层)BP神经网络算法

上一篇博客介绍了BP-GA&#xff1a;BP神经网络遗传算法(BP-GA)函数极值寻优——非线性函数求极值&#xff0c;本篇博客将介绍用PSO&#xff08;粒子群优化算法&#xff09;优化BP神经网络。 1.优化思路 BP神经网络的隐藏节点通常由重复的前向传递和反向传播的方式来决定&#…

UGUI源码深度剖析

源码下载后 直接嵌入工程&#xff0c;删除引擎extension里的&#xff1b; 自制UI&#xff0c;在一个空场景中显示一个图片&#xff0c;当鼠标点击图片&#xff0c;执行操作。 gameobject &#xff1a; mesh meshfilter meshrender maintexture meshcollider camera ray

基于SSM的智能商城购物系统

基于SSM的智能商城购物系统 项目简介项目获取开发环境项目技术运行截图 项目简介 该智能商城系统主要实现两大功能模块:前台管理和后台管理 前台管理包括五大模块:用户登录注册、商品信息、购物车信息、个人信息管理、下单与订单管理、订单物流设置。 (1)用户登录注册模块:该功…

【Python机器学习】实验10 支持向量机

文章目录 支持向量机实例1 线性可分的支持向量机1.1 数据读取1.2 准备训练数据1.3 实例化线性支持向量机1.4 可视化分析 实例2 核支持向量机2.1 读取数据集2.2 定义高斯核函数2.3 创建非线性的支持向量机2.4 可视化样本类别 实例3 如何选择最优的C和gamma3.1 读取数据3.2 利用数…

大数据Flink(六十一):Flink流处理程序流程和项目准备

文章目录 Flink流处理程序流程和项目准备 一、Flink流处理程序的一般流程

使用jasypt对Spring Boot配置文件中的配置项加密

在Spring Boot中&#xff0c;有很多口令需要加密&#xff0c;如数据库连接密码、访问第三方接口的Token等。常见的方法就是用jasypt对口令进行加密。 实际上&#xff0c;jasypt可以对配置文件中任意配置项的值进行加密&#xff0c;不局限于对密码的加密。 1.在pom.xml中添加ja…

21 | 朝阳医院数据分析

朝阳医院2018年销售数据为例,目的是了解朝阳医院在2018年里的销售情况,通过对朝阳区医院的药品销售数据的分析,了解朝阳医院的患者的月均消费次数,月均消费金额、客单价以及消费趋势、需求量前几位的药品等。 import numpy as np from pandas import Series,DataFrame impo…

友善之臂NanoPi NEO利用fbtft驱动点亮1.69寸ST7789V2屏幕

屏幕介绍 本文以中景园1.69寸LCD&#xff0c;驱动芯片ST7789V2该款屏幕示例&#xff0c;屏幕的分辨率为240*280 屏幕引脚说明 NanoPi NEO IO介绍 屏幕与板子的IO连接关系 屏幕NanoPi NEOGNDGNDVCC3.3VSCLPC2SDAPC0RESPG11DCPA1CSPC3BLKPA0 下载交叉编译器和linux内核源码并按教…

c语言——完数的计算

完数即所有因子之和等于其本身值 列入&#xff0c;28124714&#xff0c;28所有的因子为1&#xff0c;2&#xff0c;4&#xff0c;7&#xff0c;14 而这五个因子之和恰好也是28. //完数的计算 /*完数即所有因子之和等于其本身值 列入&#xff0c;28124714&#xff0c;28所有的…

LeetCode700. 二叉搜索树中的搜索

700. 二叉搜索树中的搜索 文章目录 [700. 二叉搜索树中的搜索](https://leetcode.cn/problems/search-in-a-binary-search-tree/)一、题目二、题解方法一&#xff1a;迭代方法二&#xff1a;递归 带main函数测试用例 一、题目 给定二叉搜索树&#xff08;BST&#xff09;的根节…

在线状态监测如何使冷却塔维保管理受益

工业冷却塔作为关键的热交换装置&#xff0c;在许多生产流程中发挥着重要作用。为了保持其高效稳定的运行&#xff0c;实施连续的冷却塔状态监测变得至关重要。本文将以PreMaint设备数字化平台为例&#xff0c;探讨为什么建议采用远程冷却塔状态监测&#xff0c;以及如何借助振…

PHP证券交易员学习网站mysql数据库web结构apache计算机软件工程网页wamp

一、源码特点 PHP证券交易员学习网站 是一套完善的web设计系统&#xff0c;对理解php编程开发语言有帮助&#xff0c;系统具有完整的源代码和数据库&#xff0c;系统主要采用B/S模式开发。 下载地址https://download.csdn.net/download/qq_41221322/88205549 PHP证券交易员…

Python爬虫的requests(学习于b站尚硅谷)

目录 一、requests  1. requests的基本使用  &#xff08;1&#xff09;文档  &#xff08;2&#xff09;安装  &#xff08;3&#xff09;响应response的属性以及类型  &#xff08;4&#xff09;代码演示 2.requests之get请求  3. requests之post请求  &#x…

emqx-5.1.4开源版使用记录

emqx-5.1.4开源版使用记录 windows系统安装eqmx 去官网下载 emqx-5.1.4-windows-amd64.zip&#xff0c;然后找个目录解压 进入bin目录,执行命令启动emqx 执行命令 emqx.cmd start使用emqx 访问内置的web管理页面 浏览器访问地址 http://localhost:18083/#/dashboard/overv…

什么是P2P?

P2P (Peer-to-Peer) 是一种分布式的网络架构&#xff0c;其中各个节点&#xff08;通常被称为“peers”或“节点”&#xff09;直接进行数据共享和交换&#xff0c;而无需依赖中央服务器。P2P 网络强调平等的参与和共享&#xff0c;每个节点既可以是数据的消费者&#xff08;下…

从MySQL到金蝶云星空通过接口配置打通数据

从MySQL到金蝶云星空通过接口配置打通数据 对接系统&#xff1a;MySQL MySQL是一个关系型数据库管理系统&#xff0c;由瑞典MySQLAB公司开发&#xff0c;属于Oracle旗下产品。MySQL是最流行的关系型数据库管理系统之一&#xff0c;在WEB应用方面&#xff0c;MySQL是最好的RDBMS…

C++模板,STL(Standard Template Library)

这篇文章的主要内容是C中的函数模板、类模板、STL的介绍。 希望对C爱好者有所帮助&#xff0c;内容充实且干货&#xff0c;点赞收藏防止找不到&#xff01; 再次感谢每个读者和正在学习编程的朋友莅临&#xff01; 更多优质内容请点击移驾&#xff1a; C收录库&#xff1a;重生…

重复delete 对象指针后的 异常调用栈怪异 解析

Release版VC6 MFC程序 程序正常退出时得到一个如下异常调用栈&#xff1a;​ 0:000> kb# ChildEBP RetAddr Args to Child WARNING: Frame IP not in any known module. Following frames may be wrong. 00 0019eb94 76124f2f 00c3afc8 0019ebdc 001…