当前位置: 首页 > news >正文

Python 爬虫工具

Python3 默认提供了urllib库,可以爬取网页信息,但其中确实有不方便的地方,如:处理网页验证和Cookies,以及Hander头信息处理。

为了更加方便处理,有了更为强大的库 urllib3 和 requests, 本节会分别介绍一下,以后我们着重使用requests。

urllib3网址:https://pypi.org/project/urllib3/requests网址:http://www.python-requests.org/en/master/
1. urllib3库的使用:
安装:通过使用pip命令来安装urllib3pip install urllib3
简单使用:import urllib3
import re

实例化产生请求对象

http = urllib3.PoolManager()

get请求指定网址

url = "http://www.baidu.com"
res = http.request("GET",url)

获取HTTP状态码

print("status:%d" % res.status)

获取响应内容

data = res.data.decode("utf-8")

正则解析并输出

print(re.findall("<title>(.*?)</title>",data))

其他设置: 增加了超时时间,请求参数等设置

import urllib3
import reurl = "http://www.baidu.com"
http = urllib3.PoolManager(timeout = 4.0) #设置超时时间res = http.request("GET",url,#headers={#    'User-Agent':'Mozilla/5.0(WindowsNT6.1;rv:2.0.1)Gecko/20100101Firefox/4.0.1',#},fields={'id':100,'name':'lisi'}, #请求参数信息)print("status:%d" % res.status)data = res.data.decode("utf-8")print(re.findall("<title>(.*?)</title>",data))
  1. requests库的使用:
    安装:通过使用pip命令来安装requests
pip install requests简单使用:import requests
import reurl = "http://www.baidu.com"

抓取信息

res = requests.get(url)#获取HTTP状态码
print("status:%d" % res.status_code)

获取响应内容

data = res.content.decode("utf-8")#解析出结果
print(re.findall("<title>(.*?)</title>",data))

图片
3. 解析库的使用–XPath:

XPath(XML Path Language)是一门在XML文档中查找信息的语言。XPath 可用来在XML文档中对元素和属性进行遍历。XPath 是 W3C XSLT 标准的主要元素,并且 XQuery 和 XPointer 都构建于 XPath 表达之上。官方网址:http://lxml.de 官方文档:http://lxml.de/api/index.html注:XQuery 是用于 XML 数据查询的语言(类似SQL查询数据库中的数据)注:XPointer 由统一资源定位
地址(URL)中#号之后的描述组成,类似于HTML中的锚点链接python中如何安装使用XPath:: 安装 lxml 库。②: from lxml import etree③: Selector = etree.HTML(网页源代码): Selector.xpath(一段神奇的符号)
  1. 准备工作:
    要使用XPath首先要先安装lxml库:
pip install lxml
  1. XPath选取节点规则
表达式	描述
nodename	选取此节点的所有子节点。
/	从当前节点选取直接子节点
//	从匹配选择的当前节点选择所有子孙节点,而不考虑它们的位置
.	选取当前节点。
..	选取当前节点的父节点。
@	选取属性。
述	
nodename	选取此节点的所有子节点。
/	从当前节点选取直接子节点
//	从匹配选择的当前节点选择所有子孙节点,而不考虑它们的位置
.	选取当前节点。
..	选取当前节点的父节点。
@	选取属性。
  1. 解析案例:
    首先创建一个html文件:my.html 用于测试XPath的解析效果
<!DOCTYPE html>
<html>
<head><title>我的网页</title>
</head>
<body><h3 id="hid">我的常用链接</h3><ul><li class="item-0"><a href="http://www.baidu.com">百度</a></li><li class="item-1 shop"><a href="http://www.jd.com">京东</a></li><li class="item-2"><a href="http://www.sohu.com">搜狐</a></li><li class="item-3"><a href="http://www.sina.com">新浪</a></li><li class="item-4 shop"><a href="http://www.taobao.com">淘宝</a></li></ul></body>
</html>

使用XPath解析说明

导入模块

from lxml import etree

读取html文件信息(在真实代码中是爬取的网页信息)

f = open("./my.html",'r',encoding="utf-8")
content = f.read()
f.close()

解析HTML文档,返回根节点对象

html = etree.HTML(content)
#print(html)  # <Element html at 0x103534c88>

获取网页中所有标签并遍历输出标签名

result = html.xpath("//*")
for t in result:print(t.tag,end=" ")
#[html head title body h3 ul li a li a ... ... td]
print()

获取节点

