Iepriekšējos notikumos no ir , mēs izmantojām Firecrawl, lai nokasītu šī biļetenu saturu, vektoru DB, piemēram, Pinecone, lai saglabātu rakstu marķējumu, un OpenAI API, lai iegūtu informāciju un pievienotu kontekstu mūsu pieprasījumam, lai iegūtu labākas atbildes. The Lab series Interneta skrāpēšanas klubs Laboratorijas sērija Interneta skrāpēšanas klubs Konteksta loga izmērs (informācijas apjoms, ko mēs varam iekļaut uzaicinājumā) ir ierobežots, tāpēc atbildes ne vienmēr bija lieliskas. Tā kā AI ainava mainīsies dažu mēnešu laikā, šķiet, ka RAG un Pinecone izmantošana ir vecā skola. , tāpēc es veicu šo mazo eksperimentu, lai redzētu, kā MCP var izmantot tīmekļa skrāpēšanai. Model Context Protocol (MCP) Konteksta protokola modelēšana (MCP) Kas ir kontekstuālais protokols? Tās ir atvērts standarts, ko sākotnēji izstrādājusi Anthropic, kas ļauj lieliem valodu modeļiem (LLM) mijiedarboties ar ārējiem rīkiem un datiem, izmantojot standartizētu saskarni. Tā vietā, lai izveidotu pielāgotas integrācijas katram datu avotam vai skrāpēšanas rīkam, izstrādātāji var atklāt savus datus vai funkcionalitāti, izmantojot MCP serveri. AI palīgi (MCP klienti) var konsekventi pieprasīt šos resursus, un šis standartizētais divvirzienu savienojums bagātina neapstrādāto saturu ar metadatiem, kontekstu un instrukcijām, lai AI modeļi varētu efektīvāk interpretēt informāciju. Model Context Protocol (MCP) universal connector Bet kā tas darbojas? Bet kā tas darbojas? MCP seko klienta-servera arhitektūrai: saimnieka lietojumprogramma (piemēram, IDE vai AI palīgs) darbina MCP. (Claude, Cursor utt.) kas savieno ar MCP protokolu ar vienu vai vairākiem MCP Katrs serveris saskaras ar konkrētu datu avotu vai rīku (piemēram, datu bāzi, failu sistēmu vai tīmekļa skrāpētāju) jūsu vietējā mašīnā vai tīklā, nodrošinot strukturētu kontekstu vai darbības LLM. client servers MCP serveris var izvietot (tikai lasāmie kontekstuālie dati, kas ir līdzīgi GET galamērķiem) un (darbības vai funkcijas modelis var atsaukties analogi POST gala punktiem) uz LLM. resources tools Anthropic atvērtā koda MCP 2024. gada sākumā, lai veicinātu nozares mēroga pieņemšanu. , samazinot atkarību no patentētiem API un padarot AI integrācijas modulārākas un sadarbspējīgākas. common framework for AI-to-tool communication Šis strukturētais kontekstuālais apstrāde uzlabojas parastajos paziņojumos. modelis vairs nesaņem tikai teksta blob; tā vietā tas var ielādēt datus, izmantojot resursus un izsaukt rīkus ar labi definētiem ievadiem / izejiem. Kāpēc izmantot MCP? Kā mēs redzējām iepriekšējos ierakstos, izmantojot RAG, viena problēma bija lejupielādētā raksta pievienošana ielūgumam, jo konteksta izmērs ir ierobežots. Mēs izmēģinājām dažādus risinājumus, piemēram, sadalot rakstus gabalos Pinecone un pēc tam saglabājot tikai kopsavilkumu, kas izgatavots ar OpenAI, lai samazinātu tā garumu. Izmantojot MCP, it īpaši šajā gadījumā, kur mēs to izmantojam Cursor IDE iekšpusē, mēs varam izveidot rīku, kas iegūst HTML un saglabā to failā, ko Cursor var izlasīt un sagriezt un izmantot, lai ģenerētu XPaths. Vēl viens interesants aspekts, izmantojot MCP, ir tas, ka mēs sajaucam programmēšanu un ielūgumu inženieriju. Patiesībā, MCP rīka izveide ir kā funkcijas izveide mūsu kodā: pēc tam, kad mēs izstrādājām ielūgumu IDE, tas tiek novērtēts un sauc mūsu rīkus ar nepieciešamo argumentu (piemēram, URL, lai saņemtu) no mūsu ielūguma. Visbeidzot, MCP ir standarts, un teorētiski, tiklīdz mums ir serveris un tas darbojas, mēs to varam savienot ar jebkuru modeli un rīku, kas to atbalsta. Ko mēs izmantosim MCP Mēs izmantosim divas galvenās tehnoloģijas, lai īstenotu mūsu risinājumu: un . MCP Python SDK Camoufox MCP Python SDK ir oficiālā bibliotēka MCP serveru (un klientu) izveidei Python. tā īsteno pilnu MCP specifikāciju, apstrādājot visus pamatprotokolu ziņojumus, lai jūs varētu koncentrēties uz nepieciešamo resursu un rīku definēšanu. MCP Python SDK. Izmantojot šo SDK, jūs varat izveidot MCP serveri tikai dažās koda rindās. servera klase, kas pārvalda savienojumus un ļauj reģistrēt funkcijas kā rīkus vai resursus, izmantojot dekoratorus. Izmanto šo metodi kā rīcības instrumentu. FastMCP @mcp.tool() SDK iesaiņo funkcijas rezultātu un nosūta to atpakaļ AI klientam konsekventā formātā.Apkopojot, ir vienkārši izveidot MCP serveri, kas var sniegt kontekstu LLM vai veikt uzdevumus viņu vārdā. Tīmekļa skrāpēšanā, iegūstot neapstrādātu HTML no mērķa lapām (īpaši tām ar anti-skrāpēšanas pasākumiem vai smagu JavaScript) ir puse no kaujas. Es nolēmu izmantot Camoufox, kas ir atvērtā koda slēpto pārlūkošanas rīks, kas paredzēts šādiem scenārijiem, lai būtu gandrīz pārliecināts, ka var iegūt HTML no katras lapas. Tas jo īpaši attiecas uz to, ka MCP darbojas lokāli manā datorā, tāpēc man nebūs vajadzīgs proxy. Papildus tās slēpto iespēju, es gribēju izmantot Camoufox, lai izveidotu MCP loģiku no 0. vai Viņiem ir daži sagatavoti rīki, piemēram, datu iegūšana un mijiedarbība ar lapu, padarot dzīvi vieglāku mums. Camoufox for HTML retrieval. BrowserBase MCP serveris the Hyperbrowser one BrowserBase MCP serveris Hyperbrowser 1 lietošana MCP servera tehniskā ieviešana Camoufox skrāpētāja rakstīšanai Tagad mēs izveidosim MCP serveri, kas palīdz mums rakstīt Camoufox skrāpētāju trīs soļos. will be a tool that opens Camoufox and stores the HTML of the target page on a file. fetch_page_content will be a tool that reads the HTML file and, given a template of output data, creates the selectors, again saving them to a file. That’s why we want it flexible enough to handle different page types (for example, a product listing page vs. a product detail page in e-commerce). generate_xpaths will be a tool that reads the selectors and a template of Camoufox spider ( ) and creates a new one based on that and the selectors just created. write_camoufox_scraper Camoufox_template.py Servera kods ( Šīs sīkdatnes tiks saglabātas 79.MCP/MCPFiles mapē. xpath_server.py 1. solis: izveidojiet vidi Pirmkārt, pārliecinieties, ka jums ir Mums būs nepieciešams MCP SDK un Camouf, ko jūs varat instalēt, izmantojot pip. Python 3.10+ pip install mcp camoufox Tās Pakete ietver MCP Python SDK un CLI rīku. var būt nepieciešams papildu solis, lai iegūtu savu pārlūkprogrammu bināro (piemēram, lai lejupielādētu stealth Firefox – skatiet Camoufox dokumentus, lai iegūtu sīkāku informāciju). mcp Camoufox python -m camoufox fetch 2. solis: Ieslēdziet MCP serveri Izveidojiet jaunu Python skriptu (repozitorijā tas būs Šajā skriptā mēs inicializēsim MCP serveri un definēsim mūsu rīkus. xpath_server.py from mcp.server.fastmcp import FastMCP import asyncio from camoufox.async_api import AsyncCamoufox import time import os mcp = FastMCP("Scrapy XPath Generator") ..... coded tools .... if __name__ == "__main__": # Initialize and run the server mcp.run(transport='stdio') Tas ir pietiekami, lai izveidotu tukšu MCP serveri. 3. solis: HTML atgūšana ar Camoufox Mēs vēlamies rīku, kas, ņemot vērā URL, iegūst lapas HTML saturu. Mēs izmantosim Camoufox, lai to izdarītu slepenā veidā. Zvanīt : tool fetch_page_content HTML_FILE_PATH = "/Users/pierluigivinciguerra/TWSC/Code/TheWebScrapingClub/79.MCP/downloaded_page.html" # File to store the downloaded HTML CAMOUFOX_FILE_PATH = "/Users/pierluigivinciguerra/TWSC/Code/TheWebScrapingClub/79.MCP/camoufox_template.py" @mcp.tool() async def fetch_page_content(url: str) -> str: global latest_html """Fetch page HTML using Camoufox stealth browser.""" print(f"[DEBUG] Fetching URL: {url}") try: async with AsyncCamoufox(humanize=True) as browser: page = await browser.new_page() await page.goto(url) time.sleep(10) latest_html = await page.content() with open(HTML_FILE_PATH, "w", encoding="utf-8") as f: f.write(latest_html) print("[DEBUG] HTML stored for later use") return "HTML fetched and stored successfully." except Exception as e: print(f"[ERROR] {e}") return f"Error fetching page: {str(e)}" Izņemot dekoratoru, tas ir vienkāršs Camoufox skrāpis, kas atver URL, ko mēs nodosim kursora ielūgumā un saglabā HTML kodu failā. 4. solis: Izveidojiet XPath Selectors, pamatojoties uz veidni Otrais rīks, kas mums nepieciešams, analizē HTML un rada XPath atlasītājus datiem, kurus vēlamies nokasīt. kas izmanto veidnes identifikatoru (lai norādītu, kāda veida lapu vai ekstrakcijas modeli izmantot) kā argumentu. generate_xpaths, Šo rakstu publicēja redakcija Piektdiena, decembris 7, 2015, 8:35. redakcija ir publicējis 3096 publikācijas šajā portālā. , lapu ar vairākiem produktiem, kas uzskaitīti) un citu produkta detaļu lapu ( , lapa ar vienas produkta detaļām). PLP PDP @mcp.tool() def generate_xpaths(template: str) -> dict: """Write XPATH selectors for the requested fields using the downloaded HTML file.""" if not os.path.exists(HTML_FILE_PATH): return {"error": f"No HTML file found. Run fetch_page_content() first."} if template.lower() == "plp": fields = "product title, product link, product price, product image, product code" elif template.lower() == "pdp": fields = "product title, product price, product description, product image, product color, product size, product code" else: return {"error": "Unknown template type"} # Return the HTML and requested fields so Cursor can analyze them return { "message": "Print the XPath expressions for the requested fields using the variable latest_html.", "requested_fields": fields } Šajā gadījumā mēs vienkārši definējam vēlamo izejas struktūru un laukus, kuriem vēlamies izveidot selektorus. 5. solis: izveidojiet jaunu Camoufox skrāpētāju Tagad, kad mums ir atlasītāji, mēs vēlamies apvienot Camoufox Scraper veidni ( Es uzzināju, ka Camoufox Scraper veidnes izmantošana ir nepieciešama, jo bez tā ģenerētais kods parasti ir halucinācija un nedarbojas. Camoufox_template.py @mcp.tool() def write_camoufox_scraper(template: str, url: str) -> dict: print(f"[DEBUG] Writing scraper for template: {template} and URL: {url}") """Reads file Camoufox_template.py and uses it to write a new Camoufox scraper with the requested fields and starting from the url""" with open(CAMOUFOX_FILE_PATH, "r", encoding="utf-8") as f: latest_html = f.read() return{"message": "Using this template, write a working scraper with the requested fields and starting URL"} Tas ir tas; tagad mums vienkārši ir jākonfigurē Cursor, lai palaistu šo MCP serveri un uzrakstītu ielūgumu, kas izmanto tā rīkus. MCP servera izmantošana kursorā Viena no lieliskajām lietām par Cursor (AI darbināmu IDE) ir tā iebūvētais atbalsts MCP serveriem kā AI spēju paplašinājumiem. mēs integrēsim mūsu jaunizveidoto MCP serveri Cursor, lai AI palīgs varētu to izmantot, lai automatizētu tīmekļa skrāpēšanas uzdevumus (piemēram, radītu XPath selektorus mums). Lai savienotu serveri Cursor, izpildiet šādus soļus: – In Cursor IDE, go to the settings menu. Open Cursor Settings – Under the Features section, find . (This requires Cursor v0.45.6+ or later, which supports custom MCP server integration.) Navigate to MCP Servers MCP Servers – Click the “+ Add New MCP Server” button. This will prompt you to enter details for the server. Add a New MCP Server – Give it a name like “Scrapy XPath Server” (any friendly name). For , select (since we will run a local command to start the server). For , enter the command to launch your server. For example, if your script is saved at /path/to/xpath_server.py, you might put it in the box. Configure the server Type "command" Command – After entering the details, save the configuration. You should see your MCP server listed in Cursor’s MCP Servers section. Cursor will now launch this server (via the given command) and maintain a connection to it. You might see a green light next to the MCP server’s name. Save and verify Kad serveris ir pievienots, Ja nepieciešams, var izmantot jaunus rīkus automātiski. Cursor’s AI assistant (the “Composer” agent) Praksē, kad jūs jautājat komponistam: "Iegūstiet HTML no šīs URL un pēc tam ierakstiet XPath atlasītājus, izmantojot veidnes PLP", palīgs lūgs jums apstiprinājumu, lai palaistu Instruments un pēc tam Viens no fetch_page_content generate_xpath Mūsu testi Pēc dažu stundu mijiedarbības ar uzaicinājumu saprast, kā droši iegūt nepieciešamos datus, es atklāju, ka šis veic lielāko daļu uzdevumu, ko es lūdzu, kad tas tiek izmantots ar Cloud 3.7 Sonnet (apstiprinot, ka tas ir viens no labākajiem LLM kodēšanai ) no : kā teica Marco Vinciguerra no ScrapeGraphAI mūsu jaunākajās intervijās kā teica Marco Vinciguerra no ScrapeGraphAI mūsu jaunākajās intervijās “Uzziniet URL @https://www.gucci.com/it/it/ca/women/shoes-for-women-c-women-shoesThen, rakstīt XPath atlases, izmantojot veidni PLP. Izmantojiet lejupielādēto HTML (downloaded_page.html failu), lai rakstītu darbojas XPATH atlases.Uzrakstiet atlases failu sauc selectors.txt.Tad, ņemot vērā iepriekš izveidoto atlases, Uzrakstiet Camoufox skrāpis, izmantojot veidni PLP un sākotnējo URL. Ja jums ir šaubas, izlasiet selectors.txt failu, lai saprastu, cik daudz lauku un kuriem atlases jums ir jāizmanto. Izmantojiet Camoufox_template.py failu Kurss atver Camoufox cilni, pārlūko URL, ko es nodevu, saglabā HTML failā, lasa to, un pēc tam ģenerē XPATH selektorus un saglabā tos citā failā. Izstrādātais skrāpis ir izpildāms pirmo reizi, tāpēc tas ir tehniski pareizi, un rezultāti ir diezgan labi. Skrāpētājs, nerunājot par tīmekļa vietni, pareizi apdzīvoja visus laukus, kas ir lieliski un vairāk, nekā es gaidīju no šī testa. Man joprojām ir dažas bažas par risinājuma uzticamību. es nesaņemu vienus un tos pašus rezultātus katru reizi, kad es palaidu to pašu ielūgumu, kas var būt neapmierinoši, jo jūs nezināt, kā labot procesu, ja jūs nezināt, ko no tā sagaidīt. Izejas datu struktūra nav tā, ko es gaidīju, bet tā, ko palīgs atrada Camoufox skrāpētāja veidnē. Nākamajā epizodē mēs turpināsim mūsu ceļojumu, lai padarītu Cursor par mūsu tīmekļa nokasīšanas AI palīgu. Raksts ir daļa no Pierluigi Vinciguerra "Lab" sērijas. Pārbaudiet viņa Substack lapu, lai iegūtu vairāk zināšanu par tīmekļa skrāpēšanu. Raksts ir daļa no Pierluigi Vinciguerra "Lab" sērijas. Pārbaudiet viņa Substack lapu, lai iegūtu vairāk zināšanu par tīmekļa skrāpēšanu. “Labīte”