Treoir maidir le Suíomhanna Gréasáin Dinimiciúla a Scrapáil le Python

Tuairimí: 0

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:

  • Playwright (le haghaidh uathoibriú brabhsálaí);
  • lxml (Le haghaidh eastóscadh sonraí ag baint úsáide as xpath);
  • Python (Mar ár dteanga chlársceidealaithe).

Treoir céim ar chéim chun Poist Instagram a scríobadh

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.

Céim 1. Suiteáil Leabharlanna Riachtanacha

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

Céim 2. Socrú drámadóra le haghaidh scríobadh láithreán gréasáin dinimiciúil

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())

Céim 3. An leathanach a pharsáil le LXML agus XPATH

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)

Céim 4. Scrollú gan teorainn a láimhseáil le drámadóir

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")

Céim 5. Proxies a úsáid le drámadóir

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ú.

Cód Comhlánaithe


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())

Uirlisí uathoibrithe malartacha le haghaidh scríobadh gréasáin

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:

  1. Seiléiniam: Tá seiléiniam ar cheann de na creataí uathoibrithe brabhsálaí is sine agus oibríonn sé mar an gcéanna leis an drámadóir. Tá sé thar a bheith solúbtha ach níl roinnt cumais nua -aimseartha ann a thairgeann drámadóir, mar shampla il -bhrabhsálaithe a láimhseáil le API amháin;
  2. Puppeteer: Is uirlis coitianta eile é Puipéadóra le haghaidh uathoibriú brabhsálaí, go háirithe chun láithreáin ghréasáin JavaScript-trom a scríobadh. Cosúil le drámadóir, rialaíonn sé brabhsálaithe gan dídean agus ceadaíonn sé idirghníomhaíocht le hábhar dinimiciúil;
  3. Iarratais + BeautifulSoup: I gcás suíomhanna gréasáin níos simplí nach dteastaíonn JavaScript uathu chun ábhar a luchtú, is rogha éadrom é an leabharlann iarratais in éineacht le BeautifulSoup. Mar sin féin, ní dhéileálann sé go maith le hábhar dinimiciúil.

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 tuairimí