tối proxyscrape logo

Web Scraping For Job Postings – An Ultimate 2024 Guide

trăn, cạo, Tháng Giêng-04-20235 phút đọc
Web Scraping cho các bài đăng công việc là một phím tắt thay thế cho người tìm việc để tạo cơ sở dữ liệu về các cơ hội việc làm hiện tại. Randstad nói rằng việc tìm kiếm việc làm trung bình có thể kéo dài từ năm đến sáu tháng, kể từ khi một ứng dụng được thực hiện cho đến khi một vị trí được lấp đầy. Điều gì sẽ xảy ra nếu bạn có một giải pháp có thể giảm gánh nặng lướt qua tất cả các cổng thông tin việc làm và chọn đúng cổng phù hợp với bạn? 

Bài viết này sẽ đưa bạn vào một chuyến đi giải thích làm thế nào để làm web scraping cho các bài đăng công việc. Vì vậy, bạn đang ở trong thị trường việc làm và cố gắng tìm ra công việc tốt nhất. Nhưng bạn muốn chơi thông minh hơn và không chăm chỉ hơn. Tại sao không xây dựng một web scraper để thu thập và phân tích các bài đăng công việc cho bạn. Khi bạn đặt nó, nó sẽ cung cấp cho bạn dữ liệu phong phú ở định dạng gọn gàng đẹp mắt, vì vậy bạn không phải kiểm tra thủ công nhiều lần. Hãy bắt đầu nào.

Web Scraping cho tin tuyển dụng là gì?

Web scraping cho các bài đăng công việc là giải pháp tự động thu thập dữ liệu từ nhiều cổng thông tin việc làm và giảm thời gian của bạn trong việc tìm nạp dữ liệu từ mỗi trang web. Có một công cụ như vậy có thể cung cấp cho bạn một cơ sở dữ liệu đầy đủ về các cơ hội việc làm sẽ đơn giản hóa nhiệm vụ của bạn bằng nhiều lần. Tất cả những gì bạn phải làm là lọc cái nào phù hợp với bạn và tiến hành quá trình đăng ký. 

Vì vậy, bạn đang ở trong thị trường việc làm và cố gắng tìm ra công việc tốt nhất. Nhưng bạn muốn chơi thông minh hơn và không chăm chỉ hơn. Tại sao không xây dựng một web scraper để thu thập và phân tích các bài đăng công việc cho bạn? Khi bạn đặt nó, nó sẽ cung cấp cho bạn dữ liệu phong phú ở định dạng gọn gàng đẹp mắt, vì vậy bạn không phải kiểm tra thủ công nhiều lần. Hãy bắt đầu nào.

[Tuyên bố từ chối trách nhiệm! Nhiều trang web có thể hạn chế việc loại bỏ dữ liệu khỏi các trang của họ. Người dùng có thể phải chịu các vấn đề pháp lý tùy thuộc vào vị trí và cách họ cố gắng trích xuất thông tin. Vì vậy, người ta cần phải cực kỳ cẩn thận nếu nhìn vào các trang web chứa dữ liệu của họ. Ví dụ: Facebook, Linked In và Craiglist đôi khi quan tâm nếu dữ liệu bị loại bỏ khỏi các trang của họ. Vì vậy, nếu bạn muốn cạo, cạo có nguy cơ của riêng bạn].

Đây sẽ là một bài viết rất cơ bản, trong đó chúng ta sẽ thấy những điều cơ bản về quét web bằng cách trích xuất một số thông tin hữu ích liên quan đến các công việc liên quan đến "Khoa học dữ liệu" từ indeed.com. Chúng tôi sẽ viết một chương trình tuyệt vời cập nhật công việc nhiều lần theo cách thủ công. Một số thư viện hữu ích sẽ rất tiện dụng trong khi xây dựng trình cạp này là "yêu cầu" và "BeautifulSoup".

Hiểu cấu trúc URL và trang

