python3 xpath和requests应用详解


Posted in Python onMarch 06, 2020

根据一个爬取豆瓣电影排名的小应用,来简单使用etree和request库。

etree使用xpath语法。

import requests
import ssl
from lxml import etree


ssl._create_default_https_context = ssl._create_unverified_context

session = requests.Session()
for id in range(0, 251, 25):
 URL = 'https://movie.douban.com/top250/?start=' + str(id)
 req = session.get(URL)
 # 设置网页编码格式
 req.encoding = 'utf8'
 # 将request.content 转化为 Element
 root = etree.HTML(req.content)
 # 选取 ol/li/div[@class="item"] 不管它们在文档中的位置
 items = root.xpath('//ol/li/div[@class="item"]')
 for item in items:
  # 注意可能只有中文名,没有英文名;可能没有quote简评
  rank, name, alias, rating_num, quote, url = "", "", "", "", "", ""
  try:
   url = item.xpath('./div[@class="pic"]/a/@href')[0]
   rank = item.xpath('./div[@class="pic"]/em/text()')[0]
   title = item.xpath('./div[@class="info"]//a/span[@class="title"]/text()')
   name = title[0].encode('gb2312', 'ignore').decode('gb2312')
   alias = title[1].encode('gb2312', 'ignore').decode('gb2312') if len(title) == 2 else ""
   rating_num = item.xpath('.//div[@class="bd"]//span[@class="rating_num"]/text()')[0]
   quote_tag = item.xpath('.//div[@class="bd"]//span[@class="inq"]')
   if len(quote_tag) is not 0:
    quote = quote_tag[0].text.encode('gb2312', 'ignore').decode('gb2312').replace('\xa0', '')
   # 输出 排名,评分,简介
   print(rank, rating_num, quote)
   # 输出 中文名,英文名
   print(name.encode('gb2312', 'ignore').decode('gb2312'),
     alias.encode('gb2312', 'ignore').decode('gb2312').replace('/', ','))
  except:
   print('faild!')
   pass

程序运行结果:

python3 xpath和requests应用详解

补充知识:requests抓取以及Xpath解析

代码:

# requests抓取
import requests
 
# 新浪新闻的一篇新闻的url
url = 'http://news.sina.com.cn/s/2018-05-09/doc-ihaichqz1009657.shtml'
 
res = requests.get(url)
# 查看编码方式
enconding = requests.utils.get_encodings_from_content(res.text)
#print(enconding)
 
 
# 打印网页内容
html_doc = res.content.decode("utf-8")
print(html_doc[:500])
 
# 保存网页内容
with open('test.html', 'w') as f:
 f.write(html_doc)

运行结果:

<!DOCTYPE html>
<!-- [ published at 2018-05-09 18:23:13 ] -->
<!-- LLTJ_MT:name ="澎湃新闻" -->
 
<html>
<head>
<meta charset="utf-8"/>
<meta http-equiv="Content-type" content="text/html; charset=utf-8" />
<meta name="sudameta" content="urlpath:s/; allCIDs:51924,257,51895,200856,56264,258,38790">
<title>小学老师罚学生赤脚跑操场 官方:将按规定处理|赤脚|学生|华龙网_新浪新闻</title>
<meta name="keywords" content="赤脚,学生,华龙网" />
<meta name="tags" content="赤脚,学生,华龙网" />
<meta name="description" content="原标题:潼南一小学体育老师罚学生赤脚跑操场续:区教委向华龙网发来情况

代码:

# xpath解析
from lxml import etree
 
# 建立html的树
tree = etree.HTML(html_doc)
 
# 设置目标路径(标题)
path_title = '/html/body//h1[@class="main-title"]//text()'
 
# 提取节点
node_title = tree.xpath(path_title)
print("===" * 20)
print(node_title[0])
 
# 设置内容路径
path_content = '//div[@class="article-content-left"]//div[@id="article"]//text()'
 
# 提取节点
node_content = tree.xpath(path_content)
print("===" * 20)
print("。".join(node_content))

运行结果:

============================================================
小学老师罚学生赤脚跑操场 官方:将按规定处理
============================================================
 
 。原标题:潼南一小学体育老师罚学生赤脚跑操场续:区教委向华龙网发来情况说明。
。
重庆客户端-华龙网5月9日消息,这两天,重庆潼南区朝阳小学二年级6班不少家长心疼不已,因为多个娃儿脚底被磨出了泡。一问才知道,是因为有些学生体育课上没穿运动鞋,被体育老师要求赤脚在操场上跑步。收到重庆网络问政平台这一投诉后,华龙网记者立即进行了调查。今(9)日,华龙网发布了。《重庆潼南一小学体育老师罚学生赤脚跑操场脚底磨出泡当地教委介入》。报道后,潼南教委高度重视并给华龙网传来官方的情况说明。。
。 。 [说明全文]。
。
关于家长在华龙网投诉教师上体育课体罚学生的情况说明。
。
潼南区朝阳小学体育教师邹老师于2018年5月7日上午上体育课时,发现该班有少部分名学生未按体育课的要求穿运动鞋。该教师认为,穿着凉鞋跑步对学生本人及他人存在安全隐患,塑胶跑道不会对学生光脚运动造成影响,于是就叫未穿运动鞋的学生,脱掉凉鞋进行随班热身跑步。当时邹老师未发现学生有异常情况,也未接到学生有异常情况的反映。后经家长反映到学校,有极少数光着脚跑步的学生有异常情况,学校庚即与部分家长进行了沟通,并及时调查了解了此事,并对该教师这种不恰当教学方法进行了批评教育,我们将按相关规定对该教师作出相应的处理。。
。
重庆市潼南区教育委员会。
。
2018年5月9日。
。  来源:华龙网。
 
