python爬虫企业级技术点_Python爬虫必备技术点(一)

爬虫必备技术

面向具有Python基础的Python爬虫爱好者,urllib和requests两个库在实际的项目中应用也非常广泛,不仅用于爬虫技术也可以应用在API接口调用方面。如果需要相关的案例可以加我QQ(610039018),另外我在B站上已发布了相关的爬虫视频(https://www.bilibili.com/video/av93731419)。

一、urllib总结

核心的网络请求库 -> urllib

urllib.request 模块

urlopen(url | request: Request, data=None) data是bytes类型

urlretrieve(url, filename) 下载url的资源到指定的文件

build_opener(*handlder) 构造浏览器对象

opener.open(url|request, data=None) 发起请求

Request 构造请求的类 url='https://www.baidu.com/s'

data={

'wd': '千锋'

}

urlencode(data) # 结果转成'wd=%f5%e6%e6%f5%e6%e6'

request = Request(url, data=urlencode(data).encode())

HTTPHandler HTTP协议请求处理器

ProxyHandler(proxies={‘http’: ‘http://proxy_ip:port’}) 代理处理

HTTPCookieProcessor(CookieJar())

http.cookiejar.CookieJar 类

urllib.parse模块

quote(txt) 将中文字符串转成url编码

urlencode(query: dict) 将参数的字典转成url编码,结果是key=value&key=value形式,即以 application/x-www-form-urlencoded作为url编码类型。

二、requests库【重点】

requests库也是一个网络请求库, 基于urllib和urllib3封装的便捷使用的网络请求库。

2.1 安装环境

pip install requests -i https://mirrors.aliyun.com/pypi/simple

2.2 核心的函数

requests.request() 所有请求方法的基本方法

以下是request()方法的参数说明

method: str 指定请求方法, GET, POST, PUT, DELETE

url: str 请求的资源接口(API),在RESTful规范中即是URI(统一资源标签识符)

params: dict , 用于GET请求的查询参数(Query String params);

data: dict , 用于POST/PUT/DELETE 请求的表单参数(Form Data)

json: dict 用于上传json数据的参数, 封装到body(请求体)中。请求头的Content-Type默认设置为application/json

files: dict, 结构 {‘name’: file-like-object | tuple}, 如果是tuple, 则有三种情况:

(‘filename’, file-like-object)

(‘filename’, file-like-object, content_type)

(‘filename’, file-like-object, content_type, custom-headers)

指定files用于上传文件, 一般使用post请求,默认请求头的Content-Type为multipart/form-data类型。

headers/cookies : dict

proxies: dict , 设置代理

auth: tuple , 用于授权的用户名和口令, 形式(‘username’, ‘pwd’)

requests.get() 发起GET请求, 查询数据

可用参数:

url

params

json

headers/cookies/auth

requests.post() 发起POST请求, 上传/添加数据

可用参数:

url

data/files

json

headers/cookies/auth

requests.put() 发起PUT请求, 修改或更新数据

requests.patch() HTTP幂等性的问题,可能会出现重复处理, 不建议使用。用于更新数据

requests.delete() 发起DELETE请求,删除数据

2.3 requests.Respose

以上的请求方法返回的对象类型是Response, 对象常用的属性如下:

status_code 响应状态码

url 请求的url

headers : dict 响应的头, 相对于urllib的响应对象的getheaders(),但不包含cookie。

cookies: 可迭代的对象,元素是Cookie类对象(name, value, path)

text : 响应的文本信息

content: 响应的字节数据

encoding: 响应数据的编码字符集, 如utf-8, gbk, gb2312

json(): 如果响应数据类型为application/json,则将响应的数据进行反序化成python的list或dict对象。

扩展-javascript的序列化和反序列化

JSON.stringify(obj) 序列化

JSON.parse(text) 反序列化

三、数据解析方式之xpath

xpath属于xml/html解析数据的一种方式, 基于元素(Element)的树形结构(Node > Element)。选择某一元素时,根据元素的路径选择,如 /html/head/title获取标签。

3.1 绝对路径

从根标签开始,按tree结构依次向下查询。

如 /html/body/table/tbody/tr。

3.2 相对路径

相对路径即是从当前某一个元素下开始查找,写法如下

相对于整个文档

//img

查找出文档中所有的1290180709494890496.htm标签元素

相对于当前节点

//table

假如当前节点是, 查找它的

1290180709494890496.htm的路径的写法

.//img

3.3 数据提取

提取文本

//title/text()

提取属性

//img/@href

3.4 位置条件

获取网页中的数据类型与字符集, 获取第一个标签

//meta[1]//@content

获取最后一个标签

//meta[last()]//@content

获取倒数第二个标签

//meta[position()-2]//@content

获取前三个标签

//meta[position()<3]//@content

3.5 属性条件

查找 class为circle-img的1290180709494890496.htm标签

//img[@class="circle-img"]

3.6 在Python中应用

首先要安装包pip install lxml,下面展示部分的代码片断:

from lxml import etree

root = etree.HTML('网页的内容')

element = root.xpath('xpath查找路径')

# element可能是两种类型,一是List=>[, ...]

# 另一个是Element对象,下面是Element对象的方法或属性

value = element.get('属性名')

text = element.text # 获取标签中文本,如千锋教育中的文本信息

children = element.xpath('相对xpath路径') # 获取它的子元素标签

四、考一考

写出urllib库的请求处理器有哪些类(尽量写全路径)

写出json.loads()和pickle.loads()返回的数据类型

写出pymysql的cursor.execute()方法中的参数及作用

把你们的答案可以写到评伦区,我会在后继统一回复。

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

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

相关文章

Citrix桌面及应用虚拟化系列之二:XenServer补丁

安装好XenServer之后&#xff0c;可以找一台管理机器&#xff08;目前主流系统都支持&#xff09;安装XenCenter&#xff0c;通过XenCenter来实现对XenServer的管理。安装XenCenter: 安装.NET Framework3.5 然后可以下载安装中文版的XenCenter&#xff0c;下载地址&#xff1…

OutLook2016修改注册表迁移.ost文件数据

Outlook2016默认只有一次设置存放OST文件路径的机会&#xff0c;是在第一创建帐号的向导上有个其他设置。如果关闭这个向导&#xff0c;在打开就不能修改路径了。按照这样思路&#xff0c;我们先关闭Outlook和Skype&#xff08;新版共用一个数据库文件&#xff09;&#xff0c;…

委托原来如此简单

什么是委托&#xff1f;委托是存有对某个方法的引用的一种引用类型变量。引用可在运行时被改变。委托特别用于实现事件和回调方法&#xff01;使用委托:public delegate void MyDelegateDemo();private void HelloWorld(){Console.WriteLine("Hello World");}public …

http协议--笔记

HTTP协议的缺点&#xff1a;1.通信使用明文&#xff08;不加密&#xff09;&#xff0c;内容可能会被窃听2.不验证通信方的身份&#xff0c;因此有可能遭遇伪装3.无法证明报文的完整性&#xff0c;所以有可能已遭篡改 防止窃听保护信息的几种对策&#xff1a;加密技术通信的加密…

sublime mysql插件_开发者最常用的8款Sublime text 3插件

Sublime Text作为一个尽为人知的代码编辑器&#xff0c;其优点不用赘述。界面整洁美观、文本功能强大&#xff0c;且运行速度极快&#xff0c;非常适合编写代码&#xff0c;写文章做笔记。Sublime Text还支持Mac、Windows和Linux各大平台&#xff0c;方便用户使用。种类繁多、功…

.NET Nancy 详解(三) Respone 和 ViewEngine

我们在ASP.NET MVC中可以返回各种类型的ActionResult(以下图片来自于园友--待补。。) 在Nancy 中本着简单粗暴的原则&#xff0c;使用方式略有不同。这期我们使用的版本是Nancy的第一个tag version 0.0.2.0。 public MainModule(IRouteCacheProvider routeCacheProvider){Get[&…

javascript中Date对象的初始化方法

为什么80%的码农都做不了架构师&#xff1f;>>> 在前端代码中难免会涉及到时间的操作&#xff0c;如何构造一个Date对象呢&#xff1f;javascript为我们提供如下几种方式&#xff1a; new Date("month dd,yyyy hh:mm:ss");new Date("month dd,yyyy&…

java id主键_JAVA主键ID生成工具类:改自twitter的分布式ID算法snowflake

祝大家新年快乐&#xff0c;有任何问题可与我联系&#xff1a;关于snowflake算法的介绍和原理这里不过多说明了&#xff0c;网上有很多。这里简单描述下SnowflakeUtil的优点&#xff1a;1、做为底层工具使用&#xff0c;可用于数据库主键、订单编号……2、不依赖数据库&#xf…

云上“炼”码兵器 GitHub Codespaces

GitHub 是全球最受欢迎的开发者平台&#xff0c; ⾃从微软收购了 GitHub 后&#xff0c; GitHub 的功能就越来越强⼤&#xff0c;除了原有的代码管理外&#xff0c;也增加了很多硬货&#xff0c;这就包括了集成 CI/CD 的 GitHub Actions &#xff0c;以及完善的项⽬管理功能&am…

python 中的yum pip

为什么80%的码农都做不了架构师&#xff1f;>>> python 中的yum pip pip 可以管理python中的模块&#xff0c;之于python就像yum之于redhat 转载于:https://my.oschina.net/sskxyz/blog/368099

ArcGIS怎样获取重分类后各类所占的像元个数

【问题描述】如下图所示,给西北地区2007年平均NDVI分等级,求各个等级的面积所占百分比? 解决方法: 刚开始老在如下图所示的Properties界面中进行重分类,虽然能得到分类结果,但是却得不到像元个数,因为是连续的,也不会有属性表生成: 后来发现,工具箱中还有个分类工具…

13.ThreadPoolExecutor线程池之submit方法

jdk1.7.0_79 在上一篇《ThreadPoolExecutor线程池原理及其execute方法》中提到了线程池ThreadPoolExecutor的原理以及它的execute方法。本文解析ThreadPoolExecutor#submit。 对于一个任务的执行有时我们不需要它返回结果&#xff0c;但是有我们需要它的返回执行结果。对于线程…

java idea 模块_idea 多模块项目依赖父工程class找不到问题的方法

比如&#xff0c;我们有这么个过程&#xff0c;项目结构如下&#xff1a;a--b--ca是总结点&#xff0c;b是子节点&#xff0c;c是父节点b依赖父节点class&#xff0c;通过maven构建时通常我们会在子节点中添加父节点依赖&#xff0c;如&#xff1a;com.xxxc${project.version}虽…

关于OAuth2.0 Authorization Code+PKCE flow在原生客户端(Native App)下集成的思考

Working with Proof Key for Code Exchange (PKCE) - DEV Community写在前面前几天看了园友的一篇文章被广泛使用的OAuth2.0的密码模式已经废了&#xff0c;放弃吧 被再次提起&#xff1a;Implicit Flow Password Grant&#xff0c;均已被标记为Legacy&#xff0c;且OAuth2.1里…

【经典回放】多种语言系列数据结构算法:希尔排序(C/C#版)

原理&#xff1a;每隔sp&#xff08;整数&#xff09;个数即取数并判断大小&#xff0c;交换&#xff0c;先构造局部有序序列&#xff0c;直到sp为1&#xff0c;构造完整的有序序列。 给出一组数据&#xff0c;如下&#xff1a; 0 1 2 3 4 5 6 7 8 9 49 38 65 97 …

【131天】尚学堂高淇Java300集视频精华笔记(65-66)

第65集&#xff1a;常用类Date类的使用JDk源码分析 Date时间类&#xff08;java.util.Date&#xff09; 在标准Java类库中包含一个Date类。它的对象表示一个特定的瞬间&#xff0c;精确到毫秒。 Date()分配一个Date对象&#xff0c;并初始化此对象为当前的日期和时间精确到毫秒…

ArcGIS 10.2加载在线影像底图

两种方法&#xff1a; 一、File→ArcGIS Online→影像图→Open。 二、 效果&#xff1a;

都说不要装箱,那装箱到底带来了什么开销?

相信很有朋友在面试时大多会被问到 装箱 的问题&#xff0c;也是一个经典的问题&#xff0c;可深可浅&#xff0c;那今天我们就从 汇编 和 内存 角度进行统一解读下。为了方便演示&#xff0c;先上一段装箱的代码。class Program{static void Main(string[] args){var i 10;va…

Java中方法的继承以及父类未被子类覆盖的方法调用的问题

在看java继承这一块的时候发现了一个问题&#xff0c;即父类未被子类覆盖的方法是如何调用的&#xff1f; 是子类拥有了父类的该方法只是没有显示表示&#xff0c;还是子类调用了父类的该方法。 为此做了一下验证 代码如下&#xff1a; public class One {protected void print…