ملازمت کے شکاریوں ، آجروں ، یا ملازمت کی منڈی میں رجحانات کی نگرانی کرنے والے کسی بھی فرد کے ل available ، واقعی میں دستیاب ملازمتوں کی فہرست کو کھرچنا مددگار معلومات فراہم کرسکتا ہے۔ اس خاص ٹیوٹوریل میں ، ہم ویب سکریپنگ کے لئے ڈرامہ رائٹ اور HTML مواد کی تجزیہ کے لئے LXML کو یکجا کریں گے تاکہ ملازمت کی تفصیلات اکٹھا کریں جس میں اس کے عنوان ، بھرتی کرنے والی کمپنی کا نام ، مقام ، ملازمت کی تفصیل ، ملازمت کی پوسٹنگ لنک ، اور آخر میں پیش کریں گے۔ CSV فائل میں معلومات کو محفوظ کرکے نتائج۔
کامیابی کے ساتھ سکریپنگ انجام دینے کے لئے ، مندرجہ ذیل ازگر لائبریریوں کو انسٹال کرنے کی ضرورت ہے۔
براؤزر آٹومیشن کے لئے ڈرامہ نگار:
pip install playwright
HTML کو پارس کرنے کے لئے LXML:
pip install lxml
کسی CSV فائل میں ڈیٹا کو بچانے کے لئے پانڈاس:
pip install pandas
پلے رائٹ براؤزر انسٹال کریں:
ڈرامہ نگار انسٹال کرنے کے بعد ، ضروری براؤزر بائنریز انسٹال کرنے کے لئے اس کمانڈ کو چلائیں:
playwright install
ڈرامہ نگار آپ کو ویب براؤزرز کے ساتھ خودکار اور تعامل کرنے کی اجازت دیتا ہے۔ ہم کرومیم براؤزر لانچ کرنے ، ویب پیج پر جائیں ، اور اس کے مواد کو نکالنے کے لئے ڈرامہ نگار ترتیب دے کر شروع کرتے ہیں۔ یہاں ہم ڈرامہ نگار کے ذریعے پراکسی بھی پاس کرسکتے ہیں۔
پراکسی کیوں استعمال کریں؟
ویب سائٹوں میں اکثر اسی 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 کو اس مقصد کے لئے استعمال کیا جاتا ہے کیونکہ یہ 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
اب جب کہ ہمارے پاس براؤزر آٹومیشن اور پارسنگ مراحل دونوں ترتیب دیئے گئے ہیں ، آئیے ان کو واقعی صفحے سے ملازمت کی فہرستوں کو کھرچنے کے لئے جوڑیں۔
وضاحت:
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())
درحقیقت اپنی ملازمت کی فہرستوں کا صفحہ بندی کرتا ہے ، اور آپ متعدد صفحات کو سنبھالنے کے لئے آسانی سے کھرچنی کو بڑھا سکتے ہیں۔ صفحہ یو آر ایل کو استفسار پیرامیٹر اسٹارٹ کا استعمال کرتے ہوئے ایڈجسٹ کیا گیا ہے ، جو ہر نئے صفحے کے لئے 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))
اپنی کھرچنے کی کوششوں میں ملازمت کے مخصوص عنوانات یا مطلوبہ الفاظ کو نشانہ بنانے کے ل 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