Թեև որոշ վեբկայքեր հեշտությամբ կարելի է քերել՝ օգտագործելով միայն Selenium, Puppeteer և այլն, այլ կայքեր, որոնք իրականացնում են անվտանգության առաջադեմ միջոցներ, ինչպիսիք են CAPTCHA-ները և IP-ի արգելքները, կարող են դժվար լինել: Այս մարտահրավերները հաղթահարելու և համոզվելու համար, որ դուք կարող եք անվճար քերել կայքերի 99%-ը՝ օգտագործելով Scraper-ը, դուք դա կկառուցեք այս հոդվածում և կինտեգրեք
Այնուամենայնիվ, տվյալների հավաքումը ընդամենը մեկ քայլ է. այն, ինչ դուք անում եք այդ տվյալների հետ, հավասարապես, եթե ոչ ավելի, կարևոր է: Հաճախ դա պահանջում է մեծ ծավալի տեղեկատվության ձեռքով մանրակրկիտ ուսումնասիրել: Բայց ի՞նչ կլիներ, եթե կարողանայիք ավտոմատացնել այս գործընթացը: Լեզվի մոդելը (LLM) օգտագործելով՝ դուք կարող եք ոչ միայն տվյալներ հավաքել, այլև հարցումներ կատարել՝ իմաստալից պատկերացումներ կորզելու համար՝ խնայելով ժամանակ և ջանք:
Այս ուղեցույցում դուք կսովորեք, թե ինչպես համատեղել վեբ քերծումը AI-ի հետ՝ ստեղծելու հզոր գործիք՝ անվճար մասշտաբով տվյալներ հավաքելու և վերլուծելու համար: Եկեք սուզվենք:
Նախքան սկսելը, համոզվեք, որ ունեք հետևյալը.
Այս ձեռնարկը շարունակելու համար կատարեք հետևյալ քայլերը.
Հետևեք այս քայլերին՝ ձեր միջավայրը կարգավորելու և AI-ով աշխատող քերիչի կառուցմանը պատրաստվելու համար:
Նախ, ստեղծեք վիրտուալ միջավայր՝ ձեր նախագծի կախվածությունները կառավարելու համար: Սա կապահովի, որ դուք կունենաք մեկուսացված տարածք բոլոր անհրաժեշտ փաթեթների համար:
Ստեղծեք նոր նախագծի գրացուցակ.
Բացեք ձեր տերմինալը (կամ Command Prompt/PowerShell Windows-ում) և ստեղծեք նոր գրացուցակ ձեր նախագծի համար.
mkdir ai-website-scraper cd ai-website-scraper
Ստեղծեք վիրտուալ միջավայր.
Վիրտուալ միջավայր ստեղծելու համար գործարկեք հետևյալ հրամանը.
Windows-ում.
python -m venv venv
MacOS/Linux-ում.
python3 -m venv venv
Սա ստեղծում է venv
թղթապանակ, որը կպահի վիրտուալ միջավայրը:
Ակտիվացրեք վիրտուալ միջավայրը՝ դրա ներսում աշխատելու համար.
Windows-ում.
.\venv\Scripts\activate
MacOS/Linux-ում.
source venv/bin/activate
Ձեր տերմինալի հուշումը կփոխվի և կցուցադրվի ( venv
)՝ հաստատելով, որ դուք այժմ գտնվում եք վիրտուալ միջավայրում:
Այժմ տեղադրեք գրադարանները, որոնք անհրաժեշտ են ձեր նախագծին: Ստեղծեք requirements.txt
ֆայլ ձեր նախագծի գրացուցակում և ավելացրեք հետևյալ կախվածությունները.
streamlit selenium Beautifulsoup4 langchain langchain-ollama lxml html5lib
Այս փաթեթները կարևոր են քերելու, տվյալների մշակման և միջերեսի կառուցման համար.
streamlit : Սա օգտագործվում է ինտերակտիվ ինտերֆեյսի ստեղծման համար:
Սելեն : Կայքի բովանդակությունը քերելու համար:
beautifulsoup4 . HTML-ը վերլուծելու և մաքրելու համար:
langchain և langchain-ollama . Սա նախատեսված է Ollama LLM-ի հետ ինտեգրվելու և տեքստի մշակման համար:
lxml և html5lib . առաջադեմ HTML վերլուծության համար:
Տեղադրեք կախվածությունները՝ գործարկելով հետևյալ հրամանը.
(Հրահանգը գործարկելուց առաջ համոզվեք, որ գտնվում եք այն թղթապանակում, որտեղ գտնվում է ֆայլը):
pip install -r requirements.txt
Ստեղծեք ui.py անունով ֆայլ ձեր նախագծի գրացուցակում: Այս սցենարը կսահմանի միջերեսը ձեր քերիչի համար: Օգտագործեք ստորև բերված կոդը՝ ձեր դիմումը կառուցելու համար.
import streamlit as st import pathlib from main import scrape_website # function to load css from the assets folder def load_css(file_path): with open(file_path) as f: st.html(f"<style>{f.read()}</style>") # Load the external CSS css_path = pathlib.Path("assets/style.css") if css_path.exists(): load_css(css_path) st.title("AI Scraper") st.markdown( "Enter a website URL to scrape, clean the text content, and display the result in smaller chunks." ) url = st.text_input(label= "", placeholder="Enter the URL of the website you want to scrape") if st.button("Scrape", key="scrape_button"): st.write("scraping the website...") result = scrape_website(url) st.write("Scraping complete.") st.write(result)
Դուք կարող եք ավելին իմանալ streamlit բաղադրիչների մասին դրանցից
Ձեր հավելվածը ոճավորելու համար ստեղծեք ակտիվների թղթապանակ ձեր նախագծի գրացուցակում և ավելացրեք style.css ֆայլ: Անհատականացրեք Streamlit ինտերֆեյսը CSS-ով.
.stAppViewContainer { background-image: url("https://images.unsplash.com/photo-1732979887702-40baea1c1ff6?q=80&w=2832&auto=format&fit=crop&ixlib=rb-4.0.3&ixid=M3wxMjA3fDB8MHxwaG90by1wYWdlfHx8fGVufDB8fHx8fA%3D%3D"); background-size: cover; color: black; } .stAppHeader { background-color: rgba(0, 0, 0, 0); } .st-ae { background-color: rgba(233, 235, 234, 0.895); } .st-emotion-cache-ysk9xe { color: black; } .st.info, .stAlert { background-color: black; } .st-key-scrape_button button { display: inline-block; padding: 10px 20px; font-size: 16px; color: #fff; background-color: #007bff; border: none; border-radius: 5px; cursor: pointer; animation: pulse 2s infinite; } .st-key-scrape_button button:hover { background-color: #0056b3; color: #fff; }
Ձեր նախագծի գրացուցակում գործարկեք հետևյալ հրամանը.
streamlit run ui.py
Սա կգործարկի տեղական սերվեր, և դուք պետք է տեսնեք URL տերմինալում, սովորաբար http://localhost:8501
: Բացեք այս URL-ը ձեր բրաուզերում՝ վեբ հավելվածի հետ փոխազդելու համար:
Հաջորդը, գրեք կոդը՝ սելենի միջոցով ցանկացած վեբ էջի HTML բովանդակությունը հանելու համար: Այնուամենայնիվ, որպեսզի կոդը աշխատի, ձեզ հարկավոր է Chrome WebDriver:
Selenium-ը պահանջում է WebDriver՝ վեբ էջերի հետ փոխազդելու համար: Ահա թե ինչպես կարելի է այն կարգավորել.
ChromeDriver-ը ներբեռնելուց հետո հանեք ֆայլը և պատճենեք հավելվածի ֆայլի անունը « chromedriver » և տեղադրեք այն ձեր նախագծի թղթապանակում:
Երբ դա արվի, ստեղծեք նոր ֆայլ, որը կոչվում է main.py
և գործադրեք ստորև նշված կոդը.
from selenium import webdriver from selenium.webdriver.common.by import By from selenium.webdriver.chrome.service import Service from selenium.webdriver.support.ui import WebDriverWait from selenium.webdriver.support import expected_conditions as EC # Function to scrape HTML from a website def scrape_website(website_url): # Path to WebDriver webdriver_path = "./chromedriver" # Replace with your WebDriver path service = Service(webdriver_path) driver = webdriver.Chrome(service=service) try: # Open the website driver.get(website_url) # Wait for the page to fully load WebDriverWait(driver, 10).until(EC.presence_of_element_located((By.TAG_NAME, "body"))) # Extract the HTML source html_content = driver.page_source return html_content finally: # Ensure the browser is closed after scraping driver.quit()
Պահպանեք և գործարկեք կոդը; դուք պետք է ստանաք ձեր քերած էջի ամբողջ HTML-ը, որը ցուցադրվում է ձեր պարզեցված հավելվածում այսպես.
Թեև այժմ դուք կարող եք առբերել վեբկայքի HTML-ը, վերը նշված կոդը կարող է չաշխատել առաջադեմ հակագրոհման մեխանիզմներով կայքերի համար, ինչպիսիք են CAPTCHA մարտահրավերները կամ IP-ի արգելքները: Օրինակ՝ Indeed-ի կամ Amazon-ի նման կայք քերելը Selenium-ի միջոցով կարող է հանգեցնել CAPTCHA էջի մուտքի արգելափակմանը: Դա տեղի է ունենում այն պատճառով, որ կայքը հայտնաբերում է, որ բոտը փորձում է մուտք գործել իր բովանդակությունը: Եթե այս պահվածքը շարունակվի, կայքը կարող է ի վերջո արգելել ձեր IP հասցեն՝ կանխելով հետագա մուտքը:
Դա շտկելու համար ինտեգրվեք
Գրանցվել — գնալ
Մուտք գործելուց հետո կտտացրեք « Ստացեք վստահված անձի արտադրանք »:
Կտտացրեք « Ավելացնել » կոճակը և ընտրեք « Scraping Browser »:
Հաջորդը, դուք կտեղափոխվեք « Ավելացնել գոտի » էջ, որտեղ ձեզանից կպահանջվի ընտրել անուն ձեր նոր քերծող բրաուզերի վստահված անձի գոտու համար: Դրանից հետո կտտացրեք « Ավելացնել »:
Դրանից հետո ձեր վստահված անձի գոտու հավատարմագրերը կստեղծվեն: Ձեզ անհրաժեշտ կլինեն այս մանրամասները ձեր սկրիպտում, որպեսզի շրջանցեք ցանկացած վեբկայքում օգտագործվող հակագրոհման մեխանիզմները:
Դուք կարող եք նաև ստուգել Bright Data-ի մշակողի փաստաթղթերը՝ քերող բրաուզերի մասին լրացուցիչ մանրամասների համար:
Ձեր main.py
ֆայլում փոխեք կոդը սրանով: Դուք կնկատեք, որ այս կոդը ավելի մաքուր է և կարճ, քան նախորդ կոդը:
from selenium.webdriver import Remote, ChromeOptions from selenium.webdriver.chromium.remote_connection import ChromiumRemoteConnection from selenium.webdriver.common.by import By from bs4 import BeautifulSoup AUTH = '<username>:<passord>' SBR_WEBDRIVER = f'https://{AUTH}@brd.superproxy.io:9515' # Function to scrape HTML from a website def scrape_website(website_url): print("Connecting to Scraping Browser...") sbr_connection = ChromiumRemoteConnection(SBR_WEBDRIVER, "goog", "chrome") with Remote(sbr_connection, options=ChromeOptions()) as driver: driver.get(website_url) print("Waiting captcha to solve...") solve_res = driver.execute( "executeCdpCommand", { "cmd": "Captcha.waitForSolve", "params": {"detectTimeout": 10000}, }, ) print("Captcha solve status:", solve_res["value"]["status"]) print("Navigated! Scraping page content...") html = driver.page_source return html
Փոխարինեք <username>-ը և <password>- ը ձեր զննարկիչի օգտանունով և գաղտնաբառով:
Կայքի HTML բովանդակությունը քերելուց հետո այն հաճախ լցվում է ավելորդ տարրերով, ինչպիսիք են JavaScript-ը, CSS ոճերը կամ անցանկալի պիտակները, որոնք չեն նպաստում ձեր արդյունահանվող հիմնական տեղեկատվությանը: Տվյալներն ավելի կառուցվածքային և օգտակար դարձնելու համար անհրաժեշտ է մաքրել DOM-ի բովանդակությունը՝ հեռացնելով անհամապատասխան տարրերը և կազմակերպելով տեքստը:
Այս բաժինը բացատրում է, թե ինչպես մաքրել HTML բովանդակությունը, հանել իմաստալից տեքստ և այն բաժանել փոքր կտորների՝ ներքևում մշակման համար: Մաքրման գործընթացը կարևոր է այնպիսի առաջադրանքների համար տվյալների պատրաստման համար, ինչպիսիք են բնական լեզվի մշակումը կամ բովանդակության վերլուծությունը:
Ահա կոդը, որը կավելացվի main.py- ին՝ DOM-ի բովանդակությունը մաքրելու համար.
from bs4 import BeautifulSoup # Extract the body content from the HTML def extract_body_content(html_content): soup = BeautifulSoup(html_content, "html.parser") body_content = soup.body if body_content: return str(body_content) return "" # Clean the body content by removing scripts, styles, and other unwanted elements def clean_body_content(body_content): soup = BeautifulSoup(body_content, "html.parser") # Remove <script> and <style> tags for script_or_style in soup(["script", "style"]): script_or_style.extract() # Extract cleaned text with each line separated by a newline cleaned_content = soup.get_text(separator="\n") cleaned_content = "\n".join( line.strip() for line in cleaned_content.splitlines() if line.strip() ) return cleaned_content # Split the cleaned content into smaller chunks for processing def split_dom_content(dom_content, max_length=5000): return [ dom_content[i : i + max_length] for i in range(0, len(dom_content), max_length) ]
Ինչ է անում օրենսգիրքը
Պահպանեք ձեր փոփոխությունները և փորձարկեք ձեր դիմումը: Դուք պետք է ստանաք այսպիսի արդյունք վեբ կայքը քերելուց հետո:
Երբ DOM-ի բովանդակությունը մաքրվի և պատրաստվի, հաջորդ քայլը տեղեկատվության վերլուծությունն է՝ օգտագործելով հատուկ մանրամասներ
Եթե չեք արել, ներբեռնեք և տեղադրեք Ollama-ից
brew install ollama
Հաջորդը, տեղադրեք ցանկացած մոդել
ollama pull phi3
Տեղադրվելուց հետո դուք կարող եք կանչել այդ մոդելը ձեր սկրիպտից՝ օգտագործելով LangChain՝ նրան ուղարկվող տվյալներից իմաստալից պատկերացումներ տրամադրելու համար:
Ահա թե ինչպես կարելի է կարգավորել ֆունկցիոնալությունը՝ DOM բովանդակությունը phi3 մոդելի մեջ վերլուծելու համար
Հետևյալ կոդը իրականացնում է DOM-ի կտորները Օլլամայի հետ վերլուծելու և համապատասխան մանրամասներ հանելու տրամաբանությունը.
from langchain_ollama import OllamaLLM from langchain_core.prompts import ChatPromptTemplate # Template to instruct Ollama for parsing template = ( "You are tasked with extracting specific information from the following text content: {dom_content}. " "Please follow these instructions carefully: \n\n" "1. **Extract Information:** Only extract the information that directly matches the provided description: {parse_description}. " "2. **No Extra Content:** Do not include any additional text, comments, or explanations in your response. " "3. **Empty Response:** If no information matches the description, return an empty string ('')." "4. **Direct Data Only:** Your output should contain only the data that is explicitly requested, with no other text." ) # Initialize the Ollama model model = OllamaLLM(model="phi3") # Function to parse DOM chunks with Ollama def parse_with_ollama(dom_chunks, parse_description): prompt = ChatPromptTemplate.from_template(template) chain = prompt | model parsed_results = [] for i, chunk in enumerate(dom_chunks, start=1): if not chunk.strip(): # Skip empty chunks print(f"Skipping empty chunk at batch {i}") continue try: print(f"Processing chunk {i}: {chunk[:100]}...") # Print a preview print(f"Parse description: {parse_description}") response = chain.invoke( { "dom_content": chunk, "parse_description": parse_description, } ) print(f"Response for batch {i}: {response}") parsed_results.append(response) except Exception as e: print(f"Error parsing chunk {i}: {repr(e)}") parsed_results.append(f"Error: {repr(e)}") return "\n".join(parsed_results)
Ավելացրե՛ք հետևյալ կոդը ui.py ֆայլում՝ թույլ տալու օգտվողներին մուտքագրել վերլուծության հրահանգներ LLM-ում և դիտել արդյունքները.
from main import scrape_website, extract_body_content, clean_body_content, split_dom_content from llm import parse_with_ollama if "dom_content" in st.session_state: parse_description = st.text_area("Enter a description to extract specific insights from your scraped data:") if st.button("Parse Content", key="parse_button"): if parse_description.strip() and st.session_state.get("dom_content"): st.info("Parsing the content...") dom_chunks = split_dom_content(st.session_state.dom_content) parsed_result = parse_with_ollama(dom_chunks, parse_description) st.text_area("Parsed Results", parsed_result, height=300) else: st.error("Please provide valid DOM content and a description to parse.")
Դրանով քերիչը այժմ կարող է պատասխաններ տալ ձեր հուշումներին՝ հիմնվելով քերված տվյալների վրա:
Վեբ քերծվածքի և AI-ի համադրությունը հետաքրքիր հնարավորություններ է բացում տվյալների վրա հիմնված պատկերացումների համար: Տվյալների հավաքագրումից և պահպանումից բացի, այժմ կարող եք օգտագործել AI-ն՝ օպտիմիզացնելու քերված տվյալներից պատկերացում կազմելու գործընթացը: Սա օգտակար է մարքեթինգի և վաճառքի թիմերի, տվյալների վերլուծության, բիզնեսի սեփականատերերի և շատ ավելին:
Դուք կարող եք գտնել AI քերիչի ամբողջական կոդը այստեղ: Ազատորեն փորձարկեք դրա հետ և հարմարեցրեք այն ձեր յուրահատուկ կարիքներին: Ներդրումները նույնպես ողջունելի են. եթե բարելավման գաղափարներ ունեք, մտածեք ստեղծելու խնդրանք:
Դուք կարող եք նաև դա շարունակել: Ահա մի քանի գաղափարներ.