Maidir le sealgairí poist, fostóirí, nó aon duine a dhéanann monatóireacht ar threochtaí sa mhargadh fostaíochta, d’fhéadfadh sé go gcuirfeadh scríobadh liosta na bpost atá ar fáil faisnéis chabhrach ar fáil. Sa rang teagaisc áirithe seo, cuirfimid an drámadóir le chéile le haghaidh scríobadh gréasáin agus LXML le haghaidh parsáil ábhair HTML chun sonraí an phoist a bhailiú lena n -áirítear a theideal, ainm na cuideachta earcaíochta, suíomh, cur síos poist Torthaí tríd an bhfaisnéis a shábháil i gcomhad CSV.
Chun scríobadh a dhéanamh go rathúil, ní mór na leabharlanna Python seo a leanas a shuiteáil.
Drámadóir le haghaidh uathoibriú brabhsálaí:
pip install playwright
LXML chun HTML a pharsáil:
pip install lxml
Pandas chun sonraí a shábháil ar chomhad CSV:
pip install pandas
Suiteáil brabhsálaithe drámadóra :
Tar éis an drámadóir a shuiteáil, rith an t -ordú seo chun na binaries brabhsálaí riachtanacha a shuiteáil:
playwright install
Ceadaíonn an drámadóir duit brabhsálaithe gréasáin a uathoibriú agus idirghníomhú. Tosaímid trí dhrámadóir a bhunú chun brabhsálaí cróimiam a sheoladh, cuairt a thabhairt ar leathanach gréasáin, agus a ábhar a bhaint amach. Anseo is féidir linn proxies a chur ar aghaidh tríd an drámadóir freisin.
Cén fáth a n -úsáidtear proxies?
Is minic a bhíonn bearta a theorannaíonn ráta nó frith-scrapáil i bhfeidhm ag láithreáin ghréasáin chun iarratais arís agus arís eile a bhlocáil ón seoladh IP céanna. Tugann seachvótálaithe deis duit:
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': ''
}
) # Brabhsálaí faoi cheannas
page = await browser.new_page()
await page.goto(url)
# Sliocht ábhar an leathanaigh
content = await page.content()
await browser.close() # Dún an brabhsálaí uair amháin
return content
Sa chód seo, seolann Async_Playwright brabhsálaí faoi cheannas, nascleanann sé chuig an URL sonraithe, agus faigheann sé ábhar an leathanaigh.
Ansin, déanfaimid ábhar an leathanaigh a pharsáil chun sonraí bríocha a bhaint amach. Baintear úsáid as LXML chun na críche seo toisc go dtugann sé tacaíocht láidir do pharsáil agus do cheist HTML ag baint úsáide as XPath.
from lxml import html
def parse_job_listings(content):
# Ábhar HTML a pharsáil
parser = html.fromstring(content)
# Sliocht gach postáil poist ag úsáid xpath
job_posting = parser.xpath('//ul[@class="css-zu9cdh eu4oa1w0"]/li')
jobs_data = []
for element in job_posting[:-1]: # Scipeáil an ghné dheireanach más ad nó neamhábhartha é
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()'))
# Cuir sonraí a bhaint as an liosta jobs_data
jobs_data.append({
'Title': title,
'Link': f"https://www.indeed.com{link}",
'Location': location,
'Description': description,
'Company': company_name
})
return jobs_data
Anois go bhfuil céimeanna uathoibrithe agus parsála an bhrabhsálaí curtha ar bun againn, déanaimis iad a chur le chéile chun liostaí poist a scrape ón leathanach go deimhin.
Míniú :
import pandas as pd
async def scrape_indeed_jobs(url):
# Céim 1: Faigh Ábhar Leathanach ag baint úsáide as drámadóir
content = await get_page_content(url)
# Céim 2: An HTML a pharsáil agus Sonraí Poist Sliocht
jobs_data = parse_job_listings(content)
return jobs_data
# Url go scrape
url = 'https://www.indeed.com/q-usa-jobs.html'
# Sonraí a scríobadh agus a shábháil
async def main():
# Scrape sonraí poist ón URL sonraithe
jobs = await scrape_indeed_jobs(url)
# Céim 3: Sábháil sonraí chuig CSV ag úsáid Pandas
df = pd.DataFrame(jobs)
df.to_csv('indeed_jobs.csv', index=False)
print("Data saved to indeed_jobs.csv")
# Rith an phríomhfheidhm
asyncio.run(main())
Go deimhin, cuireann sé a liostaí poist i leataobh, agus is féidir leat an scraper a leathnú go héasca chun leathanaigh éagsúla a láimhseáil. Déantar an URL Leathanach a choigeartú ag úsáid tús paraiméadair fiosrúcháin, a incrimíonn faoi 10 do gach leathanach nua.
Chun feidhmiúlacht do scraper a fheabhsú chun sonraí a bhailiú ó leathanaigh éagsúla, is féidir leat feidhm ar a dtugtar scrape_multiple_pages a chur i bhfeidhm. Athróidh an fheidhm seo an bonn URL tríd an bparaiméadar tosaithe a choigeartú go hincriminteach, rud a chumasaíonn rochtain ar leathanaigh ina dhiaidh sin. Trí dhul chun cinn go córasach trí gach leathanach, is féidir leat scóip agus méid na sonraí a bhailítear a leathnú, amhail folúntais, ag cinntiú tacar sonraí níos cuimsithí.
async def scrape_multiple_pages(base_url, pages=3):
all_jobs = []
for page_num in range(pages):
# Nuashonraigh URL le haghaidh laghdú
url = f"{base_url}&start={page_num * 10}"
print(f"Scraping page: {url}")
# Scrape sonraí poist ó gach leathanach
jobs = await scrape_indeed_jobs(url)
all_jobs.extend(jobs)
# Sábháil gach post chuig 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 leathanaigh éagsúla de liostaí poist
asyncio.run(scrape_multiple_pages('https://www.indeed.com/jobs?q=usa', pages=3))
Chun díriú ar theidil poist nó eochairfhocail ar leith i do chuid iarrachtaí scríobtha, beidh ort an paraiméadar cuardaigh fiosrúcháin a chumrú san URL a úsáideann go deimhin. Ligeann an saincheapadh seo don scraper sonraí a bhailiú a bhaineann go sonrach le poist nó earnálacha áirithe. Mar shampla, má tá tú ag cuardach poist fhorbróra Python ar http://www.indeed.com, dhéanfá an paraiméadar fiosrúcháin a choigeartú chun “Python+Forbróir” nó eochairfhocail ábhartha a chur san áireamh.
query = "python+developer"
base_url = f"https://www.indeed.com/jobs?q={query}"
asyncio.run(scrape_multiple_pages(base_url, pages=3))
Tríd an paraiméadar seo a mhodhnú de réir do riachtanais bailithe sonraí, is féidir leat do scríobadh a dhíriú ar phoist shonracha, solúbthacht agus éifeachtúlacht do phróisis bailithe sonraí a fheabhsú. Tá an cur chuige seo thar a bheith úsáideach chun oiriúnú d'éilimh dhinimiciúla an mhargaidh fostaíochta.
import asyncio
from playwright.async_api import async_playwright
from lxml import html
import pandas as pd
# Céim 1: Fetch Page Content ag úsáid drámadóra
async def get_page_content(url):
async with async_playwright() as p:
browser = await p.chromium.launch(
headless=False
proxy = {
'server': '',
'username': '',
'password': ''
}
) # Brabhsálaí Rith i Mód Ceannaithe
page = await browser.new_page()
await page.goto(url, wait_until='networkidle')
# Sliocht Ábhar Leathanach
content = await page.content()
await browser.close() # Dún brabhsálaí tar éis a úsáid
return content
# Céim 2: An t -ábhar HTML a pharsáil ag úsáid LXML
def parse_job_listings(content):
# Parse an HTML ag baint úsáide as LXML
parser = html.fromstring(content)
# Roghnaigh postálacha poist aonair ag baint úsáide as xpath
job_posting = parser.xpath('//ul[@class="css-zu9cdh eu4oa1w0"]/li')
# Sonraí Poist a Shliocht
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()'))
# Cuir sonraí a bhaint as an liosta jobs_data
jobs_data.append({
'Title': title,
'Link': f"https://www.indeed.com{link}",
'Location': location,
'Description': description,
'Company': company_name
})
return jobs_data
# Céim 3: Scrape go deimhin poist ar leathanach amháin
async def scrape_indeed_jobs(url):
# Faigh Ábhar Leathanach ag baint úsáide as drámadóir
content = await get_page_content(url)
# Parse HTML agus Sonraí Poist a Shliocht
jobs_data = parse_job_listings(content)
return jobs_data
# Céim 4: Láimhseáil a láimhseáil agus leathanaigh iolracha a scrapáil
async def scrape_multiple_pages(base_url, query, pages=3):
all_jobs = []
for page_num in range(pages):
# Nuashonraigh an URL chun an t -uafás a láimhseáil agus cuir an cheist cuardaigh leis
url = f"{base_url}?q={query}&start={page_num * 10}"
print(f"Scraping page: {url}")
# Scrape poist don leathanach reatha
jobs = await scrape_indeed_jobs(url)
all_jobs.extend(jobs)
# Sábháil gach post le comhad CSV
df = pd.DataFrame(all_jobs)
df.to_csv(f'indeed_jobs_{query}.csv', index=False)
print(f"Data saved to indeed_jobs_{query}.csv")
# Feidhm chun an scraper a rith le hionchur ceist dhinimiciúil
async def run_scraper():
# Céim 5: Iarr ar an úsáideoir ceist ionchuir agus líon na leathanach a scrapáil
query = input("Enter the job title or keywords to search (e.g., python+developer): ")
pages = int(input("Enter the number of pages to scrape: "))
# Poist scrape thar leathanaigh éagsúla bunaithe ar an bhfiosrúchán
base_url = 'https://www.indeed.com/jobs'
await scrape_multiple_pages(base_url, query, pages)
# Rith an scraper
asyncio.run(run_scraper())
Chun próiseas scríobtha réidh a chinntiú agus an baol go dtarlódh bloic agus láithrithe Captcha a laghdú, tá sé ríthábhachtach an seachfhreastalaí ceart a roghnú. Is iad na roghanna is fearr le haghaidh scríobtha ná seachvótálaithe ISP, a sholáthraíonn cobhsaíocht ardluais agus nasctha, chomh maith le fachtóir ard iontaobhais, rud a fhágann gur annamh a chuireann ardáin bac orthu. Tá an cineál seo seachvótálaí statach, mar sin le haghaidh scríobadh mórscála, is gá linn snámhghnóthais ISP a chruthú agus uainíocht IP a chumrú dá n-athrú rialta. Rogha eile a bheadh ann ná seachvótálaithe cónaitheacha, atá dinimiciúil agus a bhfuil an clúdach geografach is leithne acu i gcomparáid le cineálacha eile seachfhreastalaithe.
Tuairimí: 0