这是一个相当模糊的问题,所以我将做出几个假设来回答它。具体来说,我假设“查找来自 yahoo.com 的所有包含字母 M 的字母”是指查找包含字母“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 承认艾布拉姆斯声称很多
他 更多 娱乐 衡量 收入 就业 环境 更多
大多数在家的男人声称“大使馆”女人在家的时间被取消了……更多“气候
来自家中的男人家庭
Money Minute 可能有很多黄金时段
如您所见,您需要做更多工作才能过滤掉符号。这并不难,只需使用另一个正则表达式即可。
filtered = [re.sub(r'\W','',x) for x in words_with_m]
这将删除所有特殊字符。并返回
做小得多的豪宅小得多 AM承认艾布拉姆斯声称很多
他 更多 娱乐 衡量 收入 就业 环境 更多
大多数玛格丽特杰出女性的时间国歌更多气候男人家庭来自
主页 Money Minute may 的更多内容 黄金时段 Money Minute may
许多黄金时段
以可写方式打开文件并写入
with open('path_to_file/file', 'w') as f:
for x in filtered:
f.writelines(x + ' ')
会写出包含m的单词,用空格隔开。
希望这会有所帮助!将来,在提出这样的开放式问题之前,我会做更多的研究。我们很乐意提供帮助,如果您清楚自己想要什么,它将帮助我们帮助您。编码愉快!