-4

BeautifulSoup を使用して、yahoo.com から文字 M を含むすべての文字を検索し、txt に出力するにはどうすればよいですか。ファイル?

以下のスクリプトを試しました。

from bs4 import BeautifulSoup
import urllib2

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

続行するにはどうすればよいですか?

4

1 に答える 1

4

これはかなり漠然とした質問なので、答えるためにいくつかの仮定を立てます。具体的には、「文字 M を含む yahoo.com からのすべての文字を検索する」とは、文字「M」を含むすべての単語を検索することを意味すると想定しています。

これを行うには、次を呼び出してコンテンツ内の html を解析する必要があります。

BeautifulSoup(content)

美しいスープのウェブサイトの詳細。

これは、特定のテキストを抽出するためにメソッドを呼び出すことができるオブジェクトを返します。例えば

find_all('p')

タグ内のすべてのテキストを抽出<p>し、ページ上のすべての段落を含むリストを返します。<p>yahoo.com のほとんどのコンテンツはタグ内にあるため、これは便利です。関心のあるテキストを分離したので、文字 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 はエイブラムスが多くの彼を主張していることを認めています より多くのエンターテイメント 収入の雇用環境を測定する より多くのマーガレット 著名な女性の時間の国歌 より多くの気候 男家からの家族

ファイルを書き込み可能として開き、書き込みを行うには

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

空白で区切られた m を含む単語を書き込みます。

お役に立てれば!将来的には、このような自由回答形式の質問をする前に、もう少し調査を行う予定です。私たちは喜んでお手伝いさせていただきます。あなたが何を望んでいるのかが明確であれば、私たちはあなたを助けるのに役立ちます. ハッピーコーディング!

于 2013-10-02T13:42:37.137 に答える