如何使用BeautifulSoup打开网页并输出文本文件?

时间:2013-10-02 01:11:24

标签: python python-3.x beautifulsoup

如何使用BeautifulSoup查找包含字母M的yahoo.com中的所有字母并将其输出到txt。文件?

我尝试过以下脚本:

from bs4 import BeautifulSoup
import urllib2

url = "http://www.yahoo.com"     
content = urllib2.urlopen(url).read()

我该如何处理?

1 个答案:

答案 0 :(得分:4)

这是一个相当模糊的问题,所以我要做几个假设才能回答它。具体来说,我假设通过“查找包含字母M的yahoo.com中的所有字母”,您的意思是找到包含字母“M”的所有单词

要执行此操作,您需要通过调用

来解析内容中的html
BeautifulSoup(content)

更多信息on the beautiful soup website

这将返回一个对象,您可以调用方法来提取某些文本。例如

find_all('p')

将提取<p>标记内的所有文本,并返回包含页面上所有段落的列表。这很有用,因为yahoo.com上的大部分内容都在<p>个标签内。现在您已经隔离了您感兴趣的文本,您已准备好搜索包含字母M的单词。向右移动...

为此我会使用正则表达式

\b[A-z]*[mM][A-z]*\b

匹配包含M或m的单词。如果要排除小写,可以将[mM]更改为M。如果您不熟悉正则表达式,可以在gskinner中调整一下。它非常酷,因为如果你将鼠标放在它上面,它就可以解释表达式。

全部放在一起:

soup = BeautifulSoup(content)
#extract paragraphs
paragraphs = soup.find_all('p')
words = []
#iterate through paragraphs and split into individual words
for x in paragraphs:
   words = words + x.getText().split()
#match words with 'm' or 'M'
regex = re.compile(r'\b[A-z]*[mM][A-z]*\b')
words_with_m = filter(lambda i: regex.search(i), words)
我跑的时候给了我这个

  

做得更小更多百万AM承认艾布拉姆斯声称很多   他更多娱乐衡量收入就业环境更多   大多数家庭男子声称'大使馆'女人回家时间被删除...更多'气候   男人家庭从家里更多来自金钱分钟可能很多黄金时段   金钱分钟可能很多黄金时段

你可以看到你需要更多的工作来过滤出符号。这只是使用另一个正则表达式并不太难。

filtered = [re.sub(r'\W','',x) for x in words_with_m]

这将删除所有特殊字符。并返回

  AM承认艾布拉姆斯声称很多,所以小得多   他更多娱乐衡量收入就业环境更多   大多数玛格丽特着名女性时间歌曲更多气候男人家庭来自   主页更多来自Money Minute可能会有很多Primetime Time Money Minute   许多黄金时段

将文件打开为可写并写入

with open('path_to_file/file', 'w') as f:
   for x in filtered:
      f.writelines(x + ' ')

将写出包含m的单词,用空格分隔。

希望这有帮助!将来我会在问一个像这样的开放式问题之前做更多的研究。我们很乐意为您提供帮助,如果您清楚自己想要什么,我们将帮助您。快乐的编码!

相关问题