Is é atá i gceist le cumas tábhachtach sonraí a fháil ó leathanaigh ghréasáin ná scríobadh gréasáin. Is samplaí de na cineálacha suíomhanna gréasáin seo iad Pinterest agus Instagram, a luchtaíonn an t -ábhar go dinimiciúil trí idirghníomhaíocht úsáideora leo. Ní leor modhanna scríobtha rialta agus ábhar bunaithe ar JavaScript á láimhseáil. San Airteagal seo, déanfaimid cur síos ar an drámadóir mar an uirlis uathoibrithe agus bainfear úsáid as LXML le haghaidh eastóscadh sonraí ó shuíomhanna dinimiciúla den sórt sin a éilíonn ar JavaScript oibriú i gceart. Ar an nóta seo, is féidir linn plé a dhéanamh ar sheachvótálaithe i ndrámadóir chun braite a sheachaint mar róbónna. Sa rang teagaisc seo, déanfaimid próifíl Instagram a scrapáil chun na URLanna uile a aisghabháil trí iompar úsáideora a ionsamhlú, mar shampla scrollaigh agus fanacht le poist a luchtú.
Uirlisí a úsáidfimid sa treoir seo:
Léireoimid an próiseas ag baint úsáide as an sampla de Próifíl Instagram a scríobadh chun URLanna iar -shliocht a bhaint as, ag ionsamhlú gníomhartha úsáideoirí ar nós scrollaithe tríd an leathanach agus ag fanacht le sonraí nua a luchtú. Láithreáin ghréasáin dhinimiciúla a n -ábhar a luchtú go neamhghnách trí iarratais AJAX, rud a chiallaíonn nach bhfuil gach ábhar leathanaigh inrochtana láithreach.
Sula dtosaímid, suiteáil na pacáistí riachtanacha:
pip install playwright
pip install lxml
Beidh ort freisin brabhsálaithe drámadóra a shuiteáil:
playwright install
Bainfimid úsáid as drámadóir chun an brabhsálaí a uathoibriú, ábhar dinimiciúil Instagram a luchtú, agus scrollaigh tríd an leathanach chun níos mó post a luchtú. Déanaimis script uathoibrithe bhunúsach a chruthú:
Script uathoibrithe (brabhsálaí gan dídean):
import asyncio
from playwright.async_api import async_playwright
async def scrape_instagram():
async with async_playwright() as p:
browser = await p.chromium.launch(headless=True) # Mód gan dídean gan aon aiseolas amhairc
page = await browser.new_page()
# Tabhair cuairt ar an URL Próifíle
await page.goto("https://www.instagram.com/profile name/", wait_until="networkidle")
# Cliceáil an cnaipe chun níos mó post a luchtú
await page.get_by_role("button", name="Show more posts from").click()
# Scrollaigh an leathanach chun ábhar dinimiciúil a luchtú
scroll_count = 5 # É seo a shaincheapadh bunaithe ar cé mhéad uair is mian leat scrollú
for _ in range(scroll_count):
await page.evaluate('window.scrollBy(0, 700);')
await page.wait_for_timeout(3000) # Fan go n -luchtaeoidh poist
await page.wait_for_load_state("networkidle")
# Faigh ábhar an leathanaigh
content = await page.content()
await browser.close()
return content
# Rith an fheidhm asynchronous
asyncio.run(scrape_instagram())
Nuair a bheidh an t -ábhar luchtaithe, is féidir linn LXML a úsáid chun an HTML a pharsáil agus sonraí a bhaint as XPath. Sa chás seo, táimid ag baint na URLanna de na poist go léir as an bpróifíl.
Ábhar an leathanaigh a pharsáil agus URLanna poist a bhaint amach:
from lxml import html
import json
def extract_post_urls(page_content):
# Parse an t -ábhar HTML ag úsáid LXML
tree = html.fromstring(page_content)
# Xpath chun URLanna poist a bhaint amach
post_urls_xpath = '//a[contains(@href, "/p/")]/@href'
# URLS Sliocht
post_urls = tree.xpath(post_urls_xpath)
# URLanna coibhneasta a thiontú go absalóideach
base_url = "https://www.instagram.com"
post_urls = [f"{base_url}{url}" for url in post_urls]
return post_urls
Feidhm Sampla chun Sonraí Eastósctha a Shábháil i bhformáid JSON:
def save_data(profile_url, post_urls):
data = {profile_url: post_urls}
with open('instagram_posts.json', 'w') as json_file:
json.dump(data, json_file, indent=4)
# Scrape agus sliocht URLanna
page_content = asyncio.run(scrape_instagram())
post_urls = extract_post_urls(page_content)
# Sábháil na URLanna eastósctha i gcomhad JSON
save_data("https://www.instagram.com/profile name/", post_urls)
Chun láithreáin ghréasáin dhinimiciúla a scrape, is minic a chaithfidh tú scrolla gan teorainn a ionsamhlú. Inár script, déanaimid an leathanach a scrollú ag úsáid JavaScript:
(window.scrollBy(0, 700))
Agus fan go n -luchtaeoidh ábhar nua ag baint úsáide as an ordú seo:
wait_for_load_state("networkidle")
Tá teorainneacha déine agus bearta frith-bot ag Instagram. Chun nach gcuirfear bac ort, is féidir leat seachfhreastalaithe a úsáid chun seoltaí IP a rothlú agus iarratais a dháileadh. Fágann an drámadóir go bhfuil sé éasca seachvótálaithe a chomhtháthú i do uathoibriú scríobtha.
Implementing proxies in Playwright:
async def scrape_with_proxy():
async with async_playwright() as p:
browser = await p.chromium.launch(
headless=False,
proxy={"server": "http://your-proxy-server:port"}
)
page = await browser.new_page()
await page.goto("https://www.instagram.com/profile name/", wait_until="networkidle")
# Lean ar aghaidh ag scríobadh mar a bhí roimhe seo ...
Tacaíonn an drámadóir freisin le seachfhreastalaí a rith mar phasfhocal ainm úsáideora agus tugtar sampla freastalaí thíos
async def scrape_with_proxy():
async with async_playwright() as p:
browser = await p.chromium.launch(
headless=False,
proxy={"server": "http://your-proxy-server:port", "username": "username", "password": "password"}
)
page = await browser.new_page()
await page.goto("https://www.instagram.com/profile name/", wait_until="networkidle")
# Lean ar aghaidh ag scríobadh mar a bhí roimhe seo ...
Cabhraíonn seachvótálaithe le toirmisc IP a sheachaint, le dúshláin captcha, agus le scríobadh réidh ar shuíomhanna gréasáin trom nó srianta mar Instagram a chinntiú.
import asyncio
from playwright.async_api import async_playwright
from lxml import html
import json
# Feidhm chun ábhar dinimiciúil brabhsálaí agus scrape a uathoibriú le seachvótálaithe
async def scrape_instagram(profile_url, proxy=None):
async with async_playwright() as p:
# Brabhsálaí a bhunú le seachvótálaí má chuirtear ar fáil é
browser_options = {
'headless': True, # Bain úsáid as an mbrabhsálaí faoi cheannas chun an gníomh a fheiceáil (is féidir é a shocrú go fíor do mhodh gan dídean)
}
if proxy:
browser_options['proxy'] = proxy
# Seoladh an brabhsálaí
browser = await p.chromium.launch(**browser_options)
page = await browser.new_page()
# Tabhair cuairt ar leathanach Próifíl Instagram
await page.goto(profile_url, wait_until="networkidle")
# Bain triail as cliceáil ar an gcnaipe "Taispeáin More Poist" (Roghnach, d’fhéadfadh teip mura bhfaightear an cnaipe)
try:
await page.click('button:has-text("Show more posts from")')
except Exception as e:
print(f"No 'Show more posts' button found: {e}")
# Scrollaigh an leathanach chun níos mó post a luchtú
scroll_count = 5 # Líon na scrollaí chun poist a luchtú
for _ in range(scroll_count):
await page.evaluate('window.scrollBy(0, 500);')
await page.wait_for_timeout(3000) # Fan go mbeidh poist nua á luchtú
await page.wait_for_load_state("networkidle")
# Faigh an t -ábhar leathanach iomlán tar éis scrollaigh
content = await page.content()
await browser.close() # Dún an brabhsálaí uair amháin
return content
# Feidhm chun an t -ábhar leathanaigh scríobtha a pharsáil agus URLanna poist a bhaint amach
def extract_post_urls(page_content):
# Parse an t -ábhar HTML ag úsáid LXML
tree = html.fromstring(page_content)
# Xpath chun URLanna poist a bhaint amach
post_urls_xpath = '//a[contains(@href, "/p/")]/@href'
# Sliocht URLanna Poist ag baint úsáide as an xpath
post_urls = tree.xpath(post_urls_xpath)
# URLanna coibhneasta a thiontú go URLanna absalóideacha
base_url = "https://www.instagram.com"
post_urls = [f"{base_url}{url}" for url in post_urls]
return post_urls
# Feidhm chun na URLanna poist eastósctha a shábháil i gcomhad JSON
def save_data(profile_url, post_urls):
# Déan na sonraí i bhformáid json a struchtúrú
data = {profile_url: post_urls}
# Sábháil na sonraí chuig comhad
with open('instagram_posts.json', 'w') as json_file:
json.dump(data, json_file, indent=4)
print(f"Data saved to instagram_posts.json")
# An phríomhfheidhm chun an scraper a rith agus na sonraí a shábháil
async def main():
# Sainmhínigh URL Próifíl Instagram
profile_url = "https://www.instagram.com/profile name/"
# Go roghnach, cuir seachvótálaí ar bun
proxy = {"server": "server", "username": "username", "password": "password"} # Úsáid aon cheann mura bhfuil aon seachvótálaí ag teastáil
# Scrape an leathanach Instagram le seachvótálaithe
page_content = await scrape_instagram(profile_url, proxy=proxy)
# Sliocht URLanna Poist ón Ábhar Leathanach Scraped
post_urls = extract_post_urls(page_content)
# Sábháil an URLanna Poist Eastósctha i gcomhad JSON
save_data(profile_url, post_urls)
if __name__ == '__main__':
asyncio.run(main())
Cé gur rogha iontach é an drámadóir chun láithreáin ghréasáin dhinimiciúla a scríobadh, d'fhéadfadh uirlisí eile a bheith oiriúnach do chásanna éagsúla:
Tugann gach uirlis láidreachtaí uathúla agus is féidir iad a roghnú bunaithe ar riachtanais agus coinníollacha sonracha an tionscadail.
Le haghaidh scríobadh rathúil suíomhanna gréasáin dinimiciúla a úsáideann iarratais JavaScript agus Ajax go gníomhach, tá gá le huirlisí cumhachtacha a bhfuil ar a gcumas láimhseáil go héifeachtach le scrolla gan teorainn agus le heilimintí casta idirghníomhacha. Réiteach amháin den sórt sin is ea drámadóir - uirlis ó Microsoft a sholáthraíonn uathoibriú brabhsálaí iomlán, rud a chiallaíonn gur rogha iontach é do ardáin cosúil le Instagram. In éineacht leis an leabharlann LXML le haghaidh parsáil HTML, déanann an drámadóir eastóscadh sonraí a shimpliú go mór, rud a cheadaíonn uathoibriú idirghníomhaíochtaí le heilimintí leathanaigh agus an próiseas parsála gan idirghabháil láimhe. Ina theannta sin, cuidíonn úsáid freastalaithe seachvótálaí le cosaint frith-bot a shárú agus cuireann sé cosc ar bhlocáil IP, ag cinntiú oibríochtaí scríobtha cobhsaí agus gan bhriseadh.
Tuairimí: 0