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脚本来控制Windows Azure的简单教程
Apr 16 Python
Python实现列表转换成字典数据结构的方法
Mar 11 Python
Tornado高并发处理方法实例代码
Jan 15 Python
Python爬豆瓣电影实例
Feb 23 Python
VScode编写第一个Python程序HelloWorld步骤
Apr 06 Python
python实现随机调用一个浏览器打开网页
Apr 21 Python
python实现自动发送邮件
Jun 20 Python
selenium+python自动化测试之鼠标和键盘事件
Jan 23 Python
python标记语句块使用方法总结
Aug 05 Python
python如何输出反斜杠
Jun 18 Python
解决tensorflow 释放图,删除变量问题
Jun 23 Python
套娃式文件夹如何通过Python批量处理
Aug 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
介绍几个array库的新函数 php
2006/12/29 PHP
zend api扩展的php对象的autoload工具
2011/04/18 PHP
php缩放图片(根据宽高的等比例缩放)实例介绍
2013/06/09 PHP
smarty模板中使用get、post、request、cookies、session变量的方法
2014/04/24 PHP
CI(CodeIgniter)模型用法实例分析
2016/01/20 PHP
js继承 Base类的源码解析
2008/12/30 Javascript
JavaScript对象、属性、事件手册集合方便查询
2010/07/04 Javascript
原生js 秒表实现代码
2012/07/24 Javascript
javascript属性访问表达式用法分析
2015/04/25 Javascript
全面解析Bootstrap表单使用方法(表单控件)
2015/11/24 Javascript
详解javascript实现瀑布流绝对式布局
2016/01/29 Javascript
vue,angular,avalon这三种MVVM框架优缺点
2016/04/27 Javascript
javascript中Number的方法小结
2016/11/21 Javascript
前端JS面试中常见的算法问题总结
2016/12/23 Javascript
NodeJS自定义模块写法(详解)
2017/06/27 NodeJs
原生js封装运动框架的示例讲解
2017/10/01 Javascript
浅谈vue-router2路由参数注意的问题
2017/11/08 Javascript
在 Angular-cli 中使用 simple-mock 实现前端开发 API Mock 接口数据模拟功能的方法
2018/11/28 Javascript
爬虫利器Puppeteer实战
2019/01/09 Javascript
基于aotu.js实现微信自动添加通讯录中的联系人功能
2020/05/28 Javascript
[56:41]iG vs Winstrike 2018国际邀请赛小组赛BO2 第二场
2018/08/17 DOTA
[10:21]DOTA2-DPC中国联赛 正赛 PSG.LGD vs Aster 选手采访
2021/03/11 DOTA
go语言计算两个时间的时间差方法
2015/03/13 Python
在Python程序和Flask框架中使用SQLAlchemy的教程
2016/06/06 Python
Python中动态检测编码chardet的使用教程
2017/07/06 Python
对python 中class与变量的使用方法详解
2019/06/26 Python
Python Subprocess模块原理及实例
2019/08/26 Python
pygame库实现移动底座弹球小游戏
2020/04/14 Python
如何使用Python抓取网页tag操作
2020/02/14 Python
Python日志:自定义输出字段 json格式输出方式
2020/04/27 Python
俄罗斯小米家用电器、电子产品和智能家居商店:Poood.ru
2020/04/03 全球购物
《自然之道》教学反思
2014/02/11 职场文书
诚实守信道德模范事迹材料
2014/08/15 职场文书
公司老总年会致辞
2015/07/30 职场文书
用python开发一款操作MySQL的小工具
2021/05/12 Python
SpringBoot使用AOP实现统计全局接口访问次数详解
2022/06/16 Java/Android