【问题标题】:Web scraping data form ajax page网页抓取数据表单ajax页面
【发布时间】:2021-09-28 05:12:36
【问题描述】:

我正在尝试从 here 中抓取职位名称。

我正在学习 python 抓取技术,但我遇到了抓取像这样的 Ajax 页面的问题。我可以使用下面的第一页代码获取开发人员工具响应数据。如何从这些数据中提取职位。

from bs4 import BeautifulSoup
import requests
import json

s = requests.Session()
headers={"User-Agent":"Mozilla/5.0"}
r=s.get('https://epco.taleo.net/careersection/alljobs/jobsearch.ftl?lang=en',headers=headers)
html = r.text
soup = BeautifulSoup(html, 'lxml')
print(soup)

###how to extract job titles from soup###

非常感谢您对此的任何帮助。

不幸的是,我目前仅限于使用请求或其他流行的 python 库。提前致谢。

【问题讨论】:

标签: python ajax web-scraping beautifulsoup python-requests


【解决方案1】:

此站点是动态的(使用 javascript 更改数据),因此您必须使用 Selenium。 你可以在 headless 中运行它,就像发送请求一样:

from selenium import webdriver
from bs4 import BeautifulSoup
from selenium.webdriver.chrome.options import Options

options = Options()
options.add_argument('--headless')

driver = webdriver.Chrome(executable_path=r'yourpath\chromedriver.exe', chrome_options=options)

driver.get('https://epco.taleo.net/careersection/alljobs/jobsearch.ftl?lang=en')

html = (driver.page_source).encode('utf-8')
soup = BeautifulSoup(html, 'lxml')
print(soup)

【讨论】:

    【解决方案2】:

    数据位于<script> 标记内。您可以使用re 模块查找正确的职位名称。

    import re
    import requests
    
    headers = {"User-Agent": "Mozilla/5.0"}
    
    response = requests.get(
        "https://epco.taleo.net/careersection/alljobs/jobsearch.ftl?lang=en"
    )
    job_titles = re.findall(r"Add this position to the job cart: (.*?)'", response.text)
    print(len(job_titles))
    print(job_titles)
    

    输出:

    25
    ['Technician, I %26 E (Coyanosa, TX)', 'Engineer, Senior Project', 'Engineer, Project', 'Mechanic, Truck (Monahans, TX)', 'Technician, Pipeline (Bryan/College Station)', 'Technician, Measurement (Farmington, NM)', 'Assistant, Field Administrative (Carlsbad, NM)', 'Technician, Pipeline (Greensburg, PA)', 'Human Resources Business Partner', 'Engineer, Senior Measurement', 'Accountant (Mont Belvieu)', 'Specialist, Senior Accounts Payable', 'Technician, Pipeline Trainee( Cape Girardeau)', 'Specialist, EAM Inventory', 'Welder - Class B', 'Specialist, Senior NGL Accounts Payable', 'Technician, Pipeline (Hobbs, NM)', 'Auditor, IT', 'Accountant, Intermediate', 'Accountant', 'Operator, Plant (Sonora, TX)', 'Technician, Pipeline (Carlsbad, NM)', 'Specialist, Maintenance (Lebanon, OH)', 'Technician, Pipeline Trainee ', 'Specialist, Senior Systems']
    

    【讨论】:

    • 谢谢@MendelG,您能否建议我应该如何进一步从Ajax link 的剩余页面中提取标题。
    【解决方案3】:

    试试:

    import re
    import json
    import requests
    
    url = "https://epco.taleo.net/careersection/alljobs/jobsearch.ftl?lang=en"
    
    data = re.search(r"listRequisition', (\[.*?\])\);", requests.get(url).text)
    data = data.group(1).replace("'", '"')
    data = json.loads(data)
    for i in range(25):
        row = data[i * 40 : (i + 1) * 40]
        print(row[5])
    

    打印:

    Technician, I %26 E (Coyanosa, TX)
    Engineer, Senior Project
    Engineer, Project
    Mechanic, Truck (Monahans, TX)
    Technician, Pipeline (Bryan/College Station)
    Technician, Measurement (Farmington, NM)
    Assistant, Field Administrative (Carlsbad, NM)
    Technician, Pipeline (Greensburg, PA)
    Human Resources Business Partner
    Engineer, Senior Measurement
    Accountant (Mont Belvieu)
    Specialist, Senior Accounts Payable
    Technician, Pipeline Trainee( Cape Girardeau)
    Specialist, EAM Inventory
    Welder - Class B
    Specialist, Senior NGL Accounts Payable
    Technician, Pipeline (Hobbs, NM)
    Auditor, IT
    Accountant, Intermediate
    Accountant
    Operator, Plant (Sonora, TX)
    Technician, Pipeline (Carlsbad, NM)
    Specialist, Maintenance (Lebanon, OH)
    Technician, Pipeline Trainee 
    Specialist, Senior Systems
    

    【讨论】:

    • 谢谢@andrej,你能建议我如何进一步从Ajaxlink987654321@的剩余页面中提取标题
    猜你喜欢
    • 2022-07-06
    • 2013-03-05
    • 2021-12-02
    • 2021-03-10
    • 1970-01-01
    • 2021-10-15
    • 2021-12-28
    • 2020-05-10
    • 1970-01-01
    相关资源
    最近更新 更多