result = html.xpath("//li") # 获取所有li节点
result = html.xpath("//li/a") # 获取所有li节点下的所有直接a子节点
result = html.xpath("//ul//a") # 效果同上(ul下所有子孙节点)
result = html.xpath("//a/..") #获取所有a节点的父节点
print(result)

获取属性和文本内容

result = html.xpath("//li/a/@href") #获取所有li下所有直接子a节点的href属性值
result = html.xpath("//li/a/text()") #获取所有li下所有直接子a节点内的文本内容
print(result) #['百度', '京东', '搜狐', '新浪', '淘宝']result = html.xpath("//li/a[@class]/text()") #获取所有li下所有直接含有class属性子a节点内的文本内容
print(result) #['百度', '搜狐', '新浪']#获取所有li下所有直接含有class属性值为aa的子a节点内的文本内容
result = html.xpath("//li/a[@class='aa']/text()")
print(result) #['搜狐', '新浪']#获取class属性值中含有shop的li节点下所有直接a子节点内的文本内容
result = html.xpath("//li[contains(@class,'shop')]/a/text()")
print(result) #['搜狐', '新浪']

按序选择

result = html.xpath("//li[1]/a/text()") # 获取每组li中的第一个li节点里面的a的文本
result = html.xpath("//li[last()]/a/text()") # 获取每组li中最后一个li节点里面的a的文本
result = html.xpath("//li[position()<3]/a/text()") # 获取每组li中前两个li节点里面的a的文本
result = html.xpath("//li[last()-2]/a/text()") # 获取每组li中倒数第三个li节点里面的a的文本
print(result)print("--"*30)

节点轴选择

result = html.xpath("//li[1]/ancestor::*") # 获取li的所有祖先节点
result = html.xpath("//li[1]/ancestor::ul") # 获取li的所有祖先中的ul节点
result = html.xpath("//li[1]/a/attribute::*") # 获取li中a节点的所有属性值
result = html.xpath("//li/child::a[@href='http://www.sohu.com']") #获取li子节点中属性href值的a节点
result = html.xpath("//body/descendant::a") # 获取body中的所有子孙节点a
print(result)result = html.xpath("//li[3]") #获取li中的第三个节点
result = html.xpath("//li[3]/following::li") #获取第三个li节点之后所有li节点
result = html.xpath("//li[3]/following-sibling::*") #获取第三个li节点之后所有同级li节点
for v in result:print(v.find("a").text)
解析案例

导入模块

from lxml import etree

读取html文件信息(在真实代码中是爬取的网页信息)

f = open("./my.html",'r')
content = f.read()
f.close()

解析HTML文档,返回根节点对象

html = etree.HTML(content)

1. 获取id属性为hid的h3节点中的文本内容

print(html.xpath("//h3[@id='hid']/text()")) #['我的常用链接']

2. 获取li中所有超级链接a的信息

