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 05 Python
利用Fn.py库在Python中进行函数式编程
Apr 22 Python
Python模拟脉冲星伪信号频率实例代码
Jan 03 Python
浅谈Python黑帽子取代netcat
Feb 10 Python
python 中if else 语句的作用及示例代码
Mar 05 Python
Python爬虫框架Scrapy常用命令总结
Jul 26 Python
Python全局变量与局部变量区别及用法分析
Sep 03 Python
Python使用logging模块实现打印log到指定文件的方法
Sep 05 Python
Python XlsxWriter模块Chart类用法实例分析
Mar 11 Python
python之pyqt5通过按钮改变Label的背景颜色方法
Jun 13 Python
详解Pycharm与anaconda安装配置指南
Aug 25 Python
详解Python中的进程和线程
Jun 23 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中GET变量的使用
2006/10/09 PHP
PHP 生成的XML以FLASH获取为乱码终极解决
2009/08/07 PHP
ThinkPHP模板判断输出Present标签用法详解
2014/06/30 PHP
Thinkphp5.0自动生成模块及目录的方法详解
2017/04/17 PHP
PHP addcslashes()函数讲解
2019/02/03 PHP
javascript在事件监听方面的兼容性小结
2010/04/07 Javascript
Javascript根据指定下标或对象删除数组元素
2012/12/21 Javascript
from表单多个按钮提交用onclick跳转不同action
2014/04/24 Javascript
Atitit.js的键盘按键事件捆绑and事件调度
2016/04/01 Javascript
基于jquery实现图片放大功能
2016/05/07 Javascript
javascript加减乘除的简单实例
2016/07/12 Javascript
livereload工具实现前端可视化开发【推荐】
2016/12/23 Javascript
基于vue实现多引擎搜索及关键字提示
2017/03/16 Javascript
JS实现的二叉树算法完整实例
2017/04/06 Javascript
详解angularjs利用ui-route异步加载组件
2017/05/21 Javascript
vue 国际化 vue-i18n 双语言 语言包
2018/06/07 Javascript
在vue中获取token,并将token写进header的方法
2018/09/26 Javascript
vue路由--网站导航功能详解
2019/03/29 Javascript
优雅地使用loading(推荐)
2019/04/20 Javascript
JS合并两个数组的3种方法详解
2019/10/24 Javascript
[02:25]专访DOTA2负责人Erik 国际邀请赛暂不会离开西雅
2014/07/21 DOTA
Python列表计数及插入实例
2014/12/17 Python
详解Python中内置的NotImplemented类型的用法
2015/03/31 Python
python中copy()与deepcopy()的区别小结
2018/08/03 Python
python 判断linux进程,并杀死进程的实现方法
2019/07/01 Python
HTML5 canvas 基本语法
2009/08/26 HTML / CSS
canvas绘制树形结构可视图形的实现
2020/04/03 HTML / CSS
函授大专自我鉴定
2013/11/01 职场文书
办理信用卡工作证明
2014/01/11 职场文书
策划创业计划书
2014/02/06 职场文书
未受刑事制裁公证证明
2014/09/20 职场文书
2014年小学图书室工作总结
2014/12/09 职场文书
2016年小学“我们的节日·中秋节”活动总结
2016/04/05 职场文书
2019年市场部个人述职报告(三篇)
2019/10/23 职场文书
Android开发实现极为简单的QQ登录页面
2022/04/24 Java/Android
蓝牙耳机怎么连接电脑win11? Win11蓝牙耳机连接电脑的技巧
2023/01/09 数码科技