ازگر کا استعمال کرتے ہوئے واقعی ملازمت کی فہرستوں کو کھرچنے کا طریقہ

تبصرے: 0

ملازمت کے شکاریوں ، آجروں ، یا ملازمت کی منڈی میں رجحانات کی نگرانی کرنے والے کسی بھی فرد کے ل available ، واقعی میں دستیاب ملازمتوں کی فہرست کو کھرچنا مددگار معلومات فراہم کرسکتا ہے۔ اس خاص ٹیوٹوریل میں ، ہم ویب سکریپنگ کے لئے ڈرامہ رائٹ اور HTML مواد کی تجزیہ کے لئے LXML کو یکجا کریں گے تاکہ ملازمت کی تفصیلات اکٹھا کریں جس میں اس کے عنوان ، بھرتی کرنے والی کمپنی کا نام ، مقام ، ملازمت کی تفصیل ، ملازمت کی پوسٹنگ لنک ، اور آخر میں پیش کریں گے۔ CSV فائل میں معلومات کو محفوظ کرکے نتائج۔

شرائط

کامیابی کے ساتھ سکریپنگ انجام دینے کے لئے ، مندرجہ ذیل ازگر لائبریریوں کو انسٹال کرنے کی ضرورت ہے۔

براؤزر آٹومیشن کے لئے ڈرامہ نگار:


pip install playwright

HTML کو پارس کرنے کے لئے LXML:


pip install lxml

کسی CSV فائل میں ڈیٹا کو بچانے کے لئے پانڈاس:


pip install pandas

پلے رائٹ براؤزر انسٹال کریں:

ڈرامہ نگار انسٹال کرنے کے بعد ، ضروری براؤزر بائنریز انسٹال کرنے کے لئے اس کمانڈ کو چلائیں:


playwright install

مرحلہ 1: ویب سکریپنگ کے لئے پلے رائٹ کا قیام

ڈرامہ نگار آپ کو ویب براؤزرز کے ساتھ خودکار اور تعامل کرنے کی اجازت دیتا ہے۔ ہم کرومیم براؤزر لانچ کرنے ، ویب پیج پر جائیں ، اور اس کے مواد کو نکالنے کے لئے ڈرامہ نگار ترتیب دے کر شروع کرتے ہیں۔ یہاں ہم ڈرامہ نگار کے ذریعے پراکسی بھی پاس کرسکتے ہیں۔

پراکسی کیوں استعمال کریں؟

ویب سائٹوں میں اکثر اسی IP پتے سے بار بار درخواستوں کو روکنے کے لئے شرح کو محدود کرنے یا اینٹی سکریپنگ اقدامات ہوتے ہیں۔ پراکسی آپ کی اجازت دیتے ہیں:

  • آئی پی مسدود کرنے سے پرہیز کریں: پتہ لگانے سے بچنے کے لئے اپنی درخواستوں کو مختلف آئی پی کے ذریعے تقسیم کریں۔
  • جغرافیائی محل وقوع کو نظرانداز کرنا: جغرافیائی مقامات کی بنیاد پر ملازمت کی فہرستوں تک رسائی حاصل کی جاسکتی ہے۔
  • گمنامی: سکریپنگ کے عمل کے دوران اپنا اصل IP چھپائیں اور گمنام رہیں۔

import asyncio
from playwright.async_api import async_playwright

async def get_page_content(url):
    async with async_playwright() as p:
        browser = await p.chromium.launch(
            headless=False,
            proxy = {
                'server': '',
                'username': '',
                'password': ''
            }
        )  # Headed browser
        page = await browser.new_page()
        await page.goto(url)
        
        # Extract the page's content
        content = await page.content()
        
        await browser.close()  # Close the browser once done
        return content

اس کوڈ میں ، async_play رائٹ ایک سربراہ براؤزر لانچ کرتا ہے ، مخصوص URL پر تشریف لے جاتا ہے ، اور صفحہ کا مواد لاتا ہے۔

LXML کا استعمال کرتے ہوئے HTML مواد کو پارس کرنا

اگلا ، ہم معنی خیز ڈیٹا نکالنے کے لئے صفحہ کے مواد کی تجزیہ کریں گے۔ LXML کو اس مقصد کے لئے استعمال کیا جاتا ہے کیونکہ یہ XPath کا استعمال کرتے ہوئے HTML مواد کی تجزیہ اور استفسار کرنے کے لئے مضبوط مدد فراہم کرتا ہے۔


from lxml import html

def parse_job_listings(content):
    # Parse HTML content
    parser = html.fromstring(content)
    
    # Extract each job posting using XPath
    job_posting = parser.xpath('//ul[@class="css-zu9cdh eu4oa1w0"]/li')
    
    jobs_data = []
    for element in job_posting[:-1]:  # Skip the last element if it's an ad or irrelevant
        title = ''.join(element.xpath('.//h2/a/span/@title'))
        if title:
            link = ''.join(element.xpath('.//h2/a/@href'))
            location = ''.join(element.xpath('.//div[@data-testid="text-location"]/text()'))
            description = ', '.join(element.xpath('.//div[@class="css-9446fg eu4oa1w0"]/ul//li/text()'))
            company_name = ''.join(element.xpath('.//span[@data-testid="company-name"]/text()'))

            # Append extracted data to the jobs_data list
            jobs_data.append({
                'Title': title,
                'Link': f"https://www.indeed.com{link}",
                'Location': location,
                'Description': description,
                'Company': company_name
            })
    
    return jobs_data

