Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/selenium/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 从LinkedIn中删除职位描述_Python_Selenium_Web Scraping - Fatal编程技术网

Python 从LinkedIn中删除职位描述

Python 从LinkedIn中删除职位描述,python,selenium,web-scraping,Python,Selenium,Web Scraping,我创建了一个python脚本,它使用Selenium的库进行刮取: 职称 公司名称 工作地点 工作描述(我需要得到帮助!),摘自LinkedIn工作搜索部分 我已经创建了一个for循环来迭代(25)个作业,以使用每个描述使用的相同类名提取每个作业的描述。我已经能够成功地提取出(1)个描述,但还不能提取出其余(24)个工作的其他描述。我假设它的循环无法解析每个部分,但是如果它能够成功地拉出(1)个描述,为什么其他的描述没有出现呢 将熊猫作为pd导入 进口稀土 从selenium导入webdriv

我创建了一个python脚本,它使用Selenium的库进行刮取:

  • 职称
  • 公司名称
  • 工作地点
  • 工作描述(我需要得到帮助!),摘自LinkedIn工作搜索部分
  • 我已经创建了一个for循环来迭代(25)个作业,以使用每个描述使用的相同类名提取每个作业的描述。我已经能够成功地提取出(1)个描述,但还不能提取出其余(24)个工作的其他描述。我假设它的循环无法解析每个部分,但是如果它能够成功地拉出(1)个描述,为什么其他的描述没有出现呢

    将熊猫作为pd导入
    进口稀土
    从selenium导入webdriver
    从selenium.webdriver.common.keys导入密钥
    #这将打开一个新的Chrome页面来测试指定的url(用于抓取)
    browser=webdriver.Chrome(“我的Chrome路径”)
    browser.get(“https://www.linkedin.com")
    #要求用户输入用户名和密码
    用户名=浏览器。按id(“会话密钥”)查找元素
    用户名。发送密钥(“输入用户名”)
    密码=浏览器。通过id(“会话密码”)查找元素
    密码。发送密钥(“输入密码”)
    #输入用户名和密码后,将自动单击提交按钮登录LinkedIn
    login\u button=browser.通过类名称查找元素(“登录表单提交按钮”)
    登录按钮。单击()
    #这是一个URL,用于测试我想从中获取的作业
    browser.get(“https://www.linkedin.com/jobs/search/?keywords=software%20developer")
    #这将从第(1)页中刮取并显示(25)个职务
    job\u title=浏览器。按类名称查找元素(“job-card-list\u title”)
    公司名称=[]
    对于我的职位名称:
    公司名称附加(i.text)
    印刷品(公司名称)
    打印()
    印刷品(len(公司名称))
    #这将从第(1)页中刮取并显示(25)个公司名称-对应于上述公司名称
    job\u company=browser.通过类名称(“job-card-container\u company-name”)查找元素
    公司名称=[]
    对于我在job_公司:
    公司名称。附加(i.text)
    打印(公司名称)
    打印()
    打印(len(公司名称))
    #这将从第(1)页中刮取并显示(25)个位置名称-对应于上面的公司名称和公司名称
    job\u location=browser.通过类名称(“job-card-container\uu metadata-item”)查找元素
    位置\名称=[]
    对于我在工作地点的情况:
    位置\名称.附加(i.text)
    打印(位置和名称)
    打印()
    打印(len(位置和名称))
    #在这一点上,我试图迭代(25)个作业中的每一个,以提取描述。我已经成功地提取了(1)个描述,但无法提取其余(24)个工作的其他描述。
    job\u description=浏览器。按类名称查找元素(“jobs-search\u right-rail”)
    description_name=[]
    对于工作描述中的i:
    description_name.append(i.text)
    打印(说明和名称)
    打印()
    
    打印(len(description_name))
    问题与如何加载页面有关。 每次单击新作业容器时,它都会向服务器发送不同的GET请求

    This link, by default, has the first job selected.    
    https://www.linkedin.com/jobs/search/?keywords=software%20developer
    
    When you click another page, it changes the job id. 
    Example: 
    https://www.linkedin.com/jobs/search/?currentJobId=2512009247&keywords=software%20developer
    
    因此,您可以模拟单击容器,也可以通过从页面中删除id并使用新链接重新加载页面来更改currentJobId

    # Example of scraping the currentJobId for each item.
    job_containers = browser.find_elements_by_class_name('job-card-container relative job-card-list job-card-container--clickable job-card-list--underline-title-on-hover jobs-search-results-list__list-item--active jobs-search-two-pane__job-card-container--viewport-tracking-0')
    job_ids = []
    for job_container in job_containers:
        job_ids.append(job_container.get_attribute("data-job-id"))
    
    函数获取描述

    def get_descriptions(browser, job_ids):
        job_descriptions = []
        for job_id in job_ids:
            browser.get(f'https://www.linkedin.com/jobs/search/?currentJobId={job_id}&keywords=software%20developer')
            job_description = browser.find_elements_by_class_name('jobs-search__right-rail')[0].text
            job_descriptions.append(job_description)
    
        return job_descriptions
    

    谢谢@Steven Posterick。每次作业ID更改时我都必须使用此选项吗?另外,您知道如何将ID与更新的链接相匹配吗?@WeeklyButterfly34不确定作业ID的更改频率,但我会在检索作业ID后立即查询描述。我已经编辑了我的答案,展示了一个如何让它抓取带有工作id的描述的示例。我感谢这里的更新和帮助。我已经将id填充到LinkedIn链接中,链接上写着{job_id}。在这一点上,我想知道如果所有描述都存储在get_descriptions函数内声明的job_descriptions数组中,如何查看这些描述。它是从方法返回的,因此要获取job_descriptions数组,您只需执行以下操作:job_descriptions=get_descriptions(浏览器,job_id)然后循环遍历数组。我只是循环了get_descriptions函数。在returnjob_description语句之后,我简单地说:print(job_description)获取所有文本内容。谢谢你@Steven Posterick