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标准库defaultdict模块使用示例
Apr 28 Python
Python实现的单向循环链表功能示例
Nov 10 Python
Python enumerate索引迭代代码解析
Jan 19 Python
Python PyCharm如何进行断点调试
Jul 05 Python
检测python爬虫时是否代理ip伪装成功的方法
Jul 12 Python
Python-Tkinter Text输入内容在界面显示的实例
Jul 12 Python
Django后端接收嵌套Json数据及解析详解
Jul 17 Python
python的命名规则知识点总结
Oct 04 Python
keras训练浅层卷积网络并保存和加载模型实例
Jul 02 Python
详解用selenium来下载小姐姐图片并保存
Jan 26 Python
matplotlib更改窗口图标的方法示例
Feb 03 Python
使用pd.merge表连接出现多余行的问题解决
Jun 16 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-fpm 参数的深入理解
2013/06/03 PHP
PHP多维数组转一维数组的简单实现方法
2015/12/23 PHP
详解PHP PDO简单教程
2019/05/28 PHP
用js统计用户下载网页所需时间的脚本
2008/10/15 Javascript
Javascript !!的作用
2008/12/04 Javascript
Jquery判断IE6等浏览器的代码
2011/04/05 Javascript
js 可拖动列表实现代码
2011/12/13 Javascript
ie 7/8不支持trim的属性的解决方案
2014/05/23 Javascript
JS原型、原型链深入理解
2016/02/27 Javascript
javascript表单处理具体实现代码(表单、链接、按钮)
2016/05/07 Javascript
jquery表单插件Autotab使用方法详解
2016/06/24 Javascript
深入理解bootstrap框架之入门准备
2016/10/09 Javascript
javascript 中设置window.location.href跳转无效问题解决办法
2017/02/09 Javascript
ES6新特性一: let和const命令详解
2017/04/20 Javascript
jquery UI实现autocomplete在获取焦点时得到显示列表功能示例
2019/06/04 jQuery
微信小程序进入广告实现代码实例
2019/09/19 Javascript
javascript设计模式 ? 解释器模式原理与用法实例分析
2020/04/17 Javascript
js回到页面指定位置的三种方式
2020/12/17 Javascript
vue 导航守卫和axios拦截器有哪些区别
2020/12/19 Vue.js
Python迭代用法实例教程
2014/09/08 Python
python网络编程实例简析
2014/09/26 Python
python遍历 truple list dictionary的几种方法总结
2016/09/11 Python
Python读取mat文件,并转为csv文件的实例
2018/07/04 Python
python引用(import)某个模块提示没找到对应模块的解决方法
2019/01/19 Python
Python实现查找数据库最接近的数据
2020/06/08 Python
python 实现socket服务端并发的四种方式
2020/12/14 Python
Saks Fifth Avenue澳洲/亚太地区:萨克斯第五大道精品百货店
2019/06/09 全球购物
水果连锁超市创业计划书
2014/01/24 职场文书
学生会竞选演讲稿纪检部
2014/08/25 职场文书
2014年科技工作总结
2014/11/26 职场文书
2014年教师业务工作总结
2014/12/19 职场文书
党员示范岗材料
2014/12/19 职场文书
总经理助理岗位职责
2015/01/31 职场文书
SQL Server中使用表变量和临时表
2022/05/20 SQL Server
Mysql数据库group by原理详解
2022/07/07 MySQL
使用python生成大量数据写入es数据库并查询操作(2)
2022/09/23 Python