اذهب إلى المحتوى

السؤال

نشر
from typing import Text

import requests

from bs4 import BeautifulSoup

import csv 

from itertools import zip_longest 



jobs = []

company = []

location = []

skills = []

links = []

salary = []



result = requests.get("https://wuzzuf.net/search/jobs/?q=python&a=navbl")

source = result.content 

print(source)



soup = BeautifulSoup(source , "lxml") # >> lxml 

print (soup)  

job_title = soup.find_all("h2" ,{"class" : "css-m604qf"} ) 

company_name= soup.find_all("a" , {"class" :"css-17s97q8"})

company_location = soup.find_all("span" , {"class":"css-5wys0k"})

Job_skills = soup.find_all("div" , {"class":"css-y4udm8" })



for i in range(len(job_title)):

    jobs.append(job_title[i].text)    

    links.append(job_title[i].find("a").attrs['href'])    

    company.append(company_name[i].text)    

    location.append(company_location[i].text)    

    skills.append(Job_skills[i].text)    





for link in links:

    result = requests.get(link)    

    source = result.content    

    soup = BeautifulSoup(source, "lxml")    

    salaries = soup.find("span" , {"class":"css-4xky9y"})    

    print(salaries.text)    

    salary.append(salaries.text)    



print(jobs , company ,location , skills )

file_list = [jobs , company , location , skills , links , salary] 

exported = zip_longest(*file_list) 



:with open("C:/Users/KIMOSTORE/Documents/wzfny.csv", "w") as myfile

    wr = csv.writer(myfile)     

    wr.writerow(["jobs" , "company" , "location" , "skills" , "links" , "salary"])    

    wr.writerows(exported)    



سؤالي هنا :

انا وقفت عند خطوه ازاي اجيب الsalary من داخل صفحه الوظيفه 

 

Recommended Posts

  • 0
نشر

يجب عليك أن تجلب رابط صفحة من <a> لكل job ومن ثم تجلب صفحة الjob وتأخذ منها الSalary وهذه العملية تحصل داخل حلقة الfor هكذا تجلب الرابط :

for item in items:
    item = item.find('a', class_="css-o171kl")
    page_job = item['href']
    response = requests.get(page_job)
    soup_page = BeautifulSoup(response.content,"html.parser")

بعد ذلك داخل الصفحة من soup_page تجلب الsalary هذه الفكرة بكل بساطة.

  • 0
نشر
بتاريخ On 9/4/2022 at 23:11 قال Haroun Taha:

لسه المشكله متحلتش انا عملت زي ما حضرتك قلتلي 

:for link in links

    link = link.find('span', class_="css-4xky9y")

    page_job = link['href']

    response = requests.get("https://wuzzuf.net/jobs/p/4yZylKxIEYZb-Senior-Python-Django-Developer-RDI-Giza-Egypt?o=1&l=sp&t=sj&a=python|search-v3|navbl&s=26283954")

    soup_page = BeautifulSoup(response.content,"html.parser")

 

ظهرلي كدا في الterminal

 item = item.find('span', class_="css-4xky9y")
TypeError: find() takes no keyword arguments

 

 

  • 0
نشر
بتاريخ 7 دقائق مضت قال Belal Elsayed:

:for link in links

    link = link.find('span', class_="css-4xky9y")

    page_job = link['href']

    response = requests.get("https://wuzzuf.net/jobs/p/4yZylKxIEYZb-Senior-Python-Django-Developer-RDI-Giza-Egypt?o=1&l=sp&t=sj&a=python|search-v3|navbl&s=26283954")

    soup_page = BeautifulSoup(response.content,"html.parser")

 

ظهرلي كدا في الterminal

 item = item.find('span', class_="css-4xky9y")
TypeError: find() takes no keyword arguments

 

 

لماذا span ؟ ضع العنصر a كما وضعت أنا راجع إجابتي في الأعلى بشكل جيد ومن العنصر a سوف نجلب الhref ونبعت به الطلب

  • 0
نشر