مرحلہ 2: ملازمت کی فہرستوں کو کھرچنا

اب جب کہ ہمارے پاس براؤزر آٹومیشن اور پارسنگ مراحل دونوں ترتیب دیئے گئے ہیں ، آئیے ان کو واقعی صفحے سے ملازمت کی فہرستوں کو کھرچنے کے لئے جوڑیں۔

وضاحت:

  • get_page_content(url):پلے رائٹ کا استعمال کرتے ہوئے صفحہ کا مواد لاتا ہے۔
  • parse_job_listings(content): LXML کا استعمال کرتے ہوئے مواد کو پارس کرتا ہے اور ملازمت کا ڈیٹا نکالتا ہے۔
  • main(): کھرچنے کے عمل کو آرکیسٹریٹ کرتا ہے ، ڈیٹا لانے اور اسے CSV فائل میں محفوظ کرتا ہے۔

import pandas as pd

async def scrape_indeed_jobs(url):
    # Step 1: Get page content using Playwright
    content = await get_page_content(url)
    
    # Step 2: Parse the HTML and extract job details
    jobs_data = parse_job_listings(content)
    
    return jobs_data

# URL to scrape
url = 'https://www.indeed.com/q-usa-jobs.html'

# Scraping and saving data
async def main():
    # Scrape job data from the specified URL
    jobs = await scrape_indeed_jobs(url)
    
    # Step 3: Save data to CSV using pandas
    df = pd.DataFrame(jobs)
    df.to_csv('indeed_jobs.csv', index=False)
    
    print("Data saved to indeed_jobs.csv")

# Run the main function
asyncio.run(main())

مرحلہ 3: صفحہ بندی کی حمایت شامل کرنا

درحقیقت اپنی ملازمت کی فہرستوں کا صفحہ بندی کرتا ہے ، اور آپ متعدد صفحات کو سنبھالنے کے لئے آسانی سے کھرچنی کو بڑھا سکتے ہیں۔ صفحہ یو آر ایل کو استفسار پیرامیٹر اسٹارٹ کا استعمال کرتے ہوئے ایڈجسٹ کیا گیا ہے ، جو ہر نئے صفحے کے لئے 10 سے بڑھتا ہے۔

متعدد صفحات سے ڈیٹا اکٹھا کرنے کے ل your اپنے کھرچنے کی فعالیت کو بڑھانے کے ل you ، آپ ایک فنکشن کو نافذ کرسکتے ہیں جسے سکریپ_مولٹپل_پیجز کہتے ہیں۔ یہ فنکشن اسٹارٹ پیرامیٹر کو اضافی طور پر ایڈجسٹ کرکے بیس یو آر ایل میں ترمیم کرے گا ، اور بعد کے صفحات تک رسائی کو قابل بنائے گا۔ ہر صفحے کے ذریعے منظم طریقے سے ترقی کرکے ، آپ جمع کردہ ڈیٹا کی گنجائش اور مقدار کو بڑھا سکتے ہیں ، جیسے خالی آسامیوں ، اور زیادہ جامع ڈیٹاسیٹ کو یقینی بناتے ہوئے۔


async def scrape_multiple_pages(base_url, pages=3):
    all_jobs = []
    
    for page_num in range(pages):
        # Update URL for pagination
        url = f"{base_url}&start={page_num * 10}"
        print(f"Scraping page: {url}")
        
        # Scrape job data from each page
        jobs = await scrape_indeed_jobs(url)
        all_jobs.extend(jobs)
    
    # Save all jobs to CSV
    df = pd.DataFrame(all_jobs)
    df.to_csv('indeed_jobs_all_pages.csv', index=False)
    print("Data saved to indeed_jobs_all_pages.csv")

# Scrape multiple pages of job listings
asyncio.run(scrape_multiple_pages('https://www.indeed.com/jobs?q=usa', pages=3))

مرحلہ 4: ملازمت کی تلاش کے سوالات کو اپنی مرضی کے مطابق بنانا

اپنی کھرچنے کی کوششوں میں ملازمت کے مخصوص عنوانات یا مطلوبہ الفاظ کو نشانہ بنانے کے ل you'll ، آپ کو واقعی استعمال شدہ یو آر ایل میں استفسار سرچ پیرامیٹر کو تشکیل دینے کی ضرورت ہوگی۔ یہ تخصیص کھرچنی کو مخصوص ملازمتوں یا شعبوں سے متعلق ڈیٹا اکٹھا کرنے کی اجازت دیتا ہے۔ مثال کے طور پر ، اگر آپ http://www.indeed.com پر ازگر ڈویلپر کی پوزیشنوں کی تلاش کر رہے ہیں تو ، آپ استفسار پیرامیٹر کو ایڈجسٹ کریں گے تاکہ "ازگر+ڈویلپر" یا متعلقہ مطلوبہ الفاظ شامل ہوں۔


