Condivisione della tecnologia

Crawler e output Python

2024-07-12

한어Русский языкEnglishFrançaisIndonesianSanskrit日本語DeutschPortuguêsΕλληνικάespañolItalianoSuomalainenLatina

1. Crawler Python ed esempio di output

Di seguito è riportato un esempio di un semplice web crawler scritto in Python che eseguirà la scansione di una determinata pagina web (ad esempio, diciamohttps://example.com , ma tieni presente che nell'uso reale dobbiamo sostituirlo con il titolo (Titolo) di un sito web reale di cui è consentita la scansione) e stamparlo. Poiché l'accesso diretto e lo scraping di siti Web reali può comportare problemi di copyright e legali, qui forniamo solo un esempio concettuale.

Per realizzare questo compito utilizzeremo Pythonrequestslibreria per inviare richieste HTTP e utilizzareBeautifulSoup Libreria per analizzare il contenuto HTML. Se non abbiamo ancora installato queste librerie, possiamo installarle tramite pip:

  1. bash复制代码
  2. pip install requests beautifulsoup4

Ecco l'esempio di codice completo:

  1. # 导入必要的库
  2. import requests
  3. from bs4 import BeautifulSoup
  4. def fetch_website_title(url):
  5. """
  6. 抓取指定网页的标题并返回。
  7. 参数:
  8. url (str): 需要抓取的网页的URL。
  9. 返回:
  10. str: 网页的标题,如果抓取失败则返回None。
  11. """
  12. try:
  13. # 发送HTTP GET请求
  14. response = requests.get(url)
  15. # 检查请求是否成功
  16. if response.status_code == 200:
  17. # 使用BeautifulSoup解析HTML内容
  18. soup = BeautifulSoup(response.text, 'html.parser')
  19. # 查找网页的<title>标签
  20. title_tag = soup.find('title')
  21. # 如果找到<title>标签,则返回其内容
  22. if title_tag:
  23. return title_tag.get_text(strip=True)
  24. else:
  25. return "No title found."
  26. else:
  27. return f"Failed to retrieve the webpage. Status code: {response.status_code}"
  28. except requests.RequestException as e:
  29. return f"Error fetching the webpage: {e}"
  30. # 示例URL(请替换为我们要抓取的网页的URL)
  31. url = 'https://example.com'
  32. # 调用函数并打印结果
  33. title = fetch_website_title(url)
  34. print(f"The title of the webpage is: {title}")

Avviso

(1) A causa dihttps://example.comè un segnaposto, ad esempio, quindi dobbiamo sostituirlo con un URL di pagina Web valido che consenta la scansione durante l'esecuzione.

(2) Il crawler deve essere conforme ai requisiti del sito Web di destinazione durante l'esecuzionerobots.txtIl documento prevede il rispetto dei diritti d'autore e le restrizioni di accesso al sito web.

(3) Alcuni siti web potrebbero avere meccanismi anti-crawler impostati, come il controllo dello User-Agent, il limite di frequenza, ecc. Potrebbe essere necessario modificare le nostre intestazioni di richiesta (comeUser-Agent) o utilizzare metodi come i proxy per aggirare queste restrizioni.

(4) Per strutture di pagine Web più complesse o requisiti di acquisizione dati più avanzati, potremmo aver bisogno di saperne di più su HTML, selettori CSS, XPath e richieste di rete.

2. Esempi di codice più dettagliati

Di seguito è riportato un esempio di codice crawler Python più dettagliato, che utilizzerò questa voltarequestslibreria per inviare richieste HTTP e utilizzareBeautifulSouplibreria per analizzare il contenuto HTML per eseguire la scansione di un sito Web reale (ad esempio, utilizziamohttps://www.wikipedia.orgAd esempio, tieni presente che la scansione effettiva deve essere conforme a quella del sito webrobots.txtregolamenti e politica sul copyright).

Innanzitutto, assicurati di averlo installatorequestsEbeautifulsoup4 biblioteca. Se non è installato, usa pip per installarlo:

  1. bash复制代码
  2. pip install requests beautifulsoup4

Possiamo quindi utilizzare il seguente codice per catturare e stampare il titolo della home page di Wikipedia:

  1. # 导入必要的库  
  2. import requests  
  3. from bs4 import BeautifulSoup  
  4.  
  5. def fetch_and_parse_title(url):  
  6.    """  
  7.   发送HTTP GET请求到指定的URL,解析HTML内容,并返回网页的标题。  
  8.  
  9.   参数:  
  10.   url (str): 需要抓取的网页的URL。  
  11.  
  12.   返回:  
  13.   str: 网页的标题,如果抓取或解析失败则返回相应的错误消息。  
  14.   """  
  15.    try:  
  16.        # 发送HTTP GET请求  
  17.        headers = {  
  18.            'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/58.0.3029.110 Safari/537.36'  
  19.       }  # 设置User-Agent来模拟浏览器访问  
  20.        response = requests.get(url, headers=headers)  
  21.  
  22.        # 检查请求是否成功  
  23.        if response.status_code == 200:  
  24.            # 使用BeautifulSoup解析HTML内容  
  25.            soup = BeautifulSoup(response.text, 'html.parser')  
  26.  
  27.            # 查找网页的<title>标签  
  28.            title_tag = soup.find('title')  
  29.  
  30.            # 提取并返回标题内容  
  31.            if title_tag:  
  32.                return title_tag.get_text(strip=True)  
  33.            else:  
  34.                return "No title found in the webpage."  
  35.        else:  
  36.            return f"Failed to retrieve the webpage. Status code: {response.status_code}"  
  37.    except requests.RequestException as e:  
  38.        return f"Error fetching the webpage: {e}"  
  39.  
  40. # 示例URL(这里使用Wikipedia的主页作为示例)  
  41. url = 'https://www.wikipedia.org'  
  42.  
  43. # 调用函数并打印结果  
  44. title = fetch_and_parse_title(url)  
  45. print(f"The title of the webpage is: {title}")

Questo codice imposta innanzitutto un'intestazione della richiesta (headers), che contiene aUser-Agent campo, questo serve per simulare un accesso reale dal browser, perché alcuni siti web controlleranno l'intestazione della richiesta per impedire l'accesso del crawler. Invia quindi una richiesta GET all'URL specificato e utilizza BeautifulSoup per analizzare il contenuto HTML restituito.Successivamente, cerca l'HTML<title> tag ed estrarne il contenuto testuale come titolo della pagina web. Infine, stampa il titolo sulla console.

Tieni presente che sebbene questo esempio utilizzi Wikipedia come esempio, in un progetto reale dovremmo sempre aderire al sito Web di destinazionerobots.txtdocumentazione e politiche sul copyright per garantire che le nostre pratiche di scansione siano legali ed etiche.