python3 xpath和requests应用详解

根据一个爬取豆瓣电影排名的小应用,来简单使用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

程序运行结果:

补充知识: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应用详解就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持我们。

(0)

相关推荐

  • python 中xpath爬虫实例详解

    案例一: 某套图网站,套图以封面形式展现在页面,需要依次点击套图,点击广告盘链接,最后到达百度网盘展示页面. 这一过程通过爬虫来实现,收集百度网盘地址和提取码,采用xpath爬虫技术 1.首先分析图片列表页,该页按照更新先后顺序暂时套图封面,查看HTML结构.每一组"li"对应一组套图.属性href后面即为套图的内页地址(即广告盘链接页).所以,我们先得获取列表页内所有的内页地址(即广告盘链接页) 代码如下: import requests 倒入requests库 from lxml

  • 关于python中的xpath解析定位

    爬取的网站:http://jbk.39.net/chancegz/ 这里只针对个别属性值: #例如:'别名'下的span标签文本,'发病部位'下的span标签文本以及'挂号科室'下的span标签文本 # def disease(url): text = get_html(url) tree = etree.HTML(text) bm = tree.xpath('//ul[@class="information_ul"]/li/i[text()="别名:"]/foll

  • python-xpath获取html文档的部分内容

    有些时候我在们需要的用正则提取出html中某一个部分的文字内容,如图: 获取dd部分的html文档,我们要通过它的一个属性去确定他的位置才可以拿到他这个部分我们可以看到他的这个属性class='row clearfix ',然后用xpath去获取到这部分: name = tree.xpath("//dd[@class='row clearfix ']") from lxml import html import requests url = 'http://navi.cnki.net/

  • python3 xpath和requests应用详解

    根据一个爬取豆瓣电影排名的小应用,来简单使用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.

  • Python3读取文件的操作详解

    目录 1.引言 2. fileinput 2.1 方法介绍 2.2 默认读取 2.3 处理一个文件 2.4 处理批量文件 2.5 读取与备份 2.5 重定向替换 2.6 进阶 3.总结 1.引言 小鱼:小屌丝, 这段代码为什么要开两个线程? 小屌丝:因为我要读写文件,还要备份文件,所以就开两个线程了. 小鱼:嗯,想法是对的,但是,还有一种简便的方法, 不需要开两个线程就能搞得定的. 小屌丝:额…难道是with open? 小鱼:不是. 小屌丝:那还有啥呢? 我咋想不起来了. 小鱼:嗯,这个方法很

  • Python3 处理JSON的实例详解

    Python3 处理JSON的实例详解 真的好简单,灰常简单 import os, io, sys, re, time, base64, json import webbrowser, urllib.request def main(): "main function" url = "http://m.weather.com.cn/data/101010100.html" stdout=urllib.request.urlopen(url) weatherInfo=

  • 对Python3中的input函数详解

    下面介绍python3中的input函数及其在python2及pyhton3中的不同. python3中的ininput函数,首先利用help(input)函数查看函数信息: 以上信息说明input函数在python中是一个内建函数,其从标准输入中读入一个字符串,并自动忽略换行符. 也就是说所有形式的输入按字符串处理,如果想要得到其他类型的数据进行强制类型转化.默认情况下没有 提示字符串(prompt  string),在给定提示字符串下,会在读入标准输入前标准输出提示字符串.如果遇 文件结束符

  • 对python3新增的byte类型详解

    在python2中字节类型同字符类型区分不大,但是在python3中最重要的特性是对文本和二进制数据做了更加清晰的区分,文本总是Unicode,由字符类型表示,而二进制数据则由byte类型表示,python3不会以任意隐式方式混用字节型和字符型,也因此在python3中不能拼接字符串和字节包(python2中可以,会自动进行转换),也不能在字节包中搜索字符串,也不能将字符串传入参数为字节包的函数. 需要注意的是,在网络数据传输过程中,python2可以通过字符串(string)方式传输,但是py

  • 对Python3 pyc 文件的使用详解

    什么是pyc文件 pyc是一种二进制文件,是由py文件经过编译后,生成的文件,是一种byte code,py文件变成pyc文件后,加载的速度有所提高,而且pyc是一种跨平台的字节码,是由python的虚拟机来执行的,这个是类似于JAVA或者.NET的虚拟机的概念.pyc的内容,是跟python的版本相关的,不同版本编译后的pyc文件是不同的,2.5编译的pyc文件,2.4版本的python是无法执行的. 为什么需要pyc文件 这个需求太明显了,因为py文件是可以直接看到源码的,如果你是开发商业软

  • python3 assert 断言的使用详解 (区别于python2)

    python3 和python以前的版本有点不同 如果你断言的 语句正确 则什么反应都没有 但是如果你出错之后 就会报出 AssertionError 并且错误可以自己填写 格式 : assert+空格+要判断语句+双引号"报错语句" 例子: 出错时候 assert 1>5, "chucuo" 输出值为: --------------------------------------------------------------------------- As

  • Linux安装Python3.8.1的教程详解

    本例以Linux上安装Pyhton3.8版本为例进行说明 1.依赖包安装 yum -y install zlib-devel bzip2-devel openssl-devel ncurses-devel sqlite-devel readline-devel tk-devel gdbm-devel db4-devel libpcap-devel xz-devel libffi-devel 2.下载包: https://www.python.org/ftp/python/3.8.1/ wget

  • Python3的socket使用方法详解

    这篇文章主要介绍了Python3的socket使用方法详解,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下 需要实现两台机器的信息交互,使用 socket 进行调度.其中服务端为: #!/usr/bin/env python # -*- coding: utf-8 -*- import socket # 服务端ip server_address = ('192.168.229.129',10000) # 客户端ip client_address

  • python3基础之集合set详解

    目录 集合set 1.集合定义 2.集合基础操作 固定集合 1.定义 2.作用 基础操作 集合set 1.集合定义 1.由一系列不可重复的不可变类型变量组成的可变映射容器 2.相当于只有键没有值的字典(键则是集合的数据) 2.集合基础操作 1.创建空集合: 集合名 = set() 集合名 = set(可迭代对象) set01 = set() set01 = set("abcd") 2.创建具有默认值集合 集合名 = {1,2,3} 集合名 = set(可迭代对象) set01 = se

随机推荐