query = "python+developer"
base_url = f"https://www.indeed.com/jobs?q={query}"
asyncio.run(scrape_multiple_pages(base_url, pages=3))

اس پیرامیٹر کو اپنے ڈیٹا اکٹھا کرنے کی ضروریات کے مطابق ترمیم کرکے ، آپ اپنے اعداد و شمار کو جمع کرنے کے عمل کی لچک اور کارکردگی کو بڑھا کر مخصوص ملازمتوں پر اپنی سکریپنگ پر توجہ مرکوز کرسکتے ہیں۔ یہ نقطہ نظر خاص طور پر ملازمت کی منڈی کے متحرک مطالبات کو اپنانے کے لئے مفید ہے۔

مکمل کوڈ


import asyncio
from playwright.async_api import async_playwright
from lxml import html
import pandas as pd

# Step 1: Fetch page content using Playwright
async def get_page_content(url):
    async with async_playwright() as p:
        browser = await p.chromium.launch(
            headless=False
            proxy = {
                'server': '',
                'username': '',
                'password': ''
            }
        )  # Run browser in headed mode
        page = await browser.new_page()
        await page.goto(url, wait_until='networkidle')
        
        # Extract page content
        content = await page.content()
        await browser.close()  # Close browser after use
        return content

# Step 2: Parse the HTML content using lxml
def parse_job_listings(content):
    # Parse the HTML using lxml
    parser = html.fromstring(content)
    
    # Select individual job postings using XPath
    job_posting = parser.xpath('//ul[@class="css-zu9cdh eu4oa1w0"]/li')
    
    # Extract job data
    jobs_data = []
    for element in job_posting[:-1]:
        title = ''.join(element.xpath('.//h2/a/span/@title'))
        if title:
            link = ''.join(element.xpath('.//h2/a/@href'))
            location = ''.join(element.xpath('.//div[@data-testid="text-location"]/text()'))
            description = ', '.join(element.xpath('.//div[@class="css-9446fg eu4oa1w0"]/ul//li/text()'))
            company_name = ''.join(element.xpath('.//span[@data-testid="company-name"]/text()'))

            # Append extracted data to the jobs_data list
            jobs_data.append({
                'Title': title,
                'Link': f"https://www.indeed.com{link}",
                'Location': location,
                'Description': description,
                'Company': company_name
            })
    
    return jobs_data

# Step 3: Scrape Indeed jobs for a single page
async def scrape_indeed_jobs(url):
    # Get page content using Playwright
    content = await get_page_content(url)
    
    # Parse HTML and extract job data
    jobs_data = parse_job_listings(content)
    
    return jobs_data

# Step 4: Handle pagination and scrape multiple pages
async def scrape_multiple_pages(base_url, query, pages=3):
    all_jobs = []
    
    for page_num in range(pages):
        # Update the URL to handle pagination and add the search query
        url = f"{base_url}?q={query}&start={page_num * 10}"
        print(f"Scraping page: {url}")
        
        # Scrape jobs for the current page
        jobs = await scrape_indeed_jobs(url)
        all_jobs.extend(jobs)
    
    # Save all jobs to a CSV file
    df = pd.DataFrame(all_jobs)
    df.to_csv(f'indeed_jobs_{query}.csv', index=False)
    print(f"Data saved to indeed_jobs_{query}.csv")

# Function to run the scraper with dynamic query input
async def run_scraper():
    # Step 5: Ask user for input query and number of pages to scrape
    query = input("Enter the job title or keywords to search (e.g., python+developer): ")
    pages = int(input("Enter the number of pages to scrape: "))
    
    # Scrape jobs across multiple pages based on the query
    base_url = 'https://www.indeed.com/jobs'
    await scrape_multiple_pages(base_url, query, pages)

# Run the scraper
asyncio.run(run_scraper())

ہموار سکریپنگ کے عمل کو یقینی بنانے اور بلاکس اور کیپچا کی نمائش کے خطرے کو کم کرنے کے ل the ، صحیح پراکسی سرور کا انتخاب کرنا بہت ضروری ہے۔ سکریپنگ کے لئے سب سے زیادہ بہترین آپشن ISP پراکسی ہیں ، جو تیز رفتار اور کنکشن استحکام فراہم کرتے ہیں ، نیز ایک اعلی اعتماد کا عنصر بھی ہوتا ہے ، جس کی وجہ سے وہ پلیٹ فارم کے ذریعہ شاذ و نادر ہی مسدود ہوجاتے ہیں۔ اس قسم کا پراکسی مستحکم ہے ، لہذا بڑے پیمانے پر سکریپنگ کے ل is ، آئی ایس پی پراکسیوں کا ایک تالاب بنانا اور ان کی باقاعدہ تبدیلی کے لئے آئی پی گردش کو تشکیل دینا ضروری ہے۔ ایک متبادل آپشن رہائشی پراکسی ہوگا ، جو متحرک ہیں اور اس میں پراکسی سرورز کی دیگر اقسام کے مقابلے میں وسیع جغرافیائی کوریج ہے۔

تبصرے:

0 تبصرے