【问题标题】:Submitting form to scrape data from a jobs board提交表单以从工作委员会中抓取数据
【发布时间】:2016-02-14 01:06:44
【问题描述】:

我正在尝试编写一个从特定website 获取工作详细信息的脚本。当我从 Google Chrome 中的源代码(command-option-U)与开发人员工具(command-option-I)查看时,html 代码似乎有所不同。开发者工具有我可以在 HTML 中解析的实际细节。

我所追求的一个例子是在网站的第一个职位发布中找到的:

加拿大-艾伯塔-麦克默里堡,加拿大-艾伯塔-埃德蒙顿

我知道我需要使用 POST 提交表单,但除此之外,我无法获取在开发人员工具中找到但在我的请求中没有的 html 代码。

import requests
url='https://caterpillar.taleo.net/careersection/cat+external+cs/jobsearch.ftl?lang=en&portal=4140124208&src=CWS-10005'
r = requests.post(url, data={'dropListSize': 100})
print(r.status_code, r.reason)
html=r.text

我也尝试过使用机械化的类似策略

import mechanize
br = mechanize.Browser()
br.open(url)

for f in br.forms():
    print f

br.select_form('ftlform')
br.form["dropListSize"] = ["100"]
br.submit()
html=br.response().read()

一个相关的问题是我将如何进入下一页,但我觉得我可能能够弄清楚。

【问题讨论】:

    标签: python html python-requests


    【解决方案1】:

    有一个 XHR POST 请求发送到 https://caterpillar.taleo.net/careersection/cat+external+cs/jobsearch.ajax 端点,其中包含响应中的所有搜索结果。您可以尝试模拟它(从参数数量和响应格式来看,我怀疑这不会很有趣),或者您可以通过selenium 在真实浏览器中加载页面,让浏览器加载页面并不要'不用担心搜索结果是如何传递的。

    使用selenium + PhantomJS 无头浏览器的工作示例:

    from selenium import webdriver
    from selenium.webdriver.common.by import By
    from selenium.webdriver.support.ui import WebDriverWait
    from selenium.webdriver.support import expected_conditions as EC
    
    
    url = 'https://caterpillar.taleo.net/careersection/cat+external+cs/jobsearch.ftl?lang=en&portal=4140124208&src=CWS-10005'
    driver = webdriver.PhantomJS()
    driver.get(url)
    
    wait = WebDriverWait(driver, 10)
    table = wait.until(EC.presence_of_element_located((By.CSS_SELECTOR, "table.contentlist")))
    
    for row in table.find_elements_by_css_selector("tr.ftlrow"):
        title = row.find_element_by_css_selector(".titlelink a").text
        print(title)
    
    driver.close()
    

    打印:

    Sales accountant
    Manufacturing Project Engineer
    Staff Accountant - Accountable
    Hydraulic Cylinder Design Engineer
    Engineering Supervisor(Hydraulic Cylinder)
    Design Engineer
    Senior Design Engineer
    Senior Engineer
    Senior Design Engineer
    Dealer Solution Network (DSN) Analyst
    

    【讨论】:

      猜你喜欢
      • 2021-08-25
      • 1970-01-01
      • 1970-01-01
      • 2018-07-11
      • 2013-03-20
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多