Обмен технологиями

Поисковый робот Python и вывод

2024-07-12

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

1. Поисковый робот Python и пример вывода

Ниже приведен пример простого веб-сканера, написанного на Python, который будет сканировать определенную веб-страницу (например, скажемhttps://example.com , но учтите, что при реальном использовании нам необходимо заменить его на заголовок (Заголовок) реального веб-сайта, доступ к которому разрешено сканировать) и распечатать его. Поскольку прямой доступ к реальным веб-сайтам и их очистка могут быть связаны с авторскими правами и юридическими проблемами, мы приводим здесь только концептуальный пример.

Для выполнения этой задачи мы будем использовать Pythonrequestsбиблиотека для отправки HTTP-запросов и использованияBeautifulSoup Библиотека для анализа HTML-контента. Если мы еще не установили эти библиотеки, мы можем установить их через pip:

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

Вот полный пример кода:

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

Уведомление

(1) Из-заhttps://example.comНапример, это заполнитель, поэтому нам нужно заменить его действительным URL-адресом веб-страницы, который позволяет сканировать при запуске.

(2) Сканер должен соответствовать требованиям целевого веб-сайта при запуске.robots.txtДокумент предусматривает соблюдение авторских прав и ограничений доступа к сайту.

(3) На некоторых веб-сайтах могут быть настроены механизмы защиты от сканирования, такие как проверка User-Agent, ограничение частоты и т. д. Возможно, нам придется изменить заголовки наших запросов (например,User-Agent) или используйте такие методы, как прокси, чтобы обойти эти ограничения.

(4) Для более сложных структур веб-страниц или более сложных требований к сбору данных нам может потребоваться больше узнать о HTML, селекторах CSS, XPath и сетевых запросах.

2. Более подробные примеры кода

Ниже приведен более подробный пример кода сканера Python, на этот раз я буду использоватьrequestsбиблиотека для отправки HTTP-запросов и использованияBeautifulSoupбиблиотека для анализа HTML-содержимого для сканирования реального веб-сайта (например, мы используемhttps://www.wikipedia.orgВ качестве примера, но обратите внимание, что фактическое сканирование должно соответствовать правилам веб-сайта.robots.txtправила и политика авторского права).

Сначала убедитесь, что мы установилиrequestsиbeautifulsoup4 Библиотека. Если он не установлен, используйте pip для его установки:

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

Затем мы можем использовать следующий код, чтобы получить и распечатать заголовок домашней страницы Википедии:

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

Этот код сначала устанавливает заголовок запроса (headers), который содержитUser-Agent Это поле предназначено для имитации реального доступа через браузер, поскольку некоторые веб-сайты проверяют заголовок запроса, чтобы предотвратить доступ сканера. Затем он отправляет запрос GET на указанный URL-адрес и использует BeautifulSoup для анализа возвращенного содержимого HTML.Далее он ищет HTML<title> тег и извлеките его текстовое содержимое в качестве заголовка веб-страницы. Наконец, он выводит заголовок на консоль.

Обратите внимание: хотя в этом примере в качестве примера используется Википедия, в реальных проектах мы всегда должны придерживаться настроек целевого веб-сайта.robots.txtдокументации и политики авторских прав, чтобы гарантировать, что наши методы сканирования являются законными и этичными.