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))
问题详解:

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

Python【xpath】实战案例【中】_第1张图片

报错:

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 详解:
Python【xpath】实战案例【中】_第2张图片

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

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

//div[@class="bottom"]/ul//li 表示当前从

开始,下一层标签为

你可能感兴趣的:(爬虫基础,python)