欢迎来到尧图网

客户服务 关于我们

您的位置:首页 > 财经 > 创投人物 > Python爬虫进阶(基础方法介绍)

Python爬虫进阶(基础方法介绍)

2024/10/23 23:19:36 来源:https://blog.csdn.net/weixin_73504499/article/details/140591428  浏览:    关键词:Python爬虫进阶(基础方法介绍)

页面请求方式

在Python爬虫中,GET请求POST请求是两种最常用的HTTP请求方法,它们各自有着不同的用途和行为。

get请求post请求
目的主要用于请求访问已被URI(统一资源标识符)识别的资源。GET请求通常用于获取数据,而不是提交数据。主要用于向服务器提交数据。POST请求通常用于更新资源或提交表单数据。
参数传递GET请求的参数通常附加在URL之后,通过?分隔URL和传输数据,参数之间以&相连。这种方式使得URL易于分享和书签化,但不适合传输敏感信息,因为URL会被记录在服务器日志、浏览器历史等地方。POST请求的参数包含在请求体中,而不是附加在URL之后。这使得POST请求可以传输大量数据,并且数据不会暴露在URL中,增加了数据的安全性。
缓存GET请求是可以被缓存的,这意味着相同的GET请求可能在不需要重新发送的情况下被浏览器或服务器缓存返回。POST请求通常不会被缓存(虽然可以通过设置HTTP头来指示缓存POST响应),因为它们是用于更改服务器上的资源或状态的。
长度限制由于URL长度的限制(不同浏览器和服务器有不同的限制,但通常较短),GET请求携带的数据量相对较小。POST请求没有像GET请求那样的URL长度限制,因此可以传输大量数据。但是,服务器可能会对请求体的大小进行限制,这取决于服务器的配置。
安全性由于GET请求的参数暴露在URL中,因此不适合传输敏感信息,如密码或个人信息。由于POST请求的参数不会暴露在URL中,因此它们更适合传输敏感信息,如用户密码或个人信息。然而,仅仅使用POST并不足以保证数据的安全性,还需要考虑其他安全措施,如HTTPS加密。

两种请求在Python爬虫中的应用
在Python爬虫中,你可能会根据目标网站的要求和API的设计来选择使用GET请求还是POST请求。例如,如果你只需要从网站获取一些静态页面数据,那么使用GET请求可能就足够了。但是,如果你需要提交表单或登录到网站,那么你可能需要使用POST请求来发送必要的参数。

页面解析

在Python爬虫中,页面解析是指从下载的网页HTML内容中提取出我们感兴趣的数据。这个过程通常涉及到解析HTML文档,以便能够提取出文本、链接、图片等信息。Python提供了多种库来帮助我们进行页面解析,其中最常见的是BeautifulSoup和lxml。此外,requests库常用于发送HTTP请求并获取网页内容,它是页面解析过程的第一步。

这里我们介绍用lxml库里的etree.xpath的方法来获取我们想要的数据。

首先我们需要导入lxml库

pip install lxml

这里提供了一个完整的html文件格式来让我们了解etree.xpath的用法:
test.html文件:

<html lang="en"><head><meta charset="UTF-8" /><title>测试bs4</title></head><body><div><p>百里守约</p></div><div class="song">你好<p>李清照</p><p>王安石</p><p>苏轼</p><p>柳宗元</p><a href="http://www.song.com/" title="赵匡胤" target="_self"><span>this is span</span>宋朝是最强大的王朝,不是军队的强大,而是经济很强大,国民都很有钱</a><a href="" class="du">总为浮云能蔽日,长安不见使人愁</a><img src="http://www.baidu.com/meinv.jpg" alt="" /></div><div class="tang"><ul>清明时节雨纷纷,路上行人欲断魂<li><a href="http://www.baidu.com" title="qing">清明时节雨纷纷,路上行人欲断魂,借问酒家何处有,牧童遥指杏花村</a></li><li><a href="http://www.163.com" title="qin">秦时明月汉时关,万里长征人未还,但使龙城飞将在,不教胡马度阴山</a></li><li><a href="http://www.126.com" alt="qi">岐王宅里寻常见,崔九堂前几度闻,正是江南好风景,落花时节又逢君</a></li><li><a href="http://www.sina.com" class="du">杜甫</a></li><li><a href="http://www.dudu.com" class="du">杜牧</a></li><li><b>杜小月</b></li><li><i>度蜜月</i></li><li><a href="http://www.haha.com" id="feng">凤凰台上凤凰游,凤去台空江自流,吴宫花草埋幽径,晋代衣冠成古丘</a></li></ul></div></body>
</html>

通过下面的方法来获取test.html文件中我们想要文本内容:

from lxml import etreeif __name__ == '__main__':tree = etree.parse("./test.html")# xpath返回的都是列表# / 表示一个层级# 取所有p标签里的文本内容 加上text()就可以取到文本内容,不然取到的是一串编码print(tree.xpath("/html/body/div/p/text()"))# 输出:['百里守约', '李清照', '王安石', '苏轼', '柳宗元']print(tree.xpath("/html/head/title"))# # 定位百里守约  索引定位 从1开始print(tree.xpath("/html/body/div[1]/p/text()"))  # 输出:['百里守约']print(tree.xpath("/html/body/div/p[1]/text()"))  # 错误示例/输出:['百里守约', '李清照']# 定位'总为浮云能蔽日,长安不见使人愁'print(tree.xpath("/html/body/div[2]/a[2]/text()"))# 定位'岐王宅里寻常见,崔九堂前几度闻,正是江南好风景,落花时节又逢君'print(tree.xpath("/html/body/div[3]/ul/li[3]/a/text()"))# // 表示多个层级 标签属性定位 @class='id'# 定位'岐王宅里寻常见,崔九堂前几度闻,正是江南好风景,落花时节又逢君'print(tree.xpath("//div[3]/ul/li[3]/a/text()"))# 定位 李清照print(tree.xpath("//div[@class='song']/p[1]/text()"))  # 输出:['李清照']# 定位'总为浮云能蔽日,长安不见使人愁'print(tree.xpath("//div[@class='song']/a[@class='du']/text()"))# 取<div class="tang">内的所有li标签print(tree.xpath("//div[@class='tang']/ul/li"))# 取li标签内的所有a标签for li in tree.xpath("//div[@class='tang']/ul/li"):try:print("".join(li.xpath("./a/text()")))  # "".join将列表转换成字符串except Exception as e:pass

下一篇文章将展示如何实战爬取一个网站里我们想要的数据

版权声明:

本网仅为发布的内容提供存储空间,不对发表、转载的内容提供任何形式的保证。凡本网注明“来源:XXX网络”的作品,均转载自其它媒体,著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处。

我们尊重并感谢每一位作者,均已注明文章来源和作者。如因作品内容、版权或其它问题,请及时与我们联系,联系邮箱:809451989@qq.com,投稿邮箱:809451989@qq.com