Technologieaustausch

Python-Crawler und -Ausgabe

2024-07-12

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

1. Python-Crawler und Ausgabebeispiel

Unten finden Sie ein Beispiel für einen einfachen in Python geschriebenen Webcrawler, der eine bestimmte Webseite crawlt (z. Bhttps://example.com , aber bitte beachten Sie, dass wir es bei der tatsächlichen Verwendung durch den Titel (Titel einer echten Website, die gecrawlt werden darf) ersetzen und ausdrucken müssen. Da der direkte Zugriff auf und das Scrapen realer Websites urheberrechtliche und rechtliche Probleme mit sich bringen kann, geben wir hier nur ein konzeptionelles Beispiel.

Um diese Aufgabe zu erfüllen, verwenden wir PythonrequestsBibliothek zum Senden und Verwenden von HTTP-AnfragenBeautifulSoup Bibliothek zum Parsen von HTML-Inhalten. Wenn wir diese Bibliotheken noch nicht installiert haben, können wir sie über pip installieren:

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

Hier ist das vollständige Codebeispiel:

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

Beachten

(1) Aufgrundhttps://example.comist beispielsweise ein Platzhalter, daher müssen wir ihn durch eine gültige Webseiten-URL ersetzen, die das Crawlen bei der Ausführung ermöglicht.

(2) Der Crawler sollte bei der Ausführung den Anforderungen der Zielwebsite entsprechenrobots.txtDas Dokument schreibt die Einhaltung des Urheberrechts und der Zugriffsbeschränkungen der Website vor.

(3) Auf einigen Websites sind möglicherweise Anti-Crawler-Mechanismen wie User-Agent-Prüfung, Häufigkeitsbegrenzung usw. eingerichtet. Möglicherweise müssen wir unsere Anforderungsheader ändern (z. BUser-Agent) oder verwenden Sie Methoden wie Proxys, um diese Einschränkungen zu umgehen.

(4) Für komplexere Webseitenstrukturen oder erweiterte Datenerfassungsanforderungen müssen wir möglicherweise mehr über HTML, CSS-Selektoren, XPath und Netzwerkanforderungen erfahren.

2. Detailliertere Codebeispiele

Unten finden Sie ein detaillierteres Python-Crawler-Codebeispiel, das ich dieses Mal verwenden werderequestsBibliothek zum Senden und Verwenden von HTTP-AnfragenBeautifulSoupBibliothek zum Parsen von HTML-Inhalten zum Crawlen einer echten Website (z. B. verwenden wirhttps://www.wikipedia.orgAls Beispiel, aber bitte beachten Sie, dass der eigentliche Crawl mit dem der Website übereinstimmen sollterobots.txtBestimmungen und Urheberrechtsbestimmungen).

Stellen Sie zunächst sicher, dass wir es installiert habenrequestsUndbeautifulsoup4 Bibliothek. Wenn es nicht installiert ist, installieren Sie es mit pip:

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

Anschließend können wir den folgenden Code verwenden, um den Titel der Wikipedia-Homepage abzurufen und auszudrucken:

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

Dieser Code legt zunächst einen Anforderungsheader fest (headers), das a enthältUser-Agent Feld, dies dient dazu, einen echten Browserzugriff zu simulieren, da einige Websites den Anforderungsheader überprüfen, um den Crawler-Zugriff zu verhindern. Anschließend sendet es eine GET-Anfrage an die angegebene URL und verwendet BeautifulSoup, um den zurückgegebenen HTML-Inhalt zu analysieren.Als nächstes wird nach dem HTML gesucht<title> Markieren Sie den Textinhalt und extrahieren Sie ihn als Titel der Webseite. Schließlich wird der Titel auf der Konsole ausgegeben.

Bitte beachten Sie, dass in diesem Beispiel zwar Wikipedia als Beispiel verwendet wird, wir uns jedoch in einem realen Projekt immer an die Zielwebsites halten solltenrobots.txtDokumentations- und Urheberrechtsrichtlinien, um sicherzustellen, dass unsere Crawling-Praktiken legal und ethisch sind.