2016-07-22 41 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

工作!非常感谢花时间回答问题。 –

相关问题