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

Python 如何使用BeautifulSoup打开网页并输出文本文件?,python,python-3.x,beautifulsoup,Python,Python 3.x,Beautifulsoup,如何使用BeautifulSoup查找yahoo.com中包含字母M的所有字母,并将其输出到txt。档案 我尝试了以下脚本: from bs4 import BeautifulSoup import urllib2 url = "http://www.yahoo.com" content = urllib2.urlopen(url).read() 如何继续?这是一个相当模糊的问题,因此我将做出一些假设来回答它。具体来说,我假设“查找yahoo.com中包含字母M的所有字母”是指查找

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

我尝试了以下脚本:

from bs4 import BeautifulSoup
import urllib2

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

如何继续?

这是一个相当模糊的问题,因此我将做出一些假设来回答它。具体来说,我假设“查找yahoo.com中包含字母M的所有字母”是指查找包含字母“M”的所有单词

为此,您需要通过调用

BeautifulSoup(content)
更多信息

这将返回一个对象,您可以调用该对象上的方法来提取特定文本。比如说

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

为此,我将使用正则表达式

\b[A-z]*[mM][A-z]*\b
匹配包含M或M的单词。如果要排除小写,可以将
[mM]
更改为
M
。如果您对正则表达式不熟悉,可以在中调整此表达式。这很酷,因为如果你把鼠标放在它上面,它会用解释来分解表达式

总而言之:

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)
我跑的时候给我的

艾布拉姆斯承认,大多数人都承认自己赚了很多钱 他越是娱乐,越是量入为出的就业环境 大多数家庭男人声称“大使馆”女人回家的时间被移走了…更多的“气候” 男人从家里多挣钱一分钟可能很多黄金时间 金钱一分钟可能有很多黄金时段

正如您所看到的,您需要做更多的工作来过滤掉符号。这并不难,只需使用另一个正则表达式即可

filtered = [re.sub(r'\W','',x) for x in words_with_m]
这将删除所有特殊字符。返回

使小得多的大厦小得多的AM承认艾布拉姆斯声称很多 他越是娱乐,越是量入为出的就业环境 大多数玛格丽特著名的女性时间赞美诗更多的是来自气候男人家庭 家里更多的钱分可能很多黄金时段的钱分可能很多 很多黄金时间

以可写方式打开文件并对其进行写入

with open('path_to_file/file', 'w') as f:
   for x in filtered:
      f.writelines(x + ' ')
将写出包含m的单词,用空格隔开


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

“所有包含字母M的信件”?信件,比如,你通过邮件发送的东西?请清楚地回答这个问题。