Python【xpath】实战案例【中】

获取全国地级城市名称:

案例准备:导入外部库 1.requests、2.lxml

容易遇到的问题:网站SSL认证失效

代码块:

#导入第三方库
import requests
from lxml import etree
# 网页地址
url = 'https://www.aqistudy.cn/historydata/'
#U-A伪装
headers = {
    'User-Agent':'Mozilla/5.0 (Linux; Android 6.0; Nexus 5 Build/MRA58N) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/109.0.0.0 Mobile Safari/537.36 Edg/109.0.1518.70'
}
#发起get请求 
page_text =requests.get(url=url,headers=headers,verify=False).text
#页面解析
tree = etree.HTML(page_text)
#xpath语法
ul = tree.xpath('//div[@class="bottom"]/ul//li')
#定义一个空列表准备存储数据
all_city_name = []
#遍历页面数据
for honst_li in ul:
    city_name = honst_li.xpath('./a/text()')[0]
    #将数据添加到定义的空列表中
    all_city_name.append(city_name)
#打印列表中存储的数据
print(all_city_name,len(all_city_name))
问题详解:

你通过网址打开你需要获取数据的网址时会出现以下页面

报错:

requests.exceptions.SSLError: HTTPSConnectionPool(host=‘httpbin.org’, port=443): Max retries exceeded with url: /get (Caused by SSLError(SSLError(1, ‘[SSL: WRONG_VERSION_NUMBER] wrong version number (_ssl.c:1123)’)))

原因问题:网站运营者近期未对网站安全认证向浏览器官方交付认证,证书认证失效

解决办法: 在发送get请求时添加verify=False,关闭ssl认证

未进行设置证书认证相关参数,默认是Ture 打开认证

page_text =requests.get(url=url,headers=headers).text

关闭ssl认证,verify=False

page_text =requests.get(url=url,headers=headers,verify=False).text

xpath 详解:

//div[@class="bottom"] 表示当前从div这个标签开始获取,而且div的属性class=“bottom”,这种方式也可以叫做标签定位

/ul / 表示下一层标签,/ul 表示下一层标签是ul

//div[@class="bottom"]/ul//li 表示当前从<div class="bottom">开始,下一层标签为<ul>,下下下一层标签是li,这个下下下的意思略过多个书写的标签直接来到了<li>标签

如果我没略过的话应该写成://div[@class="bottom"]/ul/div[2]/li

如果我略过的话应该写成://div[@class="bottom"]/ul//li 我可以省略ul标签不写。如果想要获取的数据和另一个不需要的数据是拿<ul>标签搞区分我们就应该写全,如果像我这样写的话有时就会拿到我们不需要的数据。

for 循环遍历:

为什么我要对<li>标签进行循环遍历,因为我们需要的数据在<li>标签当中,<li>标签又在<ul>标签当中,我们又有好多个<li>标签

ul = tree.xpath('//div[@class="bottom"]/ul//li')

我们通过属性定位先拿到<li>标签

再通过for循环遍历<div>[2]"第二个<div>标签,在第二个<div>中"拿到所有的<li>标签,

拿到一个<li>标签,我们通过xpath语法获取<li>标签中的<a>标签中文本数据,text()就是获取文本数据,后面加上 [0] 是因为文本数据在第一个<a>标签 也就是下标索引。

for honst_li in ul:
    city_name = honst_li.xpath('./a/text()')[0]

如何通过检查工具刨铣网页信息:

我用不同的颜色框起来标签就是属于一个完整的属性标签比如

<ul class = "xxx">

</ul>

我们通过观察完整的标签信息,来确定我们需要的数据到底在那个标签里,比如:

我们需要的数据是<a>标签中的文本数据“阿坝州”,<a>标签在<li>标签中,<li>标签在第二个<div>标签中,<div>[2]又在<ul>标签中,<ul>标签又在大的div这个标签中,而且div的属性class=“bottom”<div class="bottom">

正常xpath语法为://div[@class="bottom"]/ul/div[2]/li/a/text()

总结:

论语二则:

温故而知新,可以为师矣 --《论语》

温习旧的知识,从中获取到新的感悟,凭借这一点就可以给别人传授知识。

人不知而不愠,不亦君子乎--《论语》

别人不知晓自己,不去发火生气,不也是君子道德上的修养吗

  • 2
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
当使用Python进行爬虫时,XPath是一种非常有用的工具,可以帮助您从HTML或XML文档提取所需的数据。以下是一个简单的示例,演示如何使用PythonXPath进行爬虫实战: 首先,您需要安装必要的库。在Python,您可以使用`lxml`库来解析HTML或XML文档,并使用`requests`库发送HTTP请求。您可以使用以下命令来安装它们: ```python pip install lxml pip install requests ``` 接下来,我们将使用`requests`库发送HTTP请求,并使用`lxml`库解析返回的HTML内容。以下是一个示例代码: ```python import requests from lxml import etree # 发送HTTP请求并获取页面内容 url = 'https://example.com' # 替换为您要爬取的网页地址 response = requests.get(url) content = response.content # 使用lxml解析HTML内容 html = etree.HTML(content) # 使用XPath提取所需的数据 data = html.xpath('//div[@class="example-class"]/text()') # 替换为您要提取数据的XPath表达式 # 打印提取的数据 for d in data: print(d) ``` 在上述示例,我们首先发送HTTP请求并获取网页的内容。然后,我们使用`etree.HTML()`函数将内容转换为可解析的HTML对象。接下来,我们使用XPath表达式`'//div[@class="example-class"]/text()'`来提取具有`class`属性为`example-class`的`div`元素的文本内容。您可以根据实际情况调整XPath表达式以匹配您要提取的数据。 注意:在实际使用,您可能还需要处理页面的反爬机制、处理异常情况和使用循环遍历多个页面等。此示例仅为演示基本的Python爬虫和XPath使用方法。 希望这可以帮助到您!如有任何问题,请随时提问。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值