python3 xpath和requests应用详解
作者:jeikerxiao 发布时间:2022-10-13 18:24:36
标签: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日。
。 来源:华龙网。
。责任编辑:张义凌 。
来源:https://blog.csdn.net/jeikerxiao/article/details/73530529


猜你喜欢
- 2个简单的代码,帮你实现word的导出和word的读取功能一:导出word,word中的内容为代码:from docx import Doc
- 处理页面中的间歇无缝滚动新闻的时候,最常见的方法就是将滚动区内容复制追加一份,然后通过控制和判断滚动块的scrollTop来实现滚动停止效果
- 对大家推荐很好使用的MySql节点系统,像让大家对MySql节点系统有所了解,然后对MySql节点系统全面讲解介绍,希望对大家有用在向大家详
- 刷抖音的时候发现一个老师在用的课堂点名系统。用PyQt5实现了一下同款,导入学生姓名,测试了一下完美运行。操作效果展示:完整源代码块还是放在
- 这是用来快速学习 Python Socket 套接字编程的指南和教程。Python 的 Socket 编程跟 C 语言很像。Python 官
- 目录jiaba库的使用1、jieba库的安装2、统计荷塘月色词频总结jiaba库的使用jieba库是一款优秀的 Python 第三方中文分词
- 目录前言一、首先二、接下来1.对照人脸获取2. 通过算法建立对照模型3.识别前言今天,我们用Python实现简单的人脸识别技术!Python
- 如:http://localhost/newurl/WebForm1.aspx 1.方法document.URL(注意大小写) 结果是:ht
- 自动抢课脚本使用手册@danteking dating from 2021.12.7 and last updating at 2021.1
- 在python中我们可以使用speech模块让计算机进行语音输出,我们需要使用如下代码安装该模块。对于如何在终端中安装python相应模块,
- 不过最近发现这个可视化操作有点点问题,就是当数据条数超过一定数目EMS SQL Manager就挂了,也不知道是否是软件问题……当然该开始我
- 笔者在今天的工作中,遇到了一个需求,那就是如何将Python字符串生成PDF。比如,需要把Python字符串‘这是测试文件'生成为P
- 在数据库应用,我们经常要用到唯一编号,以标识记录。在MySQL中可通过数据列的AUTO_INCREMENT属性来自动生成。MySQL支持多种
- 1.引言甘特图已经拥有 100 多年的历史,这种可视化图表对项目管理非常有用。Henry Gantt 为了分析已经完成的项目创建了甘特图,他
- Python实现GIF动图的提取及合成在开始之前,先来一个动图开头(预览)图片转GIF动图1、准备工作在开始合并前,先明确要转换哪些图片,以
- 图片显示pytorch 载入的数据集是元组tuple 形式,里面包括了数据及标签(train_data,label),其中的train_da
- 一、创建堆heapq有两种方式创建堆, 一种是使用一个空列表,然后使用heapq.heappush()函数把值加入堆中,另外一种就是使用he
- 这两天在整理一些文章,但是文件夹中每个文章没有序号会看起来很乱,所以想着能不能用Python写一个小脚本。于是乎,参考了多方资料,简单写了下
- 1. 目标通过hadoop hive或spark等数据计算框架完成数据清洗后的数据在HDFS上爬虫和机器学习在Python中容易实现在Lin
- Python 是一种代表简单思想的语言,其语法相对简单,很容易上手。不过,如果就此小视 Python 语法的精妙和深邃,那就大错特错了。本文