Web Scraping cho các bài đăng việc làm là một lối tắt thay thế cho người tìm việc để tạo cơ sở dữ liệu về các việc làm hiện tại. Randstad cho biết rằng tìm kiếm việc làm trung bình có thể kéo dài năm đến sáu tháng, từ khi nộp đơn cho đến khi tuyển được người. Sẽ thế nào nếu bạn có một giải pháp có thể giảm bớt gánh nặng của bạn
Web Scraping cho các bài đăng việc làm là một lối tắt thay thế cho người tìm việc để tạo cơ sở dữ liệu về các việc làm hiện tại. Randstad cho biết rằng tìm kiếm việc làm trung bình có thể kéo dài năm đến sáu tháng , từ khi nộp đơn xin việc cho đến khi tuyển được người. Sẽ thế nào nếu bạn có một giải pháp có thể giảm bớt gánh nặng khi lướt qua tất cả các cổng thông tin việc làm và chọn đúng việc phù hợp với mình?
Bài viết này sẽ đưa bạn vào một chuyến đi giải thích cách thực hiện thu thập dữ liệu web cho các bài đăng việc làm. 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 chứ không phải khó khăn hơn. Tại sao không xây dựng một trình thu thập dữ liệu web để thu thập và phân tích các bài đăng việc làm cho bạn. Sau khi bạn thiết lập, 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 for job postings 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 bạn phải lấy 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 cơ sở dữ liệu đầy đủ về các việc làm sẽ đơn giản hóa nhiệm vụ của bạn theo nhiều cách. Tất cả những gì bạn phải làm là lọc những việc phù hợp với mình và tiến hành quy trình ứng tuyển.
Vậy là bạn đang ở trong thị trường việc làm và đang 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 chứ không phải khó khăn hơn. Tại sao không xây dựng một trình thu thập dữ liệu web để thu thập và phân tích các bài đăng việc làm cho bạn? Sau khi bạn thiết lập, 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 thôi.
[Tuyên bố miễn trừ trách nhiệm! Nhiều trang web có thể hạn chế việc xóa 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 nơi 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 xem các trang web lưu trữ dữ liệu của họ. Ví dụ, Facebook, Linked In và Craiglist đôi khi quan tâm đến việc dữ liệu bị xóa khỏi các trang của họ. Vì vậy, nếu bạn muốn xóa, hãy tự chịu rủi ro].
Đâ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 của web scraping 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 ta sẽ viết một chương trình tuyệt vời để cập nhật các 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 khi xây dựng trình scraper này là "requests" và "BeautifulSoup".
Đầu tiên, chúng ta hãy xem trang mẫu mà chúng ta sẽ trích xuất từ indeed .
Cách cấu trúc URL rất quan trọng:
Cấu trúc URL này sẽ giúp ích rất nhiều khi chúng ta tiếp tục xây dựng trình thu thập dữ liệu và 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ỏ vào 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 phải biết mọi thứ. Bạn chỉ cần hiểu cấu trúc trang và phân cấp các thành phần khác nhau.
Bây giờ chúng ta đã phân tích cấu trúc trang. Điều này sẽ giúp chúng ta xây dựng mã theo thông tin đó để trích xuất dữ liệu theo lựa chọn của chúng ta. Trước tiên, hãy bắt đầu bằng cách nhập thư viện của chúng ta. Lưu ý rằng ở đây chúng ta cũng đang nhập "thời gian", điều này sẽ hữu ích để không làm quá tải máy chủ của trang web khi thu thập thông tin.
yêu cầu nhập khẩu nhập khẩu bs4 từ bs4 nhập khẩu BeautifulSoup nhập khẩu pandas như pd nhập khẩu thời gian
Đầu tiên chúng ta sẽ nhắm vào một trang duy nhất để rút ra từng thông tin mà chúng ta muốn,
URL = "https://www.indeed.com/jobs?q=data+scientist+%2420%2C000&l=New+York&start=10" #thực hiện yêu cầu của URL đã nêu ở trên: page = requests. get (URL) #chỉ định định dạng mong muốn của "page" bằ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ó như một chuỗi dài. soup = BeautifulSoup(page.text, "html.parser" ) #in soup theo định dạng cây có cấu trúc hơn giúp dễ đọc hơn print (soup.prettify())
Sử dụng prettify giúp bạn dễ dàng có được cái nhìn tổng quan về mã hóa 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 chúng ta quan tâm đều nằm trong biến “soup”. Chúng ta phải đào sâu hơn vào mã để lặp qua nhiều thẻ và thẻ phụ khác nhau để nắm bắt thông tin cần thiết.
Năm điểm chính cho mỗi bài đăng tuyển dụng là,
Chức danh công việc. Tên công ty. Địa điểm. Mức lương. Tóm tắt công việc.
Nếu chúng ta xem trang, có 15 bài đăng việc làm. Do đó, mã của chúng ta cũng phải tạo ra 15 mục khác nhau. Tuy nhiên, nếu mã cung cấp ít hơn số này, chúng ta có thể tham khảo lại trang và xem những gì không được ghi lại.
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 lại, chức năng mà chúng ta sẽ thấy bao gồm ba bước sau:
Pulling out all the <div> tags with class including “row”.Identifying <a> tags with attribute “data-tn-element”:”jobTitle”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ẽ tạo ra kết quả như thế này,
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 ta sẽ sử dụng câu lệnh if/else để trích xuất thông tin công ty từ mỗi nơi này. Để xóa 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) > 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)
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)
Lương là phần khó nhất để trích xuất từ các bài đăng việc làm. Hầu hết các bài đăng không công bố thông tin lương, trong khi một số khác có công bố, có thể có nhiều nơi để chọn thông tin đó. Vì vậy, chúng ta phải viết một mã có thể lấy nhiều mức lương từ nhiều nơi và nếu không tìm thấy mức lương nào, chúng ta cần tạo giá trị "Không tìm thấy" cho bất kỳ công việc nào không chứa mứ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)
Công việc cuối cùng là lấy 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 ta có thể lấy 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.
Bài viết liên quan
Cách thu thập dữ liệu Twitter bằng Python
Cách thu thập dữ liệu Instagram bằng Python
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, do đó 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 cách và theo yêu cầu của bạn. Chúng ta đã thấy thêm năm khía cạnh quan trọng của mỗi bài đăng việc làm 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 trích xuất của các bài đăng việc làm và bạn không cần phải tìm kiếm việc làm 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 mình 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 khi trích xuất các trang khác.
Nếu bạn đang tìm kiếm dịch vụ proxy, đừng quên xem qua ProxyScrape cho dịch vụ proxy dân dụng và cao cấp .