تجريف الويب لإعلانات الوظائف هو اختصار بديل للباحثين عن عمل لإنشاء قاعدة بيانات لفرص العمل الحالية. يقول راندستاد إن متوسط البحث عن وظيفة قد يستمر من خمسة إلى ستة أشهر ، من وقت تقديم الطلب حتى يتم شغل المنصب. ماذا لو كان لديك حل يمكن أن يقلل من عبء تصفح جميع بوابات الوظائف واختيار الحل المناسب لك؟
ستأخذك هذه المقالة في رحلة تشرح كيفية القيام بتجريف الويب لإعلانات الوظائف. لذلك ، أنت في سوق العمل وتحاول معرفة أفضل وظيفة. لكنك تريد أن تلعب بشكل أكثر ذكاء وليس أصعب. لماذا لا تنشئ مكشطة ويب لجمع وتحليل إعلانات الوظائف نيابة عنك. بمجرد تعيينه ، سيوفر لك ثروات البيانات بتنسيق مرتب لطيف ، لذلك لن تضطر إلى التحقق منه يدويا مرارا وتكرارا. هيا بنا نبدأ.
تجريف الويب لإعلانات الوظائف هو الحل الذي يجمع البيانات تلقائيا من بوابات وظائف متعددة ويقلل من وقتك في جلب البيانات من كل موقع ويب. إن امتلاك مثل هذه الأداة التي يمكن أن توفر لك قاعدة بيانات كاملة من فرص العمل سوف يبسط مهمتك من خلال عدة طيات. كل ما عليك فعله هو التصفية التي تناسبك والمضي قدما في عملية التقديم.
لذلك ، أنت في سوق العمل وتحاول معرفة أفضل وظيفة. لكنك تريد أن تلعب بشكل أكثر ذكاء وليس أصعب. لماذا لا تنشئ مكشطة ويب لجمع وتحليل إعلانات الوظائف نيابة عنك؟ بمجرد تعيينه ، سيوفر لك ثروات البيانات بتنسيق مرتب لطيف ، لذلك لن تضطر إلى التحقق منه يدويا مرارا وتكرارا. هيا بنا نبدأ.
[إخلاء المسؤولية! يمكن للعديد من مواقع الويب تقييد إلغاء البيانات من صفحاتها. قد يخضع المستخدمون لمشكلات قانونية اعتمادا على مكان وكيفية محاولتهم استخراج المعلومات. لذلك يحتاج المرء إلى توخي الحذر الشديد عند النظر إلى المواقع التي تضم بياناته. على سبيل المثال ، يمانع Facebook و Linked In و Craiglist أحيانا إذا تم إلغاء البيانات من صفحاتهم. لذلك إذا كنت تريد الكشط ، اكشط على مسؤوليتك الخاصة].
ستكون هذه مقالة أساسية للغاية سنرى فيها أساسيات تجريف الويب من خلال استخراج بعض المعلومات المفيدة المتعلقة بالوظائف المتعلقة ب "علوم البيانات" من indeed.com. سنكتب برنامجا رائعا يقوم بتحديث الوظائف عدة مرات يدويا. بعض المكتبات المفيدة التي ستكون مفيدة للغاية أثناء بناء هذه الكاشطة هي "الطلبات" و "BeautifulSoup".
أولا ، دعنا نلقي نظرة على صفحة العينة التي سنستخرج منها بالفعل.
الطريقة التي يتم بها تنظيم عنوان URL مهمة:
ستكون بنية عنوان URL هذه ذات فائدة كبيرة بينما نواصل بناء الكاشطة وجمع البيانات من صفحات متعددة.
يمكن لمتصفح Chrome فحص بنية HTML للصفحة بالنقر بزر الماوس الأيمن عليها واستخدام خيار فحص العنصر. ستظهر قائمة على اليمين ، وستعرض أيضا علامات العناصر المتداخلة ، وعندما تضع المؤشر على هذه العناصر ، ستبرز هذا الجزء من الشاشة.
بالنسبة لهذه المقالة ، أفترض أنك تعرف أساسيات HTML مثل العلامات و div وما إلى ذلك ، ولكن لحسن الحظ لا تحتاج إلى معرفة كل شيء. تحتاج فقط إلى فهم بنية الصفحة والتسلسل الهرمي للمكونات المختلفة.
الآن قمنا بتحليل بنية الصفحة. سيساعدنا هذا في إنشاء كود وفقا لتلك المعلومات لسحب البيانات التي نختارها. لنبدأ أولا باستيراد مكتباتنا. لاحظ أننا هنا نقوم أيضا باستيراد "الوقت" ، والذي سيكون مفيدا لعدم إرباك خادم الموقع عند كشط المعلومات.
طلبات الاستيراد
استيراد BS4
من bs4 استيراد حساء جميل
استيراد الباندا كما PD
وقت الاستيراد
سنقوم أولا باستهداف الصفحة الواحدة لسحب كل جزء من المعلومات التي نريدها ،
URL = "https://www.indeed.com/jobs?q=data+scientist+%2420%2C000&l=New+York&start=10"
#conducting طلب عنوان URL المذكور أعلاه:
الصفحة = requests.get (عنوان URL)
#specifying التنسيق المطلوب ل "الصفحة" باستخدام محلل HTML - وهذا يسمح ل Python بقراءة المكونات المختلفة للصفحة ، بدلا من معاملتها كسلسلة طويلة واحدة.
حساء = حساء جميل (صفحة.نص ، "html.parser")
#printing الحساء بتنسيق شجرة أكثر تنظيما يجعل القراءة أسهل
طباعة (حساء.بريتيفي ())
يسهل استخدام prettify الحصول على نظرة عامة على ترميز HTML للصفحة ويوفر مخرجات مثل هذا ،
الآن جميع المعلومات الموجودة على صفحتنا ذات الاهتمام موجودة في "الحساء" المتغير. يتعين علينا البحث أكثر في الكود للتكرار من خلال العديد من العلامات والعلامات الفرعية لالتقاط المعلومات المطلوبة.
خمس نقاط رئيسية لكل إعلان وظيفة هي ،
إذا ألقينا نظرة على الصفحة ، فهناك 15 وظيفة شاغرة. لذلك يجب أن ينشئ الكود الخاص بنا أيضا 15 عنصرا مختلفا. ومع ذلك ، إذا كان الرمز يوفر أقل من هذا ، فيمكننا الرجوع إلى الصفحة ومعرفة ما لم يتم التقاطه.
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.
إذا لخصنا ، فإن الوظيفة التي سنراها تتضمن الخطوات الثلاث التالية ،
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)
سينتج عن هذا الرمز إخراج مثل هذا ،
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”.
سنستخدم عبارات if / else لاستخراج معلومات الشركة من كل من هذه الأماكن. لإزالة المسافات البيضاء حول أسماء الشركات عند إخراجها ، سنستخدم inputting.strip() في النهاية.
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)
الراتب هو الجزء الأكثر تحديا لاستخراجه من إعلانات الوظائف. معظم المنشورات لا تنشر معلومات الراتب على الإطلاق ، في حين أن الآخرين الذين يفعلون ذلك ، يمكن أن يكون هناك أماكن متعددة لاختيار ذلك. لذلك يتعين علينا كتابة رمز يمكنه الحصول على رواتب متعددة من أماكن متعددة ، وإذا لم يتم العثور على راتب ، فنحن بحاجة إلى إنشاء قيمة عنصر نائب "لم يتم العثور على شيء" لأي وظائف لا تحتوي على راتب.
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)
المهمة النهائية هي الحصول على ملخص الوظيفة. ومع ذلك ، لا يمكن الحصول على ملخصات الوظائف لكل منصب معين لأنها غير مدرجة في HTML من صفحة Indeed معينة. يمكننا الحصول على بعض المعلومات حول كل وظيفة مما يتم توفيره. يمكننا استخدام السيلينيوم لهذا الغرض.
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.
هناك ما يكفي من بوابات الوظائف التي يمكن أن تعلمك بالوظائف التي تطابق ملفك الشخصي. ومع ذلك ، فإن وجود حل تجريف الوظائف سيوفر لك قائمة كاملة بالوظائف والوصف كقاعدة بيانات مفيدة. سيتيح لك ذلك الحصول على رؤية أفضل لجميع فرص العمل في مكان واحد.
عادة ما يواجه تجريف الويب تحديات معينة مثل كتل IP والكتل الجغرافية والسرعة المحدودة. سيواجه كشط الوظائف من بوابات الوظائف مثل هذه التحديات أيضا. لتجاوز كل هذه المشاكل ، يمكن أن تساعدك عناوين الوكيل في عناوين IP للموقع المطلوب وضمان عدم الكشف عن هويته
الطلبات و BeautifulSoup و Pandas هي مكتبات بيثون شائعة جدا لكشط البيانات المتعلقة بالوظيفة من مواقع الويب. مكتبة الطلبات هي مكتبة Python الأكثر شيوعا المستخدمة لإرسال طلبات الويب ، في حين أن BeautifulSoup مسؤولة عن تحليل البيانات ، وستساعد مكتبة Pandas في عمليات بنية البيانات.
الأعمال الفنية ذات الصلة
كيفية كشط تويتر باستخدام بايثون
كيفية كشط إينستاجرام باستخدام بايثون
كيفية كشط رديت باستخدام بايثون
في هذه المقالة ، رأينا ما هو تجريف الويب وكيف يمكن أن يكون مفيدا في حياتنا اليومية من خلال أخذ مثال عملي على كشط بيانات الوظيفة من صفحات الويب في Indeed. يرجى ملاحظة أن النتائج التي تحصل عليها قد تكون مختلفة عن هذه النتائج لأن الصفحات ديناميكية ، وبالتالي فإن المعلومات تتغير باستمرار بمرور الوقت.
تجريف الويب هو أسلوب لا يصدق إذا تم القيام به بشكل صحيح ووفقا لمتطلباتك. لقد رأينا كذلك الجوانب الخمسة المهمة لكل إعلان عن وظيفة وكيفية استخراجها. عندما تجرب هذا الرمز بنفسك ، ستكون قد كشطت بيانات إعلانات الوظائف ، ولا تحتاج إلى البحث عن الوظائف يدويا ، وهو أمر مذهل. يمكن أيضا تطبيق نفس التقنية على صفحات الويب الأخرى ، ولكن قد يختلف هيكلها. لذلك يحتاج المرء إلى تحسين الكود الخاص به وفقا لذلك. ولكن يتم تغطية جميع الأساسيات في هذه المقالة ، لذلك لن تكون هناك أي صعوبة في تجريف الصفحات الأخرى أيضا.
إذا كنت تبحث عن خدمات بروكسي ، فلا تنس إلقاء نظرة على ProxyScrapeالوكلاء السكنية والمتميزة.