博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
python-70:使用BS4获取正文内容
阅读量:5835 次
发布时间:2019-06-18

本文共 2414 字,大约阅读时间需要 8 分钟。

hot3.png

上一小节我们学习了find 和 find_all 函数,我们也知道find_all 函数返回的结果是一个列表,然而我们并不想要列表,列表不利于我们查看,所以我们只能使用find,find会将匹配的结果直接返回,那么find()函数有这么多参数,name,keyword,attrs,text,recursive,我们需要使用哪个参数呢?

我们来看看网页源码

 
           
              

Beautiful Soup 4.2.0 文档

Beautiful Soup 是一个可以从HTML或XML文件中提取数据的Python库.它能够通过你喜欢的转换器实现惯用的文档导航,查找,修改文档的方式.Beautiful Soup会帮你节省数小时甚至数天的工作时间.

这篇文档介绍了BeautifulSoup4中所有主要特性,并切有小例子.让我来向你展示它适合做什么,如何工作,怎样使用,如何达到你想要的效果,和处理异常情况.

文档中出现的例子在Python2.7和Python3.2中的执行结果相同

你可能在寻找 

Beautiful Soup3 的文档,Beautiful Soup 3 目前已经停止开发,我们推荐在现在的项目中使用Beautiful Soup 4, 
移植到BS4

寻求帮助

如果你有关于BeautifulSoup的问题,可以发送邮件到 

讨论组 .如果你的问题包含了一段需要转换的HTML代码,那么确保你提的问题描述中附带这段HTML文档的 
代码诊断 
[1]

这是网页源码中正文开始的部分,我们看到,有<h1>标签,这是标题,还有<p>标签,这是段落,里面则是文章的内容,当然,这只是其中很小很小的部分,我们想要获取这些内容,需要传入find函数的哪个参数呢?我们来一个一个的分析,顺便加深印象

  1. name :name参数是针对tag进行操作的,我们想要获取全部的正文内容的话,就要分别对<h1>,<p>,<li>等标签进行获取,当然肯定还会有其他的标签,find('h1')是获取所有<h1>标签的内容,其他的也一样,所以我们在输出的时候还需要对结果进行整合,这个相当麻烦,根本分不清哪个标题对应那段文字,所以这个 pass

  2. keyword:keyword据说是可以按tag标签的属性进行查找,那我这里可以找到整个正文内容包含在哪个代码块中,可能是class="xxxbody" 或者 id="xxx"等等,我可以使用这个参数将整个正文所在的代码块抠出来,这样章节的顺序是不会变化的,这个方法好像可行,但是我们再看看还有没有更好的方法

  3. attrs:attrs是针对于匹配一些与关键字相同的字符串,比如import,class等等,这里应该是用不到的

  4. text:啊,这个根本是想都不用想的好嘛,这个是根据text的字符串来寻找相对应的内容,我们要传一个字符串进去,然后find函数会寻找含有这个字符串的句子,这完全跟我们要实现的功能不搭调的

  5. recursive:这个参数设置是否遍历某个tag的所有子孙节点,这个好像可以使用,我们只要传入一个tag就可以了嘛,但前提是,你的这个tag必须是唯一的,我们现在这个网页源码中,正文内容的父节点的tag是<div>,可是,源码中还有很多的<div>,我们将这个tag传进去的话程序并不知道我们要寻找的是哪个<div>里面的子孙节点,程序运行不能达到我们想要的效果

所以没办法了,只能使用第二个参数了,现在的问题是,应该传入什么keyword

通过对源码的分析,我觉得这句代码很有可能

这个articleBody 的英文看起来好像是文章主题的意思,而且,一般规范的程序为了便于后面的修改和维护,它的函数名或者是关键字都会以相关功能的英文名字来命名,这是阅读程序的一个小技巧,我觉得这个articleBody有可能就是我们要的,所以将代码整理一下,看看结果是什么吧

#!/usr/bin/env python# -*- coding:UTF-8 -*-__author__ = '217小月月坑''''获取文章主体'''import urllib2from bs4 import BeautifulSoupurl = 'http://beautifulsoup.readthedocs.org/zh_CN/latest/#'request = urllib2.Request(url)response = urllib2.urlopen(request)contents = response.read()soup = BeautifulSoup(contents)# 传入keyword参数result = soup.find(itemprop="articleBody")print result

输出结果

085459_MikM_2429887.png

好了,结果证明正文部分的代码已经被抠出来了,但是,我们不能就这样将结果直接写入文件,我们还要从这段源码中获取正文的内容,也就是那些文字什么的,那好,我们就来看一下应该使用什么方法来获取正文的内容

转载于:https://my.oschina.net/u/2429887/blog/596550

你可能感兴趣的文章
爬虫去重(只是讲了去重的策略,没有具体讲实现过程,反正就是云里雾里)...
查看>>
react中将px转化为rem或者vw
查看>>
8816
查看>>
avcodec_open2()分析
查看>>
何如获取单选框中某一个选中的值
查看>>
paip.输入法编程----删除双字词简拼
查看>>
tcp状态
查看>>
QQ悬浮返回顶部
查看>>
MySQL建表语句的一些特殊字段
查看>>
DeDe调用指定栏目ID下的文章
查看>>
《Unix环境高级编程》读书笔记 第8章-进程控制
查看>>
腾讯前端二面题目详解
查看>>
mascara-1
查看>>
IBM Cloud Speech to Text 语音识别
查看>>
Jquery Form表单取值
查看>>
php分页
查看>>
Python version 2.7 required, which was not found in the registry
查看>>
Android API level 与version对应关系
查看>>
Team Name
查看>>
String类
查看>>