Python 如何使用BeautifulSoup打开网页并输出文本文件?
如何使用BeautifulSoup查找yahoo.com中包含字母M的所有字母,并将其输出到txt。档案 我尝试了以下脚本: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的所有字母”是指查找
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的信件”?信件,比如,你通过邮件发送的东西?请清楚地回答这个问题。