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 相关文章推荐
在Django框架中伪造捕捉到的URLconf值的方法
Jul 18 Python
学习python之编写简单乘法口诀表实现代码
Feb 27 Python
python读取csv文件并把文件放入一个list中的实例讲解
Apr 27 Python
python制作抖音代码舞
Apr 07 Python
Python第三方库face_recognition在windows上的安装过程
May 03 Python
Python 3.8中实现functools.cached_property功能
May 29 Python
python接口自动化如何封装获取常量的类
Dec 24 Python
Python模块相关知识点小结
Mar 09 Python
opencv python 图片读取与显示图片窗口未响应问题的解决
Apr 24 Python
python 负数取模运算实例
Jun 03 Python
scrapy处理python爬虫调度详解
Nov 23 Python
浅谈Python xlwings 读取Excel文件的正确姿势
Feb 26 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
编写漂亮的代码 - 将后台程序与前端程序分开
2008/04/23 PHP
细谈php中SQL注入攻击与XSS攻击
2012/06/10 PHP
PHP通过插入mysql数据来实现多机互锁实例
2014/11/05 PHP
smarty模板引擎基础知识入门
2015/03/30 PHP
PHP Echo字符串的连接格式
2016/03/07 PHP
JavaScript中this关键字使用方法详解
2007/03/08 Javascript
文本链接逐个出现的js脚本
2007/12/12 Javascript
js escape,unescape解决中文乱码问题的方法
2010/05/26 Javascript
Javascript实现仿WebQQ界面的“浮云”兼容 IE7以上版本及FF
2011/04/27 Javascript
Node.js(安装,启动,测试)
2014/06/09 Javascript
javascript实现根据3原色制作颜色选择器的方法
2015/07/17 Javascript
JavaScript 常见安全漏洞和自动化检测技术
2015/08/21 Javascript
javascript的列表切换【实现代码】
2016/05/03 Javascript
Jquery Easyui菜单组件Menu使用详解(15)
2016/12/18 Javascript
详解Node.js模板引擎Jade入门
2018/01/19 Javascript
AngularJS动态添加数据并删除的实例
2018/02/27 Javascript
详解Vue2.0组件的继承与扩展
2018/11/23 Javascript
jQuery实现动态添加和删除input框实例代码
2019/03/26 jQuery
微信小程序template模板与component组件的区别和使用详解
2019/05/22 Javascript
Nodejs中使用puppeteer控制浏览器中视频播放功能
2019/08/26 NodeJs
基于Vue中使用节流Lodash throttle详解
2019/10/30 Javascript
解决vue+router路由跳转不起作用的一项原因
2020/07/19 Javascript
解决vue使用vant下拉框van-dropdown-item 绑定title值不变问题
2020/08/05 Javascript
[48:20]OpTic vs Serenity 2018国际邀请赛小组赛BO2 第二场 8.18
2018/08/19 DOTA
[02:11]完美世界DOTA2联赛10月28日赛事精彩集锦:来吧展示实力强劲
2020/10/29 DOTA
python使用calendar输出指定年份全年日历的方法
2015/04/04 Python
解决Django的request.POST获取不到内容的问题
2018/05/28 Python
python简单实现插入排序实例代码
2020/12/16 Python
canvas环形倒计时组件的示例代码
2018/06/14 HTML / CSS
中国京东和泰国中央集团合资的网站:JD CENTRAL
2020/08/22 全球购物
小学生演讲稿
2014/01/12 职场文书
房产继承公证书
2014/04/09 职场文书
《海伦?凯勒》教学反思
2014/04/17 职场文书
机关干部三严三实心得体会
2014/10/13 职场文书
为什么说餐饮很难做,是因为你不了解这些新规则
2019/08/20 职场文书
go类型转换及与C的类型转换方式
2021/05/05 Golang