python - 提交表单以从就业委员会抓取数据

标签 python html python-requests

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

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

Canada-Alberta-Fort McMurray, Canada-Alberta-Edmonton

我知道我需要使用 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

我也尝试过使用 mechanize 的类似策略

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()

一个相关的问题是我如何到达下一页,但我觉得我也许能够弄清楚。

最佳答案

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

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

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

关于python - 提交表单以从就业委员会抓取数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35387249/

相关文章:

python - 尝试使用 Python 请求在 Oanda 上下订单。获取 JSON 错误

Python 无法获取 html 标签之间的文本

python - 限制 Python VM 内存

javascript - jQuery 动态向表添加列不起作用

python - Google Oauth Python 请求 : Method Not Allowed

serialization - 如何从 python-requests 保存 python HTTP 请求,以便以后执行?

python - 生成 200,000 个哈希值的列表并保存到文件

python - 增强 GAE 错误报告以包含警告

javascript - 缓存 HTML 字符串或 DOM 元素?

javascript - 拦截整个网站的鼠标点击坐标