。责任编辑:张义凌 。

以上这篇python3 xpath和requests应用详解就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持三水点靠木。

Python 相关文章推荐
Python查看多台服务器进程的脚本分享
Jun 11 Python
Python实现全局变量的两个解决方法
Jul 03 Python
在Python上基于Markov链生成伪随机文本的教程
Apr 17 Python
Python监控主机是否存活并以邮件报警
Sep 22 Python
Python作用域用法实例详解
Mar 15 Python
解决python使用open打开文件中文乱码的问题
Dec 29 Python
Python中的默认参数实例分析
Jan 29 Python
python3+PyQt5 自定义窗口部件--使用窗口部件样式表的方法
Jun 26 Python
python Tensor和Array对比分析
Jan 08 Python
pytorch下使用LSTM神经网络写诗实例
Jan 14 Python
Keras使用ImageNet上预训练的模型方式
May 23 Python
Python人工智能之混合高斯模型运动目标检测详解分析
Nov 07 Python
python 装饰器功能与用法案例详解
Mar 06 #Python
python GUI库图形界面开发之PyQt5布局控件QVBoxLayout详细使用方法与实例
Mar 06 #Python
利用 Python ElementTree 生成 xml的实例
Mar 06 #Python
Python3 xml.etree.ElementTree支持的XPath语法详解
Mar 06 #Python
python GUI库图形界面开发之PyQt5布局控件QHBoxLayout详细使用方法与实例
Mar 06 #Python
Python yield的用法实例分析
Mar 06 #Python
用Python生成HTML表格的方法示例
Mar 06 #Python
You might like
PHP 数据库树的遍历方法
2009/02/06 PHP
整理的9个实用的PHP库简介和下载
2010/11/09 PHP
dedecms集成财付通支付接口
2014/12/28 PHP
注释PHP和html混合代码的小技巧(分享)
2016/11/03 PHP
PHP删除数组中指定下标的元素方法
2018/02/03 PHP
PHP实现的大文件切割与合并功能示例
2018/04/10 PHP
JavaScript加密解密7种方法总结分析
2007/10/07 Javascript
JS控制文本框textarea输入字数限制的方法
2013/06/17 Javascript
javascript移出节点removeChild()使用介绍
2014/04/03 Javascript
jQuery中nextUntil()方法用法实例
2015/01/07 Javascript
Javascript 闭包详解及实例代码
2016/11/30 Javascript
VueJs与ReactJS和AngularJS的异同点
2016/12/12 Javascript
jQuery实现鼠标悬停3d菜单展开动画效果
2017/01/19 Javascript
使用bat打开多个cmd窗口执行gulp、node
2017/02/17 Javascript
Vue.js手风琴菜单组件开发实例
2017/05/16 Javascript
浅谈Express异步进化史
2017/09/09 Javascript
详解Vue2 SSR 缓存 Api 数据
2017/11/20 Javascript
AngularJS实现的自定义过滤器简单示例
2019/02/02 Javascript
Vuex持久化插件(vuex-persistedstate)解决刷新数据消失的问题
2019/04/16 Javascript
微信小程序判断用户是否需要再次授权获取个人信息
2019/07/18 Javascript
Nuxt 项目性能优化调研分析
2020/11/07 Javascript
[02:12]2015国际邀请赛 SHOWOPEN
2015/08/05 DOTA
跟老齐学Python之用while来循环
2014/10/02 Python
python简单商城购物车实例代码
2018/03/15 Python
PIL包中Image模块的convert()函数的具体使用
2020/02/26 Python
Python实现多线程下载脚本的示例代码
2020/04/03 Python
Python常用外部指令执行代码实例
2020/11/05 Python
Django多个app urls配置代码实例
2020/11/26 Python
医学院四年学习生活的自我评价
2013/11/06 职场文书
材料会计岗位职责
2014/03/06 职场文书
优秀党支部书记事迹材料
2014/05/29 职场文书
2014年庆祝国庆65周年演讲稿
2014/09/21 职场文书
离婚协议书怎么写的
2014/12/14 职场文书
七年级语文教学反思
2016/03/03 职场文书
python可视化大屏库big_screen示例详解
2021/11/23 Python
Python通用验证码识别OCR库ddddocr的安装使用教程
2022/07/07 Python