2014-11-18 2 views
1

Мне нужно сохранить результаты синтаксического анализа в текстовом файле.Преобразование кортежа в строку после разбора html-файла

import urllib 
from bs4 import BeautifulSoup 
import urlparse 

path = 'A html file saved on desktop' 

f = open(path,"r") 
if f.mode == 'r':  
    contents = f.read() 

soup = BeautifulSoup(contents) 
search = soup.findAll('div',attrs={'class':'mf_oH mf_nobr mf_pRel'}) 
searchtext = str(search) 
soup1 = BeautifulSoup(searchtext) 

urls = [] 
for tag in soup1.findAll('a', href = True): 
    raw_url = tag['href'][:-7] 
    url = urlparse.urlparse(raw_url) 
    urls.append(url) 
    print url.path 

with open("1.txt", "w+") as outfile: 
    for item in urls: 
     outfile.write(item + "\n") 

Однако, я получаю это: Traceback (самый последний вызов последнего): Файл "c.py", строка 26, в outfile.write (п + "\ п") TypeError: может только привязать кортеж (а не «str») к кортежу.

Как преобразовать кортеж в строку и сохранить ее в текстовом файле? Благодарю.

+0

Попробуйте 'print (item)', и вы увидите, что это не строка, а кортеж. Вы можете добавлять только строки. –

ответ

1

Вопрос заключается в том, что каждый item в списке под названием urls является tuple. Кортеж является контейнером для других предметов и также неизменен. Когда вы делаете item + "\n", вы просите переводчика конкатенировать кортеж и строку, которая невозможна.

То, что вы хотите сделать вместо этого проверить кортеж и выбрать одно из полей в каждом элементе, чтобы написать в выходной файл:

with open("1.txt", "w+") as outfile: 
    for item in urls: 
     outfile.write(str(item[1]) + "\n") 

Здесь первое поле элемента кортежа сначала преобразуется в строку (если это что-то другое), а затем объединяется с «\ n». Если вы хотите написать кортеж как есть, вы должны написать это:

outfile.write(str(item) + "\n") 

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

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