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

目录

引言

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://xiahunao.cn/news/1382061.html

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

相关文章

iphone或者ipad上安装自己打包的ipa文件

对于非ios开发者来说&#xff0c;这确实是一个问题&#xff0c;但我懂的也不多&#xff0c;也是抱着试试的态度安装了下&#xff0c;之前我以为安装ipa和在安卓手机上安装apk一样&#xff0c;qq或者微信传文件下载点击就可以安装了&#xff0c;但这个ipa如果在iphone上这样做&a…

误删库后的恢复方法分享

省流助手&#xff1a;项目代码中实现定时备份功能 写在前面&#xff1a;项目使用的是docker发布、下午相关同事反馈题库同步功能用不了了有报错&#xff0c;查看服务器这个项目发布的版本发现有段时间没更新了&#xff0c;所以当时想的会不会因为jar包没有更新&#xff0c;于是…

达梦数据库的备份、还原和恢复

一、备份、还原和恢复的意义 备份的主要目的是数据容灾&#xff0c;保证数据的安全性&#xff0c;在数据库发生故障时&#xff0c;通过还原备份集&#xff0c;将数据恢复到可用状态。还原与恢复的主要目的是将目标数据库恢复到备份结束时刻的状态。 二、备份的方式 物理备份…

PhoneRescue for Mac(iOS数据恢复软件)

一款帮助用户恢复手机数据的Mac手机助手&#xff0c;PhoneRescue for mac是个包罗万象的iOS数据恢复程序设计用于检索您丢失的照片&#xff0c;音乐和更多的信息&#xff0c;在您的iPhone&#xff0c;ipad和iPod-touch上进行数据恢复。 PhoneRescue mac版安装教程 软件下载完成…

Gitlab 数据备份和还原(填坑版)

此文章适用于因更换服务器或者 gitlab 安装方式变更&#xff08;普通方式 <> docker&#xff09;进行数据迁移&#xff0c;或者日常备份还原。 前提条件&#xff1a;备份和还原的 gitlab 版本一致&#xff01; gitlab 版本查看命令&#xff1a;gitlab-rake gitlab:env:…

iOS设备数据恢复工具:UltData mac中文版

Tenorshare UltData Mac版是一款非常优秀的iOS数据恢复工具。Tenorshare UltData为您提高了3种恢复模式&#xff0c;能够在几秒钟内找回您想要的所有数据信息&#xff0c;您从此就不用担心会丢失重要信息的问题。不仅如此&#xff0c;ultdata中文版还可以对各种iOS系统问题修复…

cs231nassignment2 q4 Convolutional Neural Networks

文章目录 嫌啰嗦直接看源码Q4 Convolutional Neural Networks 卷积神经网络conv_forward_naive题面解析代码输出 conv_backward_naive题面解析代码输出 max_pool_forward_naive题面解析代码输出 max_pool_backward_naive题面解析代码输出 Fast Layers遇到的问题解决办法输出 Th…

Mac中Jmeter下载与安装

Step 1:下载 1、下载网址&#xff1a;http://jmeter.apache.org/download_jmeter.cgi 2、选择Binaries中的 apache-jmeter-5.1.tgz 进行下载&#xff08;binaries编译好的二进制压缩包&#xff1b;source为源码压缩包&#xff09; 3、下载完成后&#xff0c;双击压缩包进行解压…

Mac多线程下载工具Neat Download Manager Mac免费版

Neat Download Manager Mac版是Mac上一款免费好用的多线程下载工具。NeatDownloadManager Mac版使用动态分段算法下载文件,支持HTTP,HTTPS和FTP协议,HTTP和代理身份验证,轻松加快你的下载速度! Neat Download Manager Mac免费版软件介绍 Neat Download Manager是一个简单…

Mac10.14安装Jdk11.04版本

初语&#xff1a; 环境&#xff1a;MacOs Mojave10.14.6 Java环境&#xff1a;jdk11.04 为了学习vue的静态文件打包webpack部分&#xff0c;需要安装node.js&#xff0c;可是又依赖于java环境。电脑刷了mac系统&#xff0c;而且已经适配得很不错了现在&#xff0c;可以作为生…