Đầu tiên, chúng ta hãy xem trang mẫu mà chúng ta sẽ trích xuất từ thực sự

Cách URL được cấu trúc rất quan trọng:

  • Lưu ý "q =" bắt đầu chuỗi cho trường "cái gì" trên trang, tách các cụm từ tìm kiếm bằng "+" (nghĩa là tìm kiếm các công việc "dữ liệu + nhà khoa học")
  • khi chỉ định mức lương, nó sẽ phân tích cú pháp bằng dấu phẩy trong số lương, vì vậy phần đầu của mức lương sẽ đứng trước %24 và sau đó là số trước dấu phẩy đầu tiên, sau đó nó sẽ bị phá vỡ bởi %2C và tiếp tục với phần còn lại của số (tức là %2420%2C000 = 20.000 đô la)
  • Lưu ý "&l =" bắt đầu chuỗi cho thành phố quan tâm, tách các cụm từ tìm kiếm bằng "+" nếu thành phố có nhiều hơn một từ (ví dụ: "Mới + York.")
  • Lưu ý "&start =" ghi chú kết quả tìm kiếm nơi bạn muốn bắt đầu (tức là bắt đầu bằng cách xem kết quả thứ 10)

Cấu trúc URL này sẽ giúp ích rất nhiều khi chúng tôi tiếp tục xây dựng trình quét và thu thập dữ liệu từ nhiều trang. 

Chrome có thể kiểm tra cấu trúc HTML của trang bằng cách nhấp chuột phải vào trang và sử dụng tùy chọn kiểm tra phần tử. Một menu sẽ xuất hiện ở bên phải và nó cũng sẽ hiển thị các thẻ phần tử lồng nhau và khi bạn đặt con trỏ lên các phần tử đó, nó sẽ làm nổi bật phần đó của màn hình.  

Đối với bài viết này, tôi cho rằng bạn biết những điều cơ bản về HTML như thẻ, div, v.v., nhưng may mắn là bạn không cần biết mọi thứ. Bạn chỉ cần hiểu cấu trúc trang và hệ thống phân cấp thành phần khác nhau.

Bắt đầu với Scraper

Bây giờ chúng tôi đã phân tích cấu trúc trang. Điều này sẽ giúp chúng ta xây dựng code theo thông tin đó để lấy ra dữ liệu mà chúng ta lựa chọn. Trước tiên, hãy bắt đầu bằng cách nhập thư viện của chúng tôi. Lưu ý rằng ở đây chúng tôi cũng đang nhập "thời gian", điều này sẽ hữu ích để không áp đảo máy chủ của trang web khi thu thập thông tin.

Yêu cầu nhập khẩu
Nhập BS4
từ bs4 nhập khẩu BeautifulSoup
Nhập khẩu gấu trúc dưới dạng PD
Thời gian nhập khẩu

Trước tiên, chúng tôi sẽ nhắm mục tiêu trang duy nhất để rút từng phần thông tin chúng tôi muốn,

URL = "https://www.indeed.com/jobs?q=data+scientist+%2420%2C000&l=New+York&start=10"
#conducting yêu cầu của URL đã nêu ở trên:
page = yêu cầu. get(URL)
#specifying định dạng mong muốn của "trang" bằng cách sử dụng trình phân tích cú pháp HTML - điều này cho phép Python đọc các thành phần khác nhau của trang, thay vì coi nó là một chuỗi dài.
súp = BeautifulSoup (page.text, "html.parser")
#printing súp ở định dạng cây có cấu trúc hơn giúp đọc
bản in dễ dàng hơn (soup.prettify())

Sử dụng prettify giúp bạn dễ dàng có cái nhìn tổng quan về mã HTML của trang và cung cấp đầu ra như thế này,

 Bây giờ tất cả thông tin trên trang quan tâm của chúng tôi là trong "súp" biến của chúng tôi. Chúng ta phải đào sâu hơn vào mã để lặp lại thông qua các thẻ và thẻ phụ khác nhau để nắm bắt thông tin cần thiết.

