2016-12-14 3 views
-2

Я написал программу на Python 3 с помощью bs4, чтобы получить подкатегории Wikipedia успешно. Теперь я вижу результаты как распечатку, но я не могу записать результаты в файл.Как написать файл в качестве моей печати?

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/Категория:"? –

+0

Я обновляю свой код –

+0

wow! как просто !! Я использовал для удаления данных этим методом. filedata = filedata.replace ('/ wiki/wiki/Category:', '') Спасибо, брат! –

0

Прежде всего, инициализировать список списков с индексами и текстов ссылок, а затем использовать csv.writer для записи в файл CSV. Обратите внимание на использование 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") 

Полный код I» м:

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 Вы уверены, что используете 'writows()'? – alecxe

+0

@ info-farmer Я обновил полный код, который я выполняю. Надеюсь, это поможет. – alecxe

 Смежные вопросы

  • Нет связанных вопросов^_^