2016-12-03 6 views
-1

<a href='url' title='smth'>NAME</a>との間にあるは、を使わずにhtmlファイルに保存しています(BeautifulSoupまたは別のライブラリだけで初心者のPythonコードは 希望する印刷形式は次のとおりです。。ディスクに保存されているhtmlファイルのURLとその名前をそれぞれ抽出して印刷します - Python

http://..filepath/filename.pdf 
File's Name 
so on... 

私はもっぱらすべてのURLまたはすべての名前を抽出し、印刷することができましたが、私は、次のすべての名前を追加しませんしばらくしてから、タグの直前に含まれていたコードを各URLの下に表示します。コードが乱雑になり、かなりスタックしています。 T帽子のこれまでのコード:

import os 
with open (os.path.expanduser('~/SomeFolder/page.html'),'r') as html: 
    txt = html.read() 
# for urls 
nolp = 0 
urlarrow = [] 
while nolp == 0: 
    pos = txt.find("href") 
    if pos >= 0: 
     txtcount = len(txt) 
     txt = txt[pos:txtcount] 
     pos = txt.find('"') 
     txtcount = len(txt) 
     txt = txt[pos+1:txtcount] 
     pos = txt.find('"') 
     url = txt[0:pos] 
     if url.startswith("http") and url.endswith("pdf"): 
      urlarrow.append(url) 
    else: 
     nolp = 1 
for item in urlarrow: 
    print(item) 

#for names 
almost identical code to the above 

html.close() 

どのように動作させるには?私はそれらを1つの関数またはdefに結びつける必要がありますが、どのようにしたらいいですか? ps。私は以下の答えを掲示しましたが、もっとシンプルでPythonicな解決策があると思います。

答えて

0

これは正しい出力ですが、もっと良い方法があると確信しています。

import os 
with open ('~/SomeFolder/page.html'),'r') as html: 
    txt = html.read() 
    text = txt 
#for urls  
nolp = 0 
urlarrow = [] 
while nolp == 0: 
    pos = txt.find("href") 
    if pos >= 0: 
     txtcount = len(txt) 
     txt = txt[pos:txtcount] 
     pos = txt.find('"') 
     txtcount = len(txt) 
     txt = txt[pos+1:txtcount] 
     pos = txt.find('"') 
     url = txt[0:pos] 
     if url.startswith("http") and url.endswith("pdf"): 
      urlarrow.append(url) 
    else: 
     nolp = 1 

with open (os.path.expanduser('~/SomeFolder/page.html'),'r') as html: 
    text = html.read() 

#for names 
noloop = 0 
namearrow = [] 
while noloop == 0: 
    posB = text.find("title") 
    if posB >= 0: 
     textcount = len(text) 
     text = text[posB:textcount] 
     posB = text.find('"') 
     textcount = len(text) 
     text = text[posB+19:textcount] #because string starts 19 chars after the posB 
     posB = text.find('</') 
     name = text[1:posB] 
     if text[0].startswith('>'): 
      namearrow.append(name) 
    else: 
     noloop = 1 

fullarrow = [] 
for pair in zip(urlarrow, namearrow): 
    for item in pair: 
     fullarrow.append(item) 
for instance in fullarrow: 
    print(instance) 

html.close() 
関連する問題