Lấy các yếu tố cơ bản của dữ liệu

Năm điểm chính cho mỗi tin tuyển dụng là,

  1. Chức danh.
  2. Tên công ty.
  3. Vị trí.
  4. Lương.
  5. Tóm tắt công việc.

Nếu chúng ta nhìn vào trang, có 15 tin tuyển dụng. Do đó, mã của chúng ta cũng sẽ tạo ra 15 mục khác nhau. Tuy nhiên, nếu mã cung cấp ít hơn mức này, chúng ta có thể tham khảo lại trang và xem những gì không được chụp.

Nhận chức danh công việc

As can be seen, the entirety of each job posting is under <div> tags, with an attribute “class” = “row result.”

Further, we could also see that job titles are under <a> tags, with the attribute “title = (title)”. One can see the value of the tag’s attribute with tag[“attribute”], so I can use it to find each posting’s job title.

Nếu chúng ta tóm tắt, hàm chúng ta sẽ thấy bao gồm ba bước sau,

  1. Pulling out all the <div> tags with class including “row”.
  2. Identifying <a> tags with attribute “data-tn-element”:”jobTitle”
  3. For each of these <a> tags, find attribute values “title”
def extract_job_title_from_result(soup): 
  jobs = []
  for div in soup.find_all(name="div", attrs={"class":"row"}):
    for a in div.find_all(name="a", attrs={"data-tn-element":"jobTitle"}):
      jobs.append(a["title"])
  return(jobs)
extract_job_title_from_result(soup)

Mã này sẽ mang lại một đầu ra như thế này,

Lấy tên công ty

Getting company names can be a bit tricky because most of them are appearing in <span> tags, with “class”:” company”.  They are also housed in <span> tags with “class”:” result-link-source”.

Chúng tôi sẽ sử dụng các báo cáo if / else để trích xuất thông tin công ty từ mỗi nơi này. Để loại bỏ các khoảng trắng xung quanh tên công ty khi chúng được xuất ra, chúng ta sẽ sử dụng inputting.strip() ở cuối.

def extract_company_from_result(soup): 
 companies = []
 for div in soup.find_all(name="div", attrs={"class":"row"}):
   company = div.find_all(name="span", attrs={"class":"company"})
   if len(company) &gt; 0:
    for b in company:
     companies.append(b.text.strip())
   else:
    sec_try = div.find_all(name="span", attrs={"class":"result-link-source"})
    for span in sec_try:
      companies.append(span.text.strip())
 return(companies)
 
extract_company_from_result(soup)

Lấy vị trí

Locations are located under the <span> tags. Span tags are sometimes nested within each other, such that the location text may sometimes be within “class”:”location” attributes, or nested in “itemprop”:”addressLocality”. However a simple for loop can examine all span tags for text and retrieve the necessary information.

def extract_location_from_result(soup): 
  locations = []
  spans = soup.findAll('span', attrs={'class': 'location'})
  for span in spans:
    locations.append(span.text)
  return(locations)
extract_location_from_result(soup)

Nhận lương

Tiền lương là phần khó khăn nhất để trích xuất từ các bài đăng công việc. Hầu hết các bài đăng hoàn toàn không công bố thông tin về lương, trong khi những bài đăng khác thì có, có thể có nhiều nơi để chọn điều đó. Vì vậy, chúng ta phải viết một mã có thể nhận nhiều mức lương từ nhiều nơi và nếu không tìm thấy lương, chúng ta cần tạo giá trị "Không tìm thấy gì" cho bất kỳ công việc nào không có lương. 

Some salaries are under <nobr> tags, while others are under <div> tags, “class”:”sjcl” and are under separate div tags with no attributes. Try/except statement can be helpful while extracting this information. 

