代码之家  ›  专栏  ›  技术社区  ›  Nikolai Romanov Belliovichksky

我正试图使用python和selenium库创建一个web scraper

  •  0
  • Nikolai Romanov Belliovichksky  · 技术社区  · 1 年前

    一旦我尝试抓取一个网站,它就会在另一个实例中加载浏览器,但会立即崩溃,代码和错误也会随之出现->

    代码:

    import selenium.webdriver as webdriver
    from selenium.webdriver.chrome.service import Service
    import time
    
    
    def scrape_website(website):
        print("Launching the browser!")
        
        option=webdriver.ChromeOptions()
        driver=webdriver.Chrome()
        try:
            driver.get(website)
            print("The page is loaded now...")
            html=driver.page_source
            time.sleep(10)
            return html
        finally:
            driver.quit()
    
    

    错误:

    InvalidArgumentException: Message: invalid argument (Session info: chrome=131.0.6778.205) 
    Stacktrace: GetHandleVerifier [0x00007FF616866CC5+28821] (No symbol) [0x00007FF6167D3850] 
    (No symbol) [0x00007FF6166755B9] (No symbol) [0x00007FF616663051] (No symbol) [0x00007FF6166612FD] (No symbol) [0x00007FF616661B3C] (No symbol) [0x00007FF61667885A] (No symbol) [0x00007FF6167101FE] (No symbol) [0x00007FF6166EF2FA] (No symbol) [0x00007FF61670F412] (No symbol) [0x00007FF6166EF0A3] (No symbol) [0x00007FF6166BA778] (No symbol) [0x00007FF6166BB8E1] GetHandleVerifier [0x00007FF616B9FCCD+3408029] GetHandleVerifier [0x00007FF616BB743F+3504143] GetHandleVerifier [0x00007FF616BAB61D+3455469] GetHandleVerifier [0x00007FF61692BDCB+835995] (No symbol) [0x00007FF6167DEB6F] (No symbol) [0x00007FF6167DA824] (No symbol) [0x00007FF6167DA9BD] (No symbol) [0x00007FF6167CA1A9] BaseThreadInitThunk [0x00007FF85F087374+20] RtlUserThreadStart [0x00007FF86057CC91+33]
    

    我正在使用streamlit来准备应用程序的前端,代码附在下面:

    import streamlit as st # type: ignore
    from scrape import scrape_website
    
    st.title("College Website Scraper")
    url=st.text_input("Enter the Website Address:")
    
    if st.button("Scrape Site"):
        st.write("Scraping this Website")
        result=scrape_website(url)
        print(result)
    
    1 回复  |  直到 1 年前
        1
  •  1
  •   SIGHUP    1 年前

    传递给的URL driver.get() 需要包括该方案,例如https

    您看到的错误是由于URL中缺少该组件造成的。

    您可以使用urllib.parse中的urlparse来检查URL的各个方面。

    忽略streamlit(因为它与问题无关)以下是一个如何检查输入URL是否包含方案的示例:

    import selenium.webdriver as webdriver
    from selenium.webdriver import ChromeOptions
    from urllib.parse import urlparse
    
    def scrape_website(website):
        options = ChromeOptions()
        options.add_argument("--headless=true")
        with webdriver.Chrome(options) as driver:
            driver.get(website)
            return driver.page_source
    
    
    while url := input("Enter url to scrape: "):
        p = urlparse(url)
        if not p.scheme:
            print("Scheme missing from url")
        else:
            html = scrape_website(url)
            print("HTML fragment:", html[:80])
    

    例子:

    Enter url to scrape: www.google.com
    Scheme missing from url
    Enter url to scrape: https://www.google.com
    HTML fragment: <html itemscope="" itemtype="http://schema.org/WebPage" lang="en-GB"><head><meta