- c - 在位数组中找到第一个零
- linux - Unix 显示有关匹配两种模式之一的文件的信息
- 正则表达式替换多个文件
- linux - 隐藏来自 xtrace 的命令
我正在尝试使用 BeautifulSoup 从网站上抓取一段演讲。然而,我遇到了问题,因为演讲分为许多不同的段落。我对编程非常陌生,并且无法弄清楚如何处理这个问题。该页面的 HTML 如下所示:
<span class="displaytext">Thank you very much. Mr. Speaker, Vice President Cheney,
Members of Congress, distinguished guests, fellow citizens: As we gather tonight, our Nation is
at war; our economy is in recession; and the civilized world faces unprecedented dangers.
Yet, the state of our Union has never been stronger.
<p>We last met in an hour of shock and suffering. In 4 short months, our Nation has comforted the victims,
begun to rebuild New York and the Pentagon, rallied a great coalition, captured, arrested, and
rid the world of thousands of terrorists, destroyed Afghanistan's terrorist training camps,
saved a people from starvation, and freed a country from brutal oppression.
<p>The American flag flies again over our Embassy in Kabul. Terrorists who once occupied
Afghanistan now occupy cells at Guantanamo Bay. And terrorist leaders who urged followers to
sacrifice their lives are running for their own.
它会像这样继续一段时间,带有多个段落标签。我正在尝试提取范围内的所有文本。
我尝试了几种不同的方法来获取文本,但都未能获得我想要的文本。
我首先尝试的是:
import urllib2,sys
from BeautifulSoup import BeautifulSoup, NavigableString
address = 'http://www.presidency.ucsb.edu/ws/index.php?pid=29644&st=&st1=#axzz1fD98kGZW'
html = urllib2.urlopen(address).read()
soup = BeautifulSoup(html)
thespan = soup.find('span', attrs={'class': 'displaytext'})
print thespan.string
这给了我:
Mr. Speaker, Vice President Cheney, Members of Congress, distinguished guests, fellow citizens: As we gather tonight, our Nation is at war; our economy is in recession; and the civilized world faces unprecedented dangers. Yet, the state of our Union has never been stronger.
这是直到第一个段落标记的文本部分。然后我尝试了:
import urllib2,sys
from BeautifulSoup import BeautifulSoup, NavigableString
address = 'http://www.presidency.ucsb.edu/ws/index.php?pid=29644&st=&st1=#axzz1fD98kGZW'
html = urllib2.urlopen(address).read()
soup = BeautifulSoup(html)
thespan = soup.find('span', attrs={'class': 'displaytext'})
for section in thespan:
paragraph = section.findNext('p')
if paragraph and paragraph.string:
print '>', paragraph.string
else:
print '>', section.parent.next.next.strip()
这给了我第一个段落标签和第二个段落标签之间的文本。所以,我正在寻找一种方法来获取整个文本,而不仅仅是部分。
最佳答案
import urllib2,sys
from BeautifulSoup import BeautifulSoup
address = 'http://www.presidency.ucsb.edu/ws/index.php?pid=29644&st=&st1=#axzz1fD98kGZW'
soup = BeautifulSoup(urllib2.urlopen(address).read())
span = soup.find("span", {"class":"displaytext"}) # span.string gives you the first bit
paras = [x.contents[0] for x in span.findAllNext("p")] # this gives you the rest
# use .contents[0] instead of .string to deal with last para that's not well formed
print "%s\n\n%s" % (span.string, "\n\n".join(paras))
正如评论中所指出的,如果 <p>
标签包含更多嵌套标签。这可以使用以下方法处理:
paras = ["".join(x.findAll(text=True)) for x in span.findAllNext("p")]
但是,这对最后一个 <p>
不太适用没有结束标签。一个棘手的解决方法是区别对待。例如:
import urllib2,sys
from BeautifulSoup import BeautifulSoup
address = 'http://www.presidency.ucsb.edu/ws/index.php?pid=29644&st=&st1=#axzz1fD98kGZW'
soup = BeautifulSoup(urllib2.urlopen(address).read())
span = soup.find("span", {"class":"displaytext"})
paras = [x for x in span.findAllNext("p")]
start = span.string
middle = "\n\n".join(["".join(x.findAll(text=True)) for x in paras[:-1]])
last = paras[-1].contents[0]
print "%s\n\n%s\n\n%s" % (start, middle, last)
关于python - 用 BeautifulSoup 和多个段落进行抓取,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8331579/
我的网页上显示了一份简历。其中包含部分(段落),例如教育、经验、项目等,这里是客户 想要通过在网页的段落(节)上拖动鼠标来移动页面上的这些节。我怎样才能实现这个功能。我正在使用 ruby on R
我有一个特定大小的 div,它是图像和两个段落。 都设置了向左浮动 div { width: 400px; height: 400px; } img { float: left; wi
我想完美对齐一段,使整个段落位于页面中央,但左右两边完美对齐。这是一个完美对齐的段落的图片示例: 该段落看起来像是在某种盒子中,左右两边完全笔直。我如何在 css 或 html 中执行此操作? 最佳答
我的 div 中有多个带有段落的项目,我想将它们 chop 为 2 行。我尝试使用高度进行 chop ,但结果会导致单词被 chop 。我无法使用字符,因为在某些情况下单词很长并且会被推到新行。 我正
有没有办法通过 .Net 框架(或有人写过类似的东西)在传递字符串和字典对象时获取匹配数组? 首先是一些背景 我需要 我有运动队的 csv 文件,我将其加载到字典对象中,例如... Team, Var
我需要创建一个程序来计算文本文件中字符的频率以及段落、单词和句子的数量。 我有一个问题,当我的程序输出字母的频率时,程序会为字母表中的每个字母输出多个输出。 输出应该是这样的: 如果输入是“hello
我的 Swing 应用程序中有一个 JTextPane,其上方有一个 JSlider。当我拖动 slider 时,我希望当前具有插入符号的 JTextPane 段落减少/增加其宽度(并相应地调整高度)
有没有办法通过 .Net 框架(或有人写过类似的东西)在传递字符串和字典对象时获取匹配数组? 首先是一些背景 我需要 我有运动队的 csv 文件,我将其加载到字典对象中,例如... Team, Var
假设我有一个文本句子: $body = 'the quick brown fox jumps over the lazy dog'; 我想将该句子放入“关键字”的散列中,但我想允许多单词关键字;我有以
我尝试编写一个服务器-客户端程序。我可以发送协议(protocol)文本并正确获取文本。但是当我尝试解析文本时,我遇到了 Matcher 类的问题。因为它只匹配第一行。那么我怎样才能找到正确的字符串并
由于 WordPress 在所有内容上都添加了段落标签,因此我需要在某些条件下删除段落标签。在这种情况下,我希望它们从图像中消失。我让那部分工作了: $(".scroller img").un
我需要匹配包含三个大括号之间的文本的完整 HTML 段落。 这是我输入的 HTML: {{{Lorem ipsum dolor sit amet. Ut enim ad minim veniam. D
我正在尝试查找大段落(超过一定数量的字符)并将其包装到一个范围内。目前我正在这样做: output.replace(/(\n{2}|^)([^\n{2}]{500,})(\n{2}|$)/mg, '$
所以我有这个模式,它应该提供不同的描述性段落,具体取决于用户从下拉列表中做出的选择。目前它只始终显示所有段落。我希望它在选择“公共(public)”时显示“隐藏”,在选择“内部”时显示“隐藏2”。等等
段落?
JSFiddle Link 我正在使用的 JSFiddle 似乎正是我的元素所需要的。但是,我将如何更改此当前代码以确保每个分段的段落包含相同数量的字符并且所有段落的宽度相同? 任何帮助将不胜感激,尤
我希望我所有的 p 标签继承正文的字体大小——如果我没有在它们上声明字体大小或将它们嵌套在带有字体的父项中,它们会自动执行——尺寸声明。 但是我应该在 CSS 中的 p 中添加 font-size:
警告框作为回显?
Achtung! This alert box indicates a dangerous or potentially negative action.× 所以我创建了自己的警告框,但问
有什么方法可以使用 python-docx 访问和操作文本框中现有 docx 文档中的文本? 我试图通过迭代在文档的所有段落中找到关键字: doc = Document('test.docx') fo
这是在亚马逊电话采访中被问到的——“你能写一个程序(用你喜欢的语言 C/C++/等)在一个大的字符串缓冲区中找到一个给定的词吗?即数字出现次数“ 我仍在寻找我应该给面试官的完美答案。我试着写一个线性搜
当我使用这段代码时,我可以用文本制作图像,但在一行中, function writetext($image_path,$imgdestpath,$x,$y,$angle,$text,$font,$fo
我是一名优秀的程序员,十分优秀!