def extract_salary_from_result(soup): 
  salaries = []
  for div in soup.find_all(name="div", attrs={"class":"row"}):
    try:
      salaries.append(div.find('nobr').text)
    except:
      try:
        div_two = div.find(name="div", attrs={"class":"sjcl"})
        div_three = div_two.find("div")
        salaries.append(div_three.text.strip())
      except:
        salaries.append("Nothing_found")
  return(salaries)
extract_salary_from_result(soup)

Nhận tóm tắt công việc

Công việc cuối cùng là lấy bản tóm tắt công việc. Tuy nhiên, không thể lấy tóm tắt công việc cho từng vị trí cụ thể vì chúng không được bao gồm trong HTML từ một trang Indeed nhất định. Chúng tôi có thể nhận được một số thông tin về từng công việc từ những gì được cung cấp. Chúng ta có thể sử dụng Selenium cho mục đích này.

But let’s first try this using python. Summaries are located under <span> tags. Span tags are nested within each other such that the location text is within “class”:” location” tags or nested in “itemprop”:” adressLocality”. However, using a simple for loop can examine all span tags for text to retrieve the necessary information.

Các câu hỏi thường gặp

1. Why is it necessary to scrape job details?
Có đủ cổng thông tin việc làm có thể thông báo cho bạn về các công việc phù hợp với hồ sơ của bạn. Tuy nhiên, có một giải pháp cạo công việc sẽ giúp bạn có được một danh sách đầy đủ các công việc và mô tả như một cơ sở dữ liệu tiện dụng. Điều này sẽ cho phép bạn có cái nhìn tốt hơn về tất cả các cơ hội việc làm ở một nơi.
2. How can a proxy help in scraping job details?
Web scraping thường sẽ có những thách thức nhất định như khối IP, khối địa lý và tốc độ hạn chế. Việc tìm kiếm việc làm từ các cổng thông tin việc làm cũng sẽ có những thách thức như vậy. Để vượt qua tất cả những vấn đề này, địa chỉ proxy có thể giúp bạn với địa chỉ IP của vị trí cần thiết và đảm bảo ẩn danh
3. What are the python libraries required to scrape job details?
Requests, BeautifulSoup, and Pandas are quite common python libraries to scrape job-related data from websites. Request library is the most common python library used to send web requests, while BeautifulSoup is responsible for parsing data, and Pandas library will help with the data structure operations.
Artices liên quan

Tổng kết

Trong bài viết này, chúng ta đã thấy web scraping là gì và nó có thể hữu ích như thế nào trong cuộc sống hàng ngày của chúng ta bằng cách lấy một ví dụ thực tế về việc thu thập dữ liệu công việc từ các trang web của Indeed. Xin lưu ý rằng kết quả bạn nhận được có thể khác với những kết quả này vì các trang là động, vì vậy thông tin liên tục thay đổi theo thời gian. 

Web Scraping là một kỹ thuật đáng kinh ngạc nếu được thực hiện đúng và theo yêu cầu của bạn. Chúng tôi đã thấy thêm năm khía cạnh quan trọng của mỗi tin tuyển dụng và cách trích xuất chúng. Khi bạn tự mình thử mã này, bạn sẽ có dữ liệu cạo các bài đăng công việc và bạn không cần phải tìm kiếm công việc theo cách thủ công, điều này thật tuyệt vời. Kỹ thuật tương tự cũng có thể được áp dụng cho các trang web khác, nhưng cấu trúc của chúng có thể khác nhau. Do đó, người ta cần tối ưu hóa mã của họ theo đó. Nhưng tất cả những điều cơ bản đều được đề cập trong bài viết này, vì vậy sẽ không có bất kỳ khó khăn nào trong việc cạo các trang khác.

Nếu bạn đang tìm kiếm các dịch vụ proxy, đừng quên xem xét ProxyScrapeproxy dân dụngcao cấp.