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 của bạn
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 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".
Đầ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:
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â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.
Năm điểm chính cho mỗi tin tuyển dụng là,
Chức danh công việc.Tên công ty.Location.Salary.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.
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,
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ẽ mang lại một đầu ra 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 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) > 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)
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)
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.
Artices liên quan
Cách cạo 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, 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ụng và cao cấp.