Python爬虫爬取数据案例

一、准备工作

1.爬虫协议

爬虫协议,是每一个爬虫开发者都应该遵守的协议,但是他是一个君子协定,并不是强制协定,但为了维护网络环境,大家都应该遵守下,把环境搞臭了,还是程序员受害。

那爬虫协议怎么看呢,我们可以瞅瞅B站的爬虫协议,获取方式如下:

shell 复制代码
https://www.bilibili.com/robots.txt

访问上面地址后,我们就可以看到B站的爬虫协议了,他的不允许爬取的内容有两个大类,第二个是首页内容,因为首页内容访问量很大,如果大家都来爬这个数据,那么对B站来说,压力会很大,一般这类TOC的网站,首页都是不允许爬取的。

下面再来看下百度的,爬虫协议

shell 复制代码
https://www.baidu.com/robots.txt

可以看到除了百度声明的一些爬虫外,百度禁止一些数据爬取行为,因为百度的访问量很大,如果大家爬取数据,对他压力确实很大,也能理解。

2.准备工作

  • python安装 requests

    python 复制代码
    pip install requests

    requests被誉为python中最好用的三方http客户端包,网络请求必备

  • python安装lxml

    这是一个高性能的html/xml这种标记语言的解析库,支持Xpatch语法获取前端资源和数据,Xpatch是前端根据标签获取数据的一种原始方式。对于标签语言获取数据很是方便。

    shell 复制代码
    pip install lxml

3.lxml基础语法

这里主要介绍下爬取数据时,获取数据定位元素的语法,假设有如下程序:

html 复制代码
<html style="height: 100%">
	<body class="layui-layout-body" style="height:100%; overflow: auto;">
		<div class="layui-layout layui-layout-admin" style="height:100%">
			    <input type="hidden" value="false" id="commonLogin">
			    <input type="hidden" value="false" id="commonUserHasVip">
		 </div>
		 <div class="layui-layout layui-layout-admin" style="height:100%">
			    <input type="hidden" value="false" id="commonLogin">
			    <input type="hidden" value="false" id="commonUserHasVip">
		 </div>
	</body>
</html>

下面根据上面标签来进行解释语法

  • / 从根节点的直接子元素查找
    /html 表示从根节点开始查找所有的html标签,返回一个list,再比如 /html/body/div 则是查找所有的div标签返回一个list
  • // 从任意位置查找
    也就是全文超找该标签,然后返回list,比如 //div,则是会返回一个拥有两个div元素的list
  • . 点表示从当前元素下开始查找
    比如使用 //div获取到了两个div标签,但是div下的还有其他东西,我们这时候就可以基于当前元素继续查找,此时使用点 ./input 即可查找到input标签, 如果是.//input,则表示 从当前节点的任意位置查找input
  • n 获取查到的第n个标签
    比如如果上面使用//div查到2个,如果只想要第一个,可以这么写//n1,注意这里没有下标0的场景,如果想要获取最后一个可以直接使用//divlastIO,这样就能获取到最后一个div了,
    此外还可以增加别的条件,//div@style,表示查找拥有属性style的div标签,如果再细点还可以,
    //div@style='height:100%',表示查找属性值为指定值的元素
    • 表示匹配任何元素
      /html/*,则表示查找html下的所有元素
  • @* 匹配元素的属性
    @ //div/@* 上面示例则表示匹配到了2个div
  • text() 获取标签内容
    注意lxml获取标签后不会默认拿文本,而是拿的标签,如果想要取文本必须使用text(),
    如://div/input/text(),则表示获取所有input的文本内容。

二、爬取数据

下面是爬取http://xzqh.mca.gov.cn/statistics/2022.html,行政区划网页的示例

注意:这个网站没有放爬取规范,笔者才弄得,如果有禁止爬取的声明,最好不要处理,有一定法律风险。

整体示例代码:

python 复制代码
import requests as http
from lxml import html

resp = http.get("http://xzqh.mca.gov.cn/statistics/2022.html")
# 注意网页编码,有的并不是utf-8,不是的话就得指定
resp.encoding = 'gb2312'
# 获取html的格式化对象
document = html.fromstring(resp.text)
# 意思是全局找带有属性colspan='2'的td标签,在找下面的div,获取他们的内容
str_list = document.xpath("//td[@colspan='2']/div/text()")

for city in str_list:
    print(city)

可以发现使用python编写爬虫其实很简单,相当于其他语言来说很轻量

注意:

  • Xpath的路径,可以通过如下方式快速获取
    f12,然后选中元素,点击图中想要获取的内容

    右键获取如下,选择复制XPath,或者复制完整XPath都是可以快速获取路径的
相关推荐
Cx330❀2 分钟前
【Qt 进阶指南】详解 Qt 常用标准对话框与主窗口组件架构
开发语言·qt·ui·性能优化·架构·图形渲染
Light Gao2 分钟前
Encoder 与 Decoder 详解:从 Embedding 到 Seq2Seq 的完整数据流
java·开发语言·embedding
HZZD_HZZD3 分钟前
弱网下CoAP还省吗?合众致达Cat.1电表90天实测:MQTT重连流量占52%、续航差距从38%拉大到73%
开发语言·物联网·php·腾讯云
web打印社区6 分钟前
Windows 网页静默打印设置步骤:客户端、防火墙与联调清单
开发语言·前端·javascript·chrome·pdf·ecmascript
小师兄吃牛肉15 分钟前
什么是R语言?如何快速学习R语言
开发语言·学习·r语言
y = xⁿ33 分钟前
关于Agent工程落地
前端·人工智能·python
Evand J37 分钟前
【MATLAB例程】三维快速扩展随机树(RRT)路径规划与到达角(AOA)、到达时间差(TDOA)融合定位,附下载链接
开发语言·matlab·代码·定位·例程
执明wa40 分钟前
Android RecyclerView 实战:点击频道栏切换对应内容
android·开发语言·windows·microsoft·android studio
开开心心就好41 分钟前
图片白底怎么去掉?抠图工具抠完背景透明
java·服务器·开发语言·pdf·ocr·散列表·启发式算法
朝朝辞暮i43 分钟前
C++ 第 22 课:const —— 不允许随便修改的数据
开发语言·c++·算法