2016-12-14 19 views
-2

私は、ウィキペディアのサブカテゴリを正常に取得するために、bs4を使ってPython 3でプログラムを作成しました。今、私は結果をプリントとして見ることができますが、ファイルに結果を書き込むことができません。ファイルを自分のプリントとして書き込むには?

from bs4 import BeautifulSoup 
import requests 
import csv 

url = 'https://en.wikipedia.org/wiki/Category:proprietary software' 
content = requests.get(url).content 
soup = BeautifulSoup(content,'lxml') 
noOFsubcategories = soup.find('p') 
print('------------------------------------------------------------------') 
print(noOFsubcategories.text+'------------------------------------------------------------------') 
tag = soup.find('div', {'class' : 'mw-category'}) 
links = tag.findAll('a') 
#print(links) 

counter = 1 
for link in links: 
    print (str(counter) + " " + link.text) 
    counter = counter + 1 

with open('subcategories.csv', 'a') as f: 
    f.write(links) 
+0

この問題について、より正確にお答えください。何が起こるのですか?代わりにあなたは何を期待しましたか? – jonrsharpe

+0

上記のコードをpython3で実行すると、出力ファイルは空です。だから、私は上記の質問を投稿しました。 –

+0

私は以下の答えで問題を解決し、学習者として情報を得ました。私の英語には申し訳ありません。私は自分の言語を除いてタイプすることは決してない。 –

答えて

2

ほんの少しの変化、ループの下に書き置き、各ループが出

counter = 1 
for link in links: 
    print (str(counter) + " " + link.text) 
    counter = counter + 1 
    with open('subcategories.csv', 'a') as f: 
     f.write(link['href'].split(':')[1]+'\n') 

をファイルへのリンク書きます:

/wiki/Category:Formerly_proprietary_software 
/wiki/Category:Freeware 
/wiki/Category:Oracle_software 
/wiki/Category:Proprietary_cross-platform_software 
/wiki/Category:Proprietary_database_management_systems 
/wiki/Category:Proprietary_operating_systems 
/wiki/Category:Proprietary_version_control_systems 
/wiki/Category:Proprietary_wiki_software 
/wiki/Category:Shareware 
/wiki/Category:VMware 
/wiki/Category:Warez 

よりよい:

# do not need to open file in each loop, just put it above loop 
counter = 1 
with open('subcategories.csv', 'a') as f: 
    for link in links: 
     print (str(counter) + " " + link.text) 
     counter = counter + 1 
     f.write(link['href']+'\n') 
+0

"/ wiki/Category:"を除いて、上記をどうやって得るか? –

+0

私のコードを更新 –

+0

うわー!どのように簡単です!私はこの方法でデータを削除していました。 filedata = filedata.replace( '/ wiki/wiki/Category:'、 '')本当にお兄さんありがとう! –

0

まず、インデックスとリンクテキストでリストのリストを初期化して、csvファイルへの書き込みにcsv.writerを使用しています。以下enumerate()の使用注意:

links = [[index, a.get_text()] for index, a in enumerate(tag.find_all('a'), start=1)] 

with open('subcategories.csv', 'a') as f: 
    writer = csv.writer(f) 
    writer.writerows(links) 

をそして、あなたは、単一のCSS selectorを使用することによって、サブカテゴリを見つけている方法を改善することができます

soup.select("div.mw-category a") 

私は「完全なコード実行中:

import csv 

from bs4 import BeautifulSoup 
import requests 


url = 'https://en.wikipedia.org/wiki/Category:proprietary software' 
content = requests.get(url).content 
soup = BeautifulSoup(content, 'lxml') 
noOFsubcategories = soup.find('p') 

tag = soup.find('div', {'class': 'mw-category'}) 

links = [[index, a.get_text()] for index, a in enumerate(tag.find_all('a'), start=1)] 

with open('subcategories.csv', 'a') as f: 
    writer = csv.writer(f) 
    writer.writerows(links) 

subcategories.csvの内容は次のようになり、このコードを実行した後:

1,Formerly free software 
2,Formerly proprietary software 
3,Freeware 
4,Oracle software 
5,Proprietary cross-platform software 
6,Proprietary database management systems 
7,Proprietary operating systems 
8,Proprietary version control systems 
9,Proprietary wiki software 
10,Shareware 
11,VMware 
12,Warez 
+0

ですが、出力ファイルの最初の行は次のとおりです。 "F、o、r、m、e、r、l、y、f、r、e、e、s、o、f、t、w、a、r、e" –

+0

@ info-farmer 'writerows()'を使ったことは確かですか? – alecxe

+0

@ info-farmer私は実行している完全なコードを更新しました。希望が役立ちます。 – alecxe

関連する問題