Navicat Premium for Mac 11.1.8 免费中文破解版下载

之前安装的一款数据库软件Navicat试用版本到期了&#xff0c;所以在网上找了一款破解永久使用版Navicat Premium for Mac 11.1.8 完美破解版&#xff0c;完美支持OS X 10.10, 简体中文版&#xff0c;Navicat是最优秀的数据库图形化管理客户端&#xff0c;支持MySQL、SQL Server…

软件外包开发的VUE开发框架

Vue.js&#xff08;通常简称为Vue&#xff09;是一个流行的渐进式JavaScript框架&#xff0c;用于构建用户界面。它的核心库专注于视图层&#xff0c;但也可以结合其他库和工具来构建完整的单页面应用&#xff08;SPA&#xff09;。以下分享Vue.js的开发框架和特点&#xff0c;…

问道管理:短线买入点看哪个指标?

在股市投资中&#xff0c;挑选适宜的买入点是至关重要的。短线投资者常常经过技能剖析来确认买入和卖出的时机。技能剖析中有许多目标可供挑选&#xff0c;但怎么挑选适合短线交易的买入点成为一个关键问题。本文将从多个视点剖析&#xff0c;讨论针对短线交易&#xff0c;应该…

鹏业云计价i20应用技巧之清单计价与定额计价互转应用

清单计价转定额计价 应用场景&#xff1a; 定额计价模式是一种量价合一的工程计价模式&#xff0c;具有快捷简便的特点&#xff1b;工程量清单计价模式是一种量价分离模式&#xff0c;主要应用于工程招投标阶段&#xff1b;鹏业软件提供一键转换计价模式&#xff0c;适用于不…

鹏业安装算量软件V8.2.0.150版本升级说明

1.新增楼层表功能 分区属性、模型属性中可以设置对应的楼层信息 2.计算项明细增加安装高度 计算明细增加安装高度&#xff0c;对应的计算图元默认取计算项安装高度 3.电气专业新增设备表功能 设备表可以对设备安装高度和立管根数快速修改 4.电气系统表增加敷设高度 对配电箱…

鹏业云计价i20清单与定额录入

鹏业云计价i20针对清单和定额提供多种录入方式&#xff0c;方便造价人员快速上手&#xff0c;提高清单编制效率。 操作步骤 01.清单的录入方式 方式1&#xff1a;鼠标右键增加清单 1、清单空行处&#xff0c;点击鼠标右键增加清单&#xff1b; 2、根据项目实际情况勾选相对…

广联达软件股份有限公司

广联达软件股份有限公司成立于1998年&#xff0c;是国内建设工程领域信息化服务产业的领军企业。公司信守“真诚、务实、创新、服务”的核心价值观&#xff0c;持续为建设工程领域提供最有价值的信息产品与专业服务&#xff0c;助力行业信息化发展。在发展历程中&#xff0c;公…

鹏业云计价i20(西藏)计价软件升级拉萨市招投标清单接口

拉萨市招投标接口变化 2022年12月30日拉萨市公共资源交易中心发布了《关于拉萨市公共资源交易平台房建市政类施工项目规范上传招投标清单的通知》&#xff0c;从2023年1月3日起&#xff0c;各招投标代理机构通过平台发布房建市政类施工项目招标文件时&#xff0c;请上传.xml、…

云计价i20工程总承包计价软件【十问十答】

近日&#xff0c;省住建厅发布《四川省房屋建筑和市政基础设施项目工程总承包合同计价的指导意见》&#xff08;以下简称《指导意见》&#xff09;的通知&#xff0c;自 2023年 1月 1日起施行。鹏业软件深度参与《指导意见》编制及实例项目的模拟测算工作&#xff0c;并基于工程…

【Spring Cloud Alibaba】Linux安装RocketMQ以及RocketMQ Dashboard可视化工具

环境准备&#xff1a;Linux安装Java环境&#xff08;OracleJDK&#xff09; 在当今分布式架构的开发中&#xff0c;消息队列成为了一种常见的解决方案。RocketMQ是阿里巴巴开源的分布式消息中间件&#xff0c;具有高吞吐量、高可用性和强大的扩展性&#xff0c;因此在构建大规模…