2016-07-22 50 views
0

我試圖通過瀏覽所有不同的頁面來抓取職業搜索網站,並且在嘗試追加字典時遇到問題使用for循環進入列表。當我在Python 3.4中執行下面的代碼時,代碼會將每個頁面的所有相關數據都拉到字典中(我用print()進行了檢查),並將其添加到「FullJobDetails」中,但在for循環結束時I獲取僅包含最後一頁字典的列表。字典的數量與列表「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

堅持。你用一個真正的HTML解析器解析'job.content',然後立即*解析它並用正則表達式搜索原始文本? – user2357112

+1

你確定你已經顯示的代碼是你正在運行的?你所描述的問題正是我所期望的,如果'dict = {}'這一行在循環之外而不是顯示它的地方。 (與你的問題無關的一點:使用'dict'作爲變量名是一個非常糟糕的主意,它隱藏了內建'dict'類的名字,後面會引起非常混亂的錯誤。) – Blckknght

+0

是的顯示的代碼與正在運行的「縮進」等完全相同。如果它自己被重置,我會想象列表中只有一個字典(最後一個),而不是多個都與最後一個字典相對應。感謝您對重命名字典的建議,我會將其更改爲另一個變量。 –

回答

0

的問題是,你只能創建一個單一的字典 - dicitonaries是可變的對象 - 同樣ditionary附加遍地到您的列表,並在for循環更新內容的每個通行證。因此,最後,您將擁有同一個裁決的多個副本,所有副本都顯示最後一頁中的信息。

只需爲每個運行的for循環創建一個新的字典對象。該新字典將保存在列表中,變量名稱dictionary可以保持您的新對象沒有衝突。

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

工作!非常感謝花時間回答問題。 –

相關問題