2016-07-27 5 views
-2

URLを受け取り、htmlファイルを.htmlファイルにダウンロードするパーサーを作成しようとしています。次に、htmlファイルを介してすべてのリンクを見つけて保存します。私はそれを複数回繰り返したい。誰か助けてもらえますか?それがうまく働いていますが、私はforループでmagic関数を呼び出すしようとすると、私はRuntimeError: Set changed size during iterationを取得してもbeautifulsoupを使用してファイルのリンクのhtmlを保存し、htmlファイルのすべてのリンクと同じように行う方法

import requests 
import urllib2 
from bs4 import BeautifulSoup 

link_set = set() 
count = 1 
give_url = raw_input("Enter url:\t") 


def magic(give_url): 
    page = urllib2.urlopen(give_url) 

    page_content = page.read() 

    with open('page_content.html', 'w') as fid: 
     fid.write(page_content) 


    response = requests.get(give_url) 
    html_data = response.text 
    soup = BeautifulSoup(html_data) 

    list_items = soup.find_all('a') 

    for each_item in list_items: 
     html_link = each_item.get('href') 
     link_set.add(give_url + str(html_link)) 

magic(give_url) 

for each_item in link_set: 
    print each_item 
    print "\n" 

これは私が書いたコードです。

+2

現在のコードはどこですか? –

+0

はい、ここでコードを更新しました。私はコードを貼り付けなければならないことも知らなかった。 –

答えて

0

私はそれを働かせました。美しいスープを使用して再帰的なURLの解析のための コード:私はあなたのすべては、私はコードを向上させることができる場所を教えてくださいを要求して

import requests 
import urllib2 
from bs4 import BeautifulSoup 

link_set = set() 
give_url = raw_input("Enter url:\t") 

def magic(give_url, link_set, count): 
    # print "______________________________________________________" 
    # 
    # print "Count is: " + str(count) 
    # count += 1 
    # print "THE URL IT IS SCRAPPING IS:" + give_url 
    page = urllib2.urlopen(give_url) 

    page_content = page.read() 

    with open('page_content.html', 'w') as fid: 
     fid.write(page_content) 


    response = requests.get(give_url) 
    html_data = response.text 
    soup = BeautifulSoup(html_data) 

    list_items = soup.find_all('a') 

    for each_item in list_items: 
     html_link = each_item.get('href') 
     if(html_link is None): 
      pass 
     else: 
      if(not (html_link.startswith('http') or html_link.startswith('https'))): 
       link_set.add(give_url + html_link) 
      else: 
       link_set.add(html_link) 

    # print "Total links in the given url are: " + str(len(link_set)) 


magic(give_url,link_set,0) 

link_set2 = set() 
link_set3 = set() 

for element in link_set: 
    link_set2.add(element) 

count = 1 
for element in link_set: 
    magic(element,link_set3,count) 
    count += 1 
    for each_item in link_set3: 
     link_set2.add(each_item) 
    link_set3.clear() 

count = 1 
print "Total links scraped are: " + str(len(link_set2)) 
for element in link_set2: 
    count +=1 
    print "Element number " + str(count) + "processing" 
    print element 
    print "\n" 

は多くのミスがあります。

関連する問題