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都是可以快速获取路径的
相关推荐
ctlover7 小时前
Python高级与正则表达式
开发语言·python
泡海椒7 小时前
生产环境安全配置:JQuickJavaInvocationGuard自定义防护规则实战
开发语言·python·安全
yume_sibai7 小时前
07-Rust 异步编程完全指南(async/await + Tokio + Future + 并发原语 + 异步流)
开发语言·后端·rust
Sylvia33.7 小时前
板球实时数据接入实战:从Frames模型到多赛制适配
java·python·websocket·网络协议·架构
linx2957 小时前
单元七 · 零基础路线图-第 1–3 周·变量、类型与字符串
c语言·开发语言·数据结构·c++·算法
geovindu7 小时前
java: Strategy Pattern
java·开发语言·后端·设计模式·策略模式·行为模式
IPdodo_7 小时前
curl 如何测试代理 IP?HTTP、SOCKS5 与认证参数示例
前端·网络·python·https·网络调试
念越7 小时前
Python基础语法(一):变量、类型与程序控制流
开发语言·网络·python
2601_962284177 小时前
基于Apache Cassandra与Python的数据建模及ETL实践
python·nosql·etl·数据建模·apachecassandra
隐擎fox8 小时前
深入下一代 Web 协议风控:HTTP/2 帧结构解析与 Akamai/Cloudflare H2 指纹检测实战
python·网络协议·http·ip/tcp