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都是可以快速获取路径的
相关推荐
ShineWinsu1 小时前
对于 C++:C++20中Concept(概念) 与 Coroutine(协程)的解析
linux·开发语言·网络·c++·c++20·epoll
ly76891 小时前
C 语言从入门到进阶:语法、指针、内存管理与工程实践详解
c语言·开发语言
何以解忧,唯有..1 小时前
Python logging 模块:从入门到精通
python·microsoft·php
quantdash_cc1 小时前
历史数据断层与REST请求慢到崩溃?QuantDash高性能量化数据API终极解决方案
开发语言·python·缓存·php·量化·quantdash
breeze jiang1 小时前
Next.js 16 App Router 实战:从 About、Blog 动态路由到全局 404
开发语言·javascript·ecmascript
熊野君1 小时前
Prompt / RAG / 规则 / Skills —— 定位、协作与实现路线
开发语言·python
zhangphil2 小时前
Python Web后端框架FastAPI vs Flask
python·ai·llm
山甫aa2 小时前
JavaWeb后端开发学习手册
java·开发语言·数据库·学习·mysql·springboot·web