如何使用BeautifulSoup查找包含字母M的yahoo.com中的所有字母并将其输出到txt。文件?
我尝试过以下脚本:
from bs4 import BeautifulSoup
import urllib2
url = "http://www.yahoo.com"
content = urllib2.urlopen(url).read()
我该如何处理?
答案 0 :(得分:4)
这是一个相当模糊的问题,所以我要做几个假设才能回答它。具体来说,我假设通过“查找包含字母M的yahoo.com中的所有字母”,您的意思是找到包含字母“M”的所有单词。
要执行此操作,您需要通过调用
来解析内容中的htmlBeautifulSoup(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的单词,用空格分隔。
希望这有帮助!将来我会在问一个像这样的开放式问题之前做更多的研究。我们很乐意为您提供帮助,如果您清楚自己想要什么,我们将帮助您。快乐的编码!