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 urlopen 使用小示例
Sep 06 Python
python中的五种异常处理机制介绍
Sep 02 Python
pygame游戏之旅 载入小车图片、更新窗口
Nov 20 Python
python3实现多线程聊天室
Dec 12 Python
ubuntu 16.04下python版本切换的方法
Jun 14 Python
Django model select的多种用法详解
Jul 16 Python
Django使用Jinja2模板引擎的示例代码
Aug 09 Python
Tensorflow 多线程与多进程数据加载实例
Feb 05 Python
Python bytes string相互转换过程解析
Mar 05 Python
python实现ftp文件传输功能
Mar 20 Python
python使用梯度下降算法实现一个多线性回归
Mar 24 Python
Window10上Tensorflow的安装(CPU和GPU版本)
Dec 15 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 删除记录同时删除图片文件的实现代码
2010/05/12 PHP
如何使用PHP获取指定日期所在月的开始日期与结束日期
2013/08/01 PHP
让codeigniter与swfupload整合的最佳解决方案
2014/06/12 PHP
PHP的反射类ReflectionClass、ReflectionMethod使用实例
2014/08/05 PHP
PHP实现无限极分类图文教程
2014/11/25 PHP
两款万能的php分页类
2015/11/12 PHP
js DOM模型操作
2009/12/28 Javascript
JavaScript CSS修改学习第六章 拖拽
2010/02/19 Javascript
跟着JQuery API学Jquery 之三 筛选
2010/04/09 Javascript
javascript控制swfObject应用介绍
2012/11/29 Javascript
初始Nodejs
2014/11/08 NodeJs
基于jquery和svg实现超炫酷的动画特效
2014/12/09 Javascript
js获取元素的外链样式的简单实现方法
2016/06/06 Javascript
异步加载JS、CSS代码(推荐)
2016/06/15 Javascript
jQuery UI结合Ajax创建可定制的Web界面
2016/06/22 Javascript
js图片延迟加载(Lazyload)三种实现方式
2017/03/01 Javascript
JS操作input标签属性checkbox全选的实现代码
2017/03/02 Javascript
socket.io与pm2(cluster)集群搭配的解决方案
2017/06/02 Javascript
jQuery实现QQ空间汉字转拼音功能示例
2017/07/10 jQuery
浅谈react-native热更新react-native-pushy集成遇到的问题
2017/09/30 Javascript
解决layui上传文件提示上传异常,实际文件已经上传成功的问题
2018/08/19 Javascript
基于jquery实现彩色投票进度条代码解析
2020/08/26 jQuery
js动态添加带圆圈序号列表的实例代码
2021/02/18 Javascript
python下MySQLdb用法实例分析
2015/06/08 Python
python列表的常用操作方法小结
2016/05/21 Python
python生成多个只含0,1元素的随机数组或列表的实例
2018/11/12 Python
python利用wx实现界面按钮和按钮监听和字体改变的方法
2019/07/17 Python
python使用正则来处理各种匹配问题
2019/12/22 Python
python中spy++的使用超详细教程
2021/01/29 Python
介绍一下Java中的Class类
2015/04/10 面试题
外联部演讲稿
2014/05/24 职场文书
整改报告格式
2014/11/06 职场文书
公司会议开幕词
2015/01/29 职场文书
会计人员岗位职责
2015/02/03 职场文书
python中的3种定义类方法
2021/11/27 Python
拙作再改《我的收音机情缘》
2022/04/05 无线电