انا عندي نفس المشكلة برضه انا بجيب ال Page بتاعت كل وظيفة ولكن عشان اجيب ال data بتاعتها سواء مرتب أو requirements مفيش اي حاجة بتظهر

#loop to extract needed info
for i in range(len(job_titles)):
    job_title.append(job_titles[i].text)
    links.append("https://wuzzuf.net"+job_titles[i].find("a").attrs['href'])
    company_name.append(company_names[i].text)
    location_name.append(location_names[i].text)
    job_skill.append(job_skills[i].text)

for link in links:
    result = requests.get(link)
    src = result.content
    soup = BeautifulSoup(src,"html.parser")
    salaries = soup.find_all("div", {"class": "css-rcl8e5"}).find("span", {"class": "css-4xky9y"})
    salary.append(salaries)
    req_section = soup.find('div', {'class': 'css-1t5f0fr'})
    respond_text = ""
    for li in req_section.find_all("li"):
        respond_text += li.text + " | "
    job_req.append(respond_text)

 

  • 0
نشر
بتاريخ 1 ساعة قال محمد النجار10:

انا عندي نفس المشكلة برضه انا بجيب ال Page بتاعت كل وظيفة ولكن عشان اجيب ال data بتاعتها سواء مرتب أو requirements مفيش اي حاجة بتظهر

#loop to extract needed info
for i in range(len(job_titles)):
    job_title.append(job_titles[i].text)
    links.append("https://wuzzuf.net"+job_titles[i].find("a").attrs['href'])
    company_name.append(company_names[i].text)
    location_name.append(location_names[i].text)
    job_skill.append(job_skills[i].text)

for link in links:
    result = requests.get(link)
    src = result.content
    soup = BeautifulSoup(src,"html.parser")
    salaries = soup.find_all("div", {"class": "css-rcl8e5"}).find("span", {"class": "css-4xky9y"})
    salary.append(salaries)
    req_section = soup.find('div', {'class': 'css-1t5f0fr'})
    respond_text = ""
    for li in req_section.find_all("li"):
        respond_text += li.text + " | "
    job_req.append(respond_text)
 

 

 يجب العثور على عنصر HTML الذي يحتوي على المعلومات المطلوبة واستخراجها باستخدام BeautifulSoup. حيث يمكن القيام بذلك باستخدام الكلاس الخاص بعنصر HTML الذي يحتوي على المعلومات المطلوبة.

وباستطاعتك استخدام ميثود find_all للبحث عن جميع العناصر التي تحتوي على الكلاس المحدد ثم الوصول لنص الراتب باستخدام text attribute.

ويمكن تحديد الكلاس المحتوي على الراتب عن طريق فحص مصدر الصفحة والعثور على العنصر الذي يحتوي على الراتب، أو بإمكانك استخدام ميثود البحث المتقدم select للعثور على العنصر المحتوي على الراتب عن طريق تحديد مسار CSS المطلوب.

في النهاية، يجب أن يكون لديك شيء ما مثل هذا الكود:

for link in links:
    result = requests.get(link)
    src = result.content
    soup = BeautifulSoup(src,"html.parser")
    salary_element = soup.select_one("div.css-rcl8e5 > span.css-4xky9y")
    salary.append(salary_element.text if salary_element else None)

والكود يستخدم select_one للبحث عن العنصر الذي يحتوي على الراتب باستخدام المسار CSS المحدد ثم يستخرج النص الموجود داخل العنصر. في حال عدم العثور على العنصر، سيتم إضافة None إلى قائمة الرواتب.

انضم إلى النقاش

يمكنك أن تنشر الآن وتسجل لاحقًا. إذا كان لديك حساب، فسجل الدخول الآن لتنشر باسم حسابك.

زائر
أجب على هذا السؤال...

×   لقد أضفت محتوى بخط أو تنسيق مختلف.   Restore formatting

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   جرى استعادة المحتوى السابق..   امسح المحرر

×   You cannot paste images directly. Upload or insert images from URL.

  • إعلانات

  • تابعنا على



×
×
  • أضف...