2016-07-22 2 views
0

辞書を追加しようとすると、すべての異なるページを通過することでキャリア検索サイトを削っていますforループを使用してリストに追加します。私がPython 3.4で以下のコードを実行すると、コードは各ページのすべての関連データを辞書(私はprint()でチェックした)にプルし、 "FullJobDetails"に追加しますが、forループの最後には最後のページからの辞書でいっぱいのリストを取得します。辞書の数はリスト "ListofJobs"のページ数とまったく同じです。 "ListofJobs"は、私が廃棄している各ページへのHTMLリンクのリストです。forループを通して辞書に辞書を追加すると、最後の辞書のみが取得されます

私はちょうどコードを学習し始めました。そのため、以下のコードはどのような形、方法、形でもないことがわかりました。任意の提案をいただければ幸いです。前もって感謝します!

FullJobDetails = [] 
browser = webdriver.Chrome() 
dictionary = {} 

for jobs in ListofJobs: 
    browser.get(jobs) 
    dictionary["Web Page"] = jobs 
    try: 
    dictionary["Views"] = browser.find_element_by_class_name('job-viewed-item-count').text 
    except NoSuchElementException: 
    dictionary["Views"] = 0 

    try: 
    dictionary['Applicants'] = browser.find_element_by_class_name('job-applied-item-count').text 
    except NoSuchElementException: 
    dictionary["Applicants"] = 0 

    try: 
    dictionary["Last Application"] = browser.find_element_by_class_name('last-application-time-digit').text 
    except NoSuchElementException: 
    dictionary["Last Application"] = "N/A" 

    try: 
    dictionary["Job Title"] = browser.find_element_by_class_name('title').text 
    except NoSuchElementException: 
    dictionary["Job Title"] = "N/A" 

    try: 
    dictionary['Company'] = browser.find_element_by_xpath('/html/body/div[3]/article/section[2]/div/ul/li[4]/span/span').text 
    except NoSuchElementException: 
    dictionary['Company'] = "Not found" 

    try: 
    dictionary['Summary'] = browser.find_element_by_class_name('summary').text 
    except NoSuchElementException: 
    dictionary['Summary'] = "Not found" 

    FullJobDetails.append(dictionary) 
+1

ホールド。あなたは 'job.content'を実際のHTMLパーサーで解析し、直ちに*解読して原文を正規表現で検索します。 – user2357112

+1

表示したコードが実行しているコードですか?あなたが書いている問題は、 'dict = {}'という行が表示されている場所ではなく、ループの外側にあったとすれば、私が期待するところです。 (あなたの問題に無関係な点: 'dict'を変数名として使うことは非常に悪い考えです。後で非常に混乱するバグを引き起こす可能性のある組み込み' dict'クラスの名前を隠しています) – Blckknght

+0

はい表示されているコード実行しているものとまったく同じです、 "インデント"とすべて。もし自分自身をリセットしていたら、最後の辞書に対応する複数の辞書の代わりに、リストに1つの辞書(最後のもの)が1つだけ存在すると思います。 dictの名前を変更していただきありがとうございます。私はそれを別の変数に変更します。 –

答えて

0

問題は、あなただけの単一の辞書を作成することである - dicitonariesは変更可能なオブジェクトです - 同じditionaryはあなたのリストに、そしてあなたがその内容を更新forループの各パスで何度も追加されます。したがって、最終的に、同じdicitonryの複数のコピーが作成され、すべて最後のページの情報が表示されます。

forループの実行ごとに新しい辞書オブジェクトを作成するだけです。その新しい辞書はリストに保存され、変数名dictionaryは新しいオブジェクトを矛盾なく保持できます。

for jobs in ListofJobs: 
    dictionary = {} 
    browser.get(jobs) 
    ... 
+0

それはうまくいった!質問に答える時間をとってくれてありがとう。 –

関連する問題