Python识别html主要文本框过程解析


Posted in Python onFebruary 18, 2020

这篇文章主要介绍了python识别html主要文本框过程解析,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下

在抓取网页的时候只想抓取主要的文本框,例如 csdn 中的主要文本框为下图红色框:

Python识别html主要文本框过程解析

抓取的思想是,利用 bs4 查找所有的 div,用正则筛选出每个 div 里面的中文,找到中文字数最多的 div 就是属于正文的 div 了。定义一个抓取的头部抓取网页内容:

import requests
headers = {
  'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/47.0.2526.106 Safari/537.36',
  'Host': 'blog.csdn.net'}
session = requests.session()
 
def getHtmlByRequests(url):
  headers.update(
    dict(Referer=url, Accept="*/*", Connection="keep-alive"))
  htmlContent = session.get(url=url, headers=headers).content
  return htmlContent.decode("utf-8", "ignore")

识别每个 div 中文字的正则:

import re
# 统计中文字数
def countContent(string):
  pattern = re.compile(u'[\u1100-\uFFFD]+?')
  content = pattern.findall(string)
  return content

遍历每一个 div ,利用正则判断里面中文的字数长度,找到长度最长的 div :

# 分析页面信息
def analyzeHtml(html):
  # 初始化网页
  soup = BeautifulSoup(html, "html.parser")
  part = soup.select('div')
  match = ""
  for paragraph in part:
    content = countContent(str(paragraph))
    if len(content) > len(match):
      match = str(paragraph)
  return match

得到主要的 div 后,提取里面的文字出来:

def main():
  url = "http://blog.csdn.net/"
  html = getHtmlByRequests(url)
  mainContent = analyzeHtml(html)
  soup = BeautifulSoup(mainContent, "html.parser")
  print(soup.select('div')[0].text)

完整的代码如下:

#!/usr/bin/env python
# -*- coding: utf-8 -*-

from bs4 import BeautifulSoup
import requests
import re

headers = {
  'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/47.0.2526.106 Safari/537.36',
  'Host': 'blog.csdn.net'}
session = requests.session()


def getHtmlByRequests(url):
  headers.update(
    dict(Referer=url, Accept="*/*", Connection="keep-alive"))
  htmlContent = session.get(url=url, headers=headers).content
  return htmlContent.decode("utf-8", "ignore")

# 统计中文字数
def countContent(string):
  pattern = re.compile(u'[\u1100-\uFFFD]+?')
  content = pattern.findall(string)
  return content

# 分析页面信息
def analyzeHtml(html):
  # 初始化网页
  soup = BeautifulSoup(html, "html.parser")
  part = soup.select('div')
  match = ""
  for paragraph in part:
    content = countContent(str(paragraph))
    if len(content) > len(match):
      match = str(paragraph)
  return match


def main():
  url = "http://blog.csdn.net/"
  html = getHtmlByRequests(url)
  mainContent = analyzeHtml(html)
  soup = BeautifulSoup(mainContent, "html.parser")
  print(soup.select('div')[0].text)


if __name__ == '__main__':
  main()

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持三水点靠木。

Python 相关文章推荐
python smtplib模块发送SSL/TLS安全邮件实例
Apr 08 Python
在Python的Django框架中simple-todo工具的简单使用
May 30 Python
Python聚类算法之凝聚层次聚类实例分析
Nov 20 Python
python版简单工厂模式
Oct 16 Python
解决pycharm运行出错,代码正确结果不显示的问题
Nov 30 Python
python3调用windows dos命令的例子
Aug 14 Python
Python3将数据保存为txt文件的方法
Sep 12 Python
python3 pathlib库Path类方法总结
Dec 26 Python
TensorFlow实现打印每一层的输出
Jan 21 Python
python的reverse函数翻转结果为None的问题
May 11 Python
Python正则表达式高级使用方法汇总
Jun 18 Python
Django操作cookie的实现
May 26 Python
pytorch实现seq2seq时对loss进行mask的方式
Feb 18 #Python
python多项式拟合之np.polyfit 和 np.polyld详解
Feb 18 #Python
tensorflow 分类损失函数使用小记
Feb 18 #Python
python如何把字符串类型list转换成list
Feb 18 #Python
python计算波峰波谷值的方法(极值点)
Feb 18 #Python
Python表达式的优先级详解
Feb 18 #Python
使用Tkinter制作信息提示框
Feb 18 #Python
You might like
如何使用动态共享对象的模式来安装PHP
2006/10/09 PHP
判断PHP数组是否为空的代码
2011/09/08 PHP
php+Ajax处理xml与json格式数据的方法示例
2019/03/04 PHP
php实现微信小程序授权登录功能(实现流程)
2019/11/13 PHP
javascript 主动派发事件总结
2011/08/09 Javascript
js window.print实现打印特定控件或内容
2013/09/16 Javascript
Jquery设置attr的disabled属性控制某行显示或者隐藏
2014/09/25 Javascript
jquery 插件实现多行文本框[textarea]自动高度
2015/03/04 Javascript
avalon js实现仿微博拖动图片排序
2015/08/14 Javascript
Vue.js每天必学之过滤器与自定义过滤器
2016/09/07 Javascript
BootStrap实现手机端轮播图左右滑动事件
2016/10/13 Javascript
JS实现Ajax的方法分析
2016/12/20 Javascript
JSONP跨域请求
2017/03/02 Javascript
BootStrap 获得轮播中的索引和当前活动的焦点对象
2017/05/11 Javascript
使用Node.js实现简易MVC框架的方法
2017/08/07 Javascript
node.js中路由,中间件,ge请求和post请求的参数详解
2017/12/26 Javascript
详解Angular5 服务端渲染实战
2018/01/04 Javascript
vue多层嵌套路由实例分析
2019/03/19 Javascript
小程序如何构建骨架屏
2019/05/29 Javascript
详解简单易懂的 ES6 Iterators 指南和示例
2019/09/24 Javascript
vue实现侧边栏导航效果
2019/10/21 Javascript
Nodejs环境实现socket通信过程解析
2020/07/03 NodeJs
js实现贪吃蛇游戏 canvas绘制地图
2020/09/09 Javascript
[47:03]完美世界DOTA2联赛PWL S3 access vs LBZS 第一场 12.20
2020/12/23 DOTA
Python实现二叉搜索树
2016/02/03 Python
Python使用修饰器执行函数的参数检查功能示例
2017/09/26 Python
有趣的python小程序分享
2017/12/05 Python
Django实战之用户认证(初始配置)
2018/07/16 Python
Python 日志logging模块用法简单示例
2019/10/18 Python
PyQt5 如何让界面和逻辑分离的方法
2020/03/24 Python
Python如何通过百度翻译API实现翻译功能
2020/04/02 Python
用纯css3和html制作泡沫对话框实现代码
2013/03/21 HTML / CSS
CSS3的RGBA中关于整数和百分比值的转换
2015/08/04 HTML / CSS
波兰家具和室内装饰品购物网站:Vivre
2018/04/10 全球购物
产品生产计划书
2014/05/07 职场文书
2015年派出所工作总结
2015/04/24 职场文书