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网络爬虫功能的基本写法
Jan 28 Python
python的concat等多种用法详解
Nov 28 Python
Django框架登录加上验证码校验实现验证功能示例
May 23 Python
python 机器学习之支持向量机非线性回归SVR模型
Jun 26 Python
pandas 空数据处理方法详解
Nov 02 Python
wxPython实现文本框基础组件
Nov 18 Python
Python二维数组实现求出3*3矩阵对角线元素的和示例
Nov 29 Python
PyCharm取消波浪线、下划线和中划线的实现
Mar 03 Python
python爬虫开发之selenium模块详细使用方法与实例全解
Mar 09 Python
解决python调用自己文件函数/执行函数找不到包问题
Jun 01 Python
python使用tkinter实现透明窗体上绘制随机出现的小球(实例代码)
May 17 Python
OpenCV-Python实现人脸美白算法的实例
Jun 11 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
DC这些乐高系列动画电影你看过几部?
2020/04/09 欧美动漫
解决php的“It is not safe to rely on the system’s timezone settings”问题
2015/10/08 PHP
详解Yii2 之 生成 URL 的方法
2017/06/16 PHP
javascript 跨浏览器开发经验总结(五) js 事件
2010/05/19 Javascript
javascript SpiderMonkey中的函数序列化如何进行
2012/12/05 Javascript
jQuery制作可自定义大小的拼图游戏
2015/03/30 Javascript
js实现延迟加载的方法
2015/06/24 Javascript
Node.js模块封装及使用方法
2016/03/06 Javascript
Angular.js跨controller实现参数传递的两种方法
2017/02/20 Javascript
微信小程序 转发功能的实现
2017/08/04 Javascript
Angular2管道Pipe及自定义管道格式数据用法实例分析
2017/11/29 Javascript
web前端vue实现插值文本和输出原始html
2018/01/19 Javascript
在vscode里使用.vue代码模板的方法
2018/04/28 Javascript
解决vue的touchStart事件及click事件冲突问题
2020/07/21 Javascript
Ant Design的Table组件去除
2020/10/24 Javascript
Vue——解决报错 Computed property &quot;****&quot; was assigned to but it has no setter.
2020/12/19 Vue.js
恢复百度云盘本地误删的文件脚本(简单方法)
2017/10/21 Python
python识别图像并提取文字的实现方法
2019/06/28 Python
基于Python数据分析之pandas统计分析
2020/03/03 Python
Python使用jupyter notebook查看ipynb文件过程解析
2020/06/02 Python
HTML5 canvas基本绘图之填充样式实现
2016/06/27 HTML / CSS
碧欧泉美国官网:Biotherm美国
2016/08/31 全球购物
Bally澳大利亚官网:瑞士奢侈品牌
2018/11/01 全球购物
班组长的岗位职责
2013/12/09 职场文书
医药销售求职信范文
2014/02/01 职场文书
保险公司早会主持词
2014/03/22 职场文书
请假条标准格式规范
2014/04/10 职场文书
领导干部作风建设工作总结
2014/10/23 职场文书
2014年民警工作总结
2014/11/25 职场文书
新员工辞职信范文
2015/05/12 职场文书
师范生见习自我总结
2015/06/23 职场文书
大学升旗仪式主持词
2015/07/04 职场文书
公开致歉信
2019/06/24 职场文书
CSS 实现多彩、智能的阴影效果
2021/05/12 HTML / CSS
Python中的datetime包与time包包和模块详情
2022/02/28 Python
千万级用户系统SQL调优实战分享
2022/03/03 MySQL