result = html.xpath("//li/a")
for t in result:# 通过xapth()二次解析结果#print(t.xpath("text()")[0], ':', t.xpath("@href")[0])# 效果同上,使用节点对象属性方法解析print(t.text, ':', t.get("href"))'''
#结果:
百度 : http://www.baidu.com
京东 : http://www.jd.com
搜狐 : http://www.sohu.com
新浪 : http://www.sina.com
淘宝 : http://www.taobao.com
''''''
HTML元素的属性:tag:元素标签名text:标签中间的文本
HTML元素的方法:find()    查找一个匹配的元素findall() 查找所有匹配的元素get(key, default=None) 获取指定属性值items()获取元素属性,作为序列返回keys()获取属性名称列表value是()将元素属性值作为字符串序列
'''

相关文章:

Python 爬虫工具

Python3 默认提供了urllib库&#xff0c;可以爬取网页信息&#xff0c;但其中确实有不方便的地方&#xff0c;如&#xff1a;处理网页验证和Cookies&#xff0c;以及Hander头信息处理。 为了更加方便处理&#xff0c;有了更为强大的库 urllib3 和 requests, 本节会分别介绍一下…...

再也不去字节跳动面试了,6年测开经验的真实面试经历.....

前几天我朋友跟我吐苦水&#xff0c;这波面试又把他打击到了&#xff0c;做了快6年软件测试员。。。为了进大厂&#xff0c;也花了很多时间和精力在面试准备上&#xff0c;也刷了很多题。但题刷多了之后有点怀疑人生&#xff0c;不知道刷的这些题在之后的工作中能不能用到&…...

第十五章 角色移动旋转实例

本章节我们创建一个“RoleDemoProject”工程&#xff0c;然后导入我们之前创建地形章节中的“TerrainDemo.unitypackage”资源包&#xff0c;这个场景很大&#xff0c;大家需要调整场景视角才能看清。 接下来&#xff0c;我们添加一个人物模型&#xff0c;操作方式就是将模型文…...

数据湖Data Lakehouse支持行级更改的策略:COW、MOR、Delete+Insert

COW:写时复制,MOR:读时合并,Delete+Insert:保证同一个主键下仅存在一条记录,将更新操作转换为Delete操作和Insert操作 COW和MOR的对比如下图,而Delete+Insert在StarRocks主键模型中用到。 目前COW、MOR在三大开源数据湖项目的使用情况,如下图。 写入时复制【Copy-On…...

双亲委派机制的原理和作用

双亲委派机制&#xff0c;就必须弄清楚Java的类加载器。 什么是类加载器 Java类加载器(ClassLoader)是Java运行时环境(JRE)的一部分&#xff0c;负责动态的将Java类加载到Java虚拟机的内存空间。 类加载器有哪些 主要有三个&#xff1a; 引导类加载器(Bootstrap ClassLoade…...

mac免费杀毒软件哪个好用?如何清理mac系统需要垃圾

CleanMyMac x是一款功能强大的Mac系统优化清理工具&#xff0c;使用旨在帮助用户更加方便的清理您系统中的所有垃圾&#xff0c;从而加快电脑运行速度&#xff0c;保持最佳性能&#xff0c;更加稳定、流畅、快速&#xff01;&#xff01;&#xff01; CleanMyMac X无疑是目前m…...

css 实现太极效果

目录 一、简述二、太极效果制作 一、简述 本次主要介绍::after&#xff0c;::before&#xff0c;box-shadow这三个属性。 ::after&#xff0c;::before这两个是伪类选择器&#xff0c;box-shaow是用来设置元素的阴影效果 before:向选定的元素前插入内容 after:向选定的元素后插…...

【前端基础知识】Vue中的变量不是响应式的吗?属性赋值后视图不变化的原因是什么?

目录 &#x1f914;问题&#x1f4dd;回答&#x1f3a8;使用场景动态添加属性动态添加数组元素 ❌注意事项$set只能在响应式对象上使用$set不能用于根级别的属性$set的性能问题 &#x1f4c4;总结 &#x1f914;问题 Vue是一款在国内非常流行的框架&#xff0c;采用MVVM架构&a…...

如何完全卸载linux下通过rpm安装的mysql

卸载linux下通过rpm安装的mysql 1.关闭MySQL服务2.使用 rpm 命令的方式查看已安装的mysql3. 使用rpm -ev 命令移除安装4. 查询是否还存在遗漏文件5. 删除MySQL数据库内容 1.关闭MySQL服务 如果之前安装过并已经启动&#xff0c;则需要卸载前请先关闭MySQL服务 systemctl stop…...

[渗透教程]-004-长城防火墙GFW的原理

文章目录 1. baidu.com 请求过程2. GFW原理2.1 GFW拦截方法1:DNS渲染2.2 通过IP黑名单2.3 VPN阻断1. baidu.com 请求过程 家庭的路由器具备了交换机的功能.域名–>ip,优先检测本地的缓存,没有的话就查找DNS服务器,传输层对应该层的数据进行封装增加了端口的信息,网络层对传输…...

LaTeX基础文本排版命令

LaTeX基础文本排版命令 1. 字体大小2. 字体的粗体与斜体2.1. 粗体2.2 斜体2.3 同时启用粗体和斜体 3. 空格长度4. 高度与宽度尺寸 在LaTeX中&#xff0c;文本排版可以通过简单的命令实现&#xff0c;这些命令可以控制字体大小、粗体与斜体、空格、行高和宽度等方面&#xff0c;…...

PLC模糊控制模糊PID(梯形图实现+算法分析)

博途PLC的模糊PID控制详细内容请查看下面的博客文章: Matlab仿真+博途PLC模糊PID控制完整SCL源代码参考(带模糊和普通PID切换功能)_博途怎么实现模糊pid_RXXW_Dor的博客-CSDN博客模糊PID的其它相关数学基础,理论知识大家可以参看专栏的其它文章,这里不再赘述,本文就双容…...

线程池在Java多线程中的应用

前言 随着计算机硬件和软件技术的不断发展&#xff0c;多线程编程在软件开发中变得越来越常见。然而&#xff0c;使用多线程编程时必须小心谨慎&#xff0c;以确保正确性和可维护性。在这个过程中&#xff0c;线程池成为了一个至关重要的工具。本文将介绍其应用场景、注意事项…...

1997-2021年全国30省技术市场成交额(亿元)

1997-2021年全国30省技术市场成交额 1、时间&#xff1a;1997-2021年 2、范围&#xff1a;30省不含西藏 3、来源&#xff1a;国家统计J 4、指标&#xff1a;技术市场成交额 5、缺失情况说明&#xff1a;无缺失 6、指标解释及用途&#xff1a; 技术市场成交额是一个客观、…...

【C++】面向对象之多态

文章内的所有调试都是在vs2022下进行的&#xff0c; 部分小细节可能因编译器不同存在差异。 文章目录 多态的定义和实现概念引入多态的构成条件虚函数重写通过基类的指针或者引用调用虚函数 override和final 抽象类概念实现继承和接口继承 虚函数表单继承中的虚表打印虚表多继…...

卡尔曼滤波器简介——多维卡尔曼滤波

原文&#xff1a;多维卡尔曼滤波 (kalmanfilter.net) 目录 前言 基本背景 状态外推方程 示例 - 飞机 - 无控制输入 示例 - 带控制输入的飞机 示例 – 坠落物体 状态外推方程维度 线性时不变系统 线性动态系统建模 状态外推方程的推导 状态空间表示形式 示例 - 等速…...

如何用 GPT-4 帮你写游戏?

你知道的&#xff0c;GPT-4 发布了。 目前你想要用上 GPT-4&#xff0c;主要的渠道是 ChatGPT Plus 。作为交了订阅费的用户&#xff0c;你可以在对话的时候选择模型来使用。 另一种渠道&#xff0c;就是申请官方 API 的排队。我在申请 New Bing Chat 的时候&#xff0c;耐心被…...

R语言的贝叶斯时空数据模型实践技术应用

时间&#xff0d;空间数据&#xff08;以下简称“时空数据”&#xff09;是最重要的观测数据形式之一&#xff0c;很多科学研究的数据都以时空数据的形式得以呈现&#xff0c;而科学研究目的可以归结为挖掘时空数据中的规律。另一方面&#xff0c;贝叶斯统计学作为与传统统计学…...

Lazysysadmin靶机渗透过程

准备工作 下载好靶机到本地后 VMware导入OVA 启动靶机 扫描信息 首先扫描整个C段发现主机 进一步扫描端口 从扫描结果可知&#xff1a; Samba服务MySQLSSH端口网站端口 先对网站进行目录遍历 发现有wordpress网站和phpmyadmin管理系统 出现了非常多遍My name is togie.可能…...

为什么网络安全缺口很大,招聘却很少?

2020年我国网络空间安全人才数量缺口超过了140万&#xff0c;就业人数却只有10多万&#xff0c;缺口高达了93%。这里就有人会问了&#xff1a; 1、网络安全行业为什么这么缺人&#xff1f; 2、明明人才那么稀缺&#xff0c;为什么招聘时招安全的人员却没有那么多呢&#xff1…...

SpringBoot手册

目录 依赖管理关于各种的 start 依赖关于自动配置关于约定大于配置中的配置SpringBoot 整合 SpringMVC定制化 SpringMVC静态资源处理对上传文件的处理对异常的处理Web原生组件注入&#xff08;Servlet、Filter、Listener&#xff09;Interceptor 自定义拦截器DispatcherServlet…...

【Linux】如何实现单机版QQ,来看进程间通信之管道

学会了管道&#xff0c;就可以实现简单的qq哦~ 文章目录 前言一、匿名管道总结 前言 为什么要进行进程间通信呢&#xff1f;因为需要以下这些事&#xff1a; 数据传输&#xff1a;一个进程需要将它的数据发送给另一个进程 资源共享&#xff1a;多个进程之间共享同样的资源。 …...

从一到无穷大 #6 盘满排查过程

文章目录 引言df/du 原理排查思路文件系统预留空间进程占用句柄挂载覆盖 引言 核心在于执行df和du的时候发现显示的存储量完全不同&#xff0c;我本地系统盘有99G空间&#xff0c;du显示占用了45G&#xff0c;但是df却显示使用了99G&#xff0c;排查的过程本文所示。 先记录几…...

ChatGPT技术原理 第九章:数据集和训练技巧

目录 9.1 对话数据集 9.2 数据预处理 9.3 预训练技巧 9.4 微调技巧 9.5 多任务学习...

NCR被攻击后服务中断!原是BlackCat勒索软件作祟

近日&#xff0c;在遭到BlackCat勒索软件攻击后&#xff0c;NCR 的 Aloha 销售点平台出现中断。 NCR公司是全球关系管理技术解决方案领导供应商&#xff0c;为全球零售、金融、传讯、制造、旅游、交通及保安等客户提供服务。凭著累积多年的业界知识、专业顾问经验、专业增值应用…...

带你认识什么是BMS(电池管理系统)

文章目录 概述BMS的硬件拓扑BMS的电气架构BMS的功能BMS的总压采集&#xff08;主板功能&#xff09;BMS的电流采集&#xff08;主板功能&#xff09;BMS的电芯电压和温度采集&#xff08;从板功能&#xff09;BMS的SOC、SOP和SOH&#xff08;ASW计算&#xff09;BSM的绝缘检测B…...

安装Ubuntu22.04虚拟机的一些常见问题解决方法

文章目录 VirttalBox 开启共享剪切板文件夹、拖放的功能VirtualBox 安装 ubuntu后安装增强工具无效的解决办法解决ubuntu您没有权限查看“ 某某文件夹”的内容所需的权限linux更换源的两种方法[如何在 Ubuntu 20.04 上安装 Visual Studio Code - ](https://zhuanlan.zhihu.com/…...

银河麒麟操作系统,安装Gitlab 基于docker

不废话。直接上干货 操作系统信息 ############## Kylin Linux Version ################# Release: Kylin Linux Advanced Server release V10 (Sword) Kernel: 4.19.90-24.4.v2101.ky10.aarch64 Build: Kylin Linux Advanced Server release V10 (SP2) /(Sword)-aarch64-…...

基于Python实现个人手机定位分析

TransBigData是一个为交通时空大数据处理、分析和可视化而开发的Python包。本文就来用它实现个人手机定位分析&#xff0c;感兴趣的小伙伴可以了解一下 但其实交通时空大数据并不仅仅局限于交通工具产生的数据&#xff0c;我们的日常生活中也会产生大量的数据。比如我们的手机…...

Unity Navgation系统杂记

立即停止寻路 使用agent.isStoppedtrue&#xff0c;可以停止寻路&#xff0c;但是有很大的延迟&#xff0c;视觉体验很不好。 使用agent.enabledfalse&#xff0c;通过禁用NavMeshAgent组件的方式实现立即停止寻路。因为组件被禁用可能会产生其它问题&#xff0c;比如失去了Ob…...

遂宁市网站建设/优化落实防控措施

之前一直在博客园写作&#xff0c;最近几天才开的知乎专栏&#xff0c;才疏学浅&#xff0c; 谬误之处请不吝于评论区指教&#xff0c;谢谢大家。文章目录单行文本溢出的省略从单行文本溢出省略到多行文本溢出省略多行文本溢出的省略&#xff08;...&#xff09;方案一 ---简单…...

西安制作公司网站的公司/深圳seo排名优化

最近一直在找前端工作&#xff0c;前前后后面了几家公司&#xff0c;虽然不太顺利&#xff0c;但是收获还是有的&#xff0c;就过程中遇到的面试题总结一下 CSS1&#xff1a;标准盒模型/IE盒模型2&#xff1a;自适应三栏布局3&#xff1a;移动端自适应方案4&#xff1a;FLEX布局…...

dw做的网站不显示/营销 推广

按单词反转字符串是一道很常见的面试题。在Python中实现起来非常简单。def reverse_string_by_word(s):lst s.split() # split by blank space by defaultreturn .join(lst[::-1])s Power of Loveprint reverse_string_by_word(s)# Love of Powers Hello World!print rever…...

给漫画网站做推广/google推广专员招聘

什么是跨域 假设我们页面或者应用已在 http://www.test1.com 上了&#xff0c;而我们打算从 http://www.test2.com 请求提取数据。一般情况下&#xff0c;如果我们直接使用 AJAX 来请求将会失败&#xff0c;浏览器也会返回“源不匹配”的错误&#xff0c;"跨域"也就以…...

专业做毕业设计网站/新媒体seo指的是什么

一、记录详细操作 # [] 表示可选的 # {}表示必选的 # 增 # insert [into] 表名[字段名] value|values(字段值....); # into 可省略 # [字段名] 可选 # 如果写了 你后面的值 必须与 写的字段匹配 # 不写 后面的值 必须和表的结构完全匹配 # va…...

做网站推广员/营业推广的方式

题意&#xff1a; 有N个女生想跟自己的一个或者多个男生做在一起。然后要你算出最后能够匹配出多少对。 解题思路&#xff1a; 这道题是明显的二分匹配题目。有个强大的算法&#xff1a;匈牙利算法&#xff0c;确实很凶&#xff0c;这算法挺牛叉。 这道题属于单边匹配。 算法的…...