Python lxml库 提取并保存网页正文部分
有时候, 看见一篇网页, 不知道怎样离线保存。使用浏览器的保存网页功能, 又会保存下许多无用的信息, 如广告等其他部分。
为解决这个问题, 本程序使用requests库获取网页源代码, 使用re模块及lxml库提取内容、CSS样式, 提取网页的正文部分。
目录
- 1.下载页面
- 2.获取文章对应的标签
- 3.提取标题和正文部分
- 4.提取CSS样式
- 5.保存网页
- 6.总结
1.下载页面
使用requests
库的get
方法即可, 注意添加headers
, 否则会爬取不到内容。
requests
库可使用pip安装: pip install requests
。
from requests import get
from lxml.etree import HTML, tostring
import reheaders = {"User-Agent": """Mozilla/5.0 (Windows NT 6.1; Win64; x64) AppleWebKit/537.36 \
(KHTML, like Gecko) Chrome/92.0.4515.131 Safari/537.36"""
}url = input('输入网址: ')
req = get(url,headers=headers)
text=req.content.decode('utf-8')
2.获取文章对应的标签
在网页的正文内容部分上右击 => 检查, 找到<article>
或一个<div>
标签, 该标签的内容就是大多数网页的正文部分。
然后右击, 复制XPath即可。这个XPath很重要。不同的网站, 这个XPath不相同。
3.提取标题和正文部分
提取标题, 需要使用正则表达式。注意: re.S表示点".
"匹配全部字符, 若不用re.S
参数, 会无法提取内容。
提取正文: 首先创建lxml.etree
的HTML()
对象。
该对象的xpath()
方法会返回一个列表, 包含符合这个XPath的所有标签。
然后, 用上一步找到的XPath提取正文部分。
title = re.findall('<title>(.*?)</title>',text,re.S)[0]
tree = HTML(text)div = tree.xpath('//*[@id="ssr-content"]/div[2]/div/div[1]')[0] # 百度的
#div = tree.xpath('//*[@id="mainBox"]/main/div[1]')[0] # C站的
content='<html><head><title>%s</title><body>'%title # 要保存的网页内容
4.提取CSS样式
CSS样式是修饰网页的工具, 可控制网页的排版。这里再次使用开发工具, 找到了包含CSS样式的标签, 并将标签加入content
中。如果不用CSS, 可能会出现网页排版混乱的情况。
但是, 不是保存所有的网页都需要提取CSS样式这个步骤。
css_patt=re.compile('<link rel="stylesheet" href=".*?blog.*?"',re.S)
for css in re.findall(css_patt,text):content+=css+'>'
5.保存网页
content += tostring(div, method='html').decode('utf-8')
content += '</body></html>'# 去除文件名不能包含的特殊字符, 用字符串的translate方法
tbl = str.maketrans('','','\\/:*?"<>|')
filename = '%s.html'%title.translate(tbl)
with open(filename,'w',encoding='utf-8') as f:f.write(content)
6.总结
本程序使用requests库获取网页源代码, 使用re模块及lxml库提取内容、CSS样式。注意要善于使用浏览器的开发工具。
需要注意的是, 提取少数需手动展开的网页时, 爬取的内容会不完整, 只有网页的前半截。
完整源代码: gitcode.net/qfcy_/python/-/tree/master/WEB
Python lxml库 提取并保存网页正文部分相关推荐
- Python lxml库的安装和使用
Python lxml库的安装和使用 lxml 是 Python 的第三方解析库,完全使用 Python 语言编写,它对 Xpath 表达式提供了良好的支持,因此能够了高效地解析 HTML/XML 文 ...
- 21天Python学习——lxml库与Xpath提取网页数据
活动地址:CSDN21天学习挑战赛 一.爬虫提取网页数据的流程图 图源:100天精通Python(爬虫篇)--第45天:lxml库与Xpath提取网页数据_无 羡ღ的博客-CSDN博客_pyt ...
- 21天学习挑战赛——Python爬虫 lxml库与Xpath提取网页数据
目录 1. 爬虫提取网页数据流程图 2. lxml库 2.1 解析HTML网页 3. Xpath 3.1 选取节点 3.2 谓语 3.3 选取未知节点 3.4 选取若干元素 4. Xpath实战 4 ...
- 【Python爬虫学习笔记4】结合Xpath与lxml库解析数据
在之前的学习中了解了如何使用爬虫向目标服务器发送请求并获取响应,而此后便是要对响应进行处理,这里的处理在爬虫中通常指的是数据解析,即将相应内容数据化以方便我们进行有效数据的提取.在此过程中,有许多解析 ...
- python xpath语法-Python爬虫之XPath语法和lxml库的用法
本来打算写的标题是XPath语法,但是想了一下Python中的解析库lxml,使用的是Xpath语法,同样也是效率比较高的解析方法,所以就写成了XPath语法和lxml库的用法 安装 为什么要用这个库 ...
- python xpath语法-Python爬虫基础之XPath语法与lxml库的用法详解
前言 本来打算写的标题是XPath语法,但是想了一下Python中的解析库lxml,使用的是Xpath语法,同样也是效率比较高的解析方法,所以就写成了XPath语法和lxml库的用法 XPath 即为 ...
- Python 中 xpath 语法 与 lxml 库解析 HTML/XML 和 CSS Selector
The lxml.etree Tutorial :https://lxml.de/tutorial.html python3 解析 xml:https://www.cnblogs.com/deadwo ...
- python添加lxml库_Python lxml库简介
lxml是一个Python库,使用它可以轻松处理XML和HTML文件,还可以用于web爬取.市面上有很多现成的XML解析器,但是为了获得更好的结果,开发人员有时更愿意编写自己的XML和HTML解析器. ...
- Python操作lxml库(基础篇)
活动地址:CSDN21天学习挑战赛 学习的最大理由是想摆脱平庸,早一天就多一份人生的精彩:迟一天就多一天平庸的困扰. 学习日记 目录 目录 学习日记 一.lxml库概述 1.lxml库介绍 2.l ...
最新文章
- vim 成“神“之路 (一)
- android从放弃到精通 第一天 重拾项目开发
- php博客详情页怎么做,简书仿站报告(四):如何制作文章详情页
- JDK14的新特性:Lombok的终结者record
- 设置最大值_变频器用远传压力表控制恒压供水参数设置
- 阿里云开源EasyTransfer:业界首个面向NLP场景深度迁移学习框架
- 2021年北京交通大学925数据结构考研真题回忆版
- abaqus分析用户手册单元卷_ABAQUS与你我的约定
- Hbase 中文参考指南 3.0 校对活动发车了~
- 淘宝电商页面和产品海报设计PSD分层素材模板
- 用c语言编写最大最小值_C语言学习教程,用C语言编写扫雷游戏
- AndroidStudio_安卓原生开发_显示不开的时候设置TextView文字横向滚动---Android原生开发工作笔记142
- vscode背景绿色配置
- ajax改变url参数,js修改URL参数_Javascript/Ajax_网页制作 - www.jscode.cn
- 转:__stack_chk_fail栈检查失败
- 【CSS基础】文字垂直居中
- 教程:如何成为日入斗金NFT数字艺术创作家
- POI最新版本 4.1.2 操作 Excel
- oracle 索引命中条件,Oracle索引命中与扫描规律总结 | 学步园
- WebLogic 10.3.6.0 部署安装问题(简装版)