[100 días de dominio de Python] Día 42: desarrollo del rastreador web de Python_La biblioteca de solicitudes HTTP solicita sintaxis común y combate real

Tabla de contenido

1 protocolo HTTP

2 HTTP o HTTPS

3 proceso de solicitud HTTP

 3.1 Proceso de solicitud HTTP

3.2 Solicitud GET y solicitud POST

3.3 Encabezados de solicitud comunes

3.4 respuesta HTTP

4 biblioteca de solicitudes HTTP solicita sintaxis común

4.1 Enviar solicitud GET

 4.2 Enviar solicitud POST

4.3 Solicitar parámetros y encabezados

4.4 Formato de codificación

4.5 Solicitudes de operación avanzada - carga de archivos

4.6 Solicitudes de operación avanzada: obtener cookie

4.7 Solicitar operación avanzada - verificación de certificado

5 combate

Utilice la biblioteca de solicitudes para obtener los títulos y enlaces de las noticias sobre el examen de ingreso a la universidad de 2023.


1 protocolo HTTP

        Protocolo HTTP (Protocolo de transferencia de hipertexto): HTTP es un protocolo para transferir datos entre un cliente y un servidor. Se basa en el modelo solicitud-respuesta, el cliente envía una solicitud HTTP y el servidor devuelve una respuesta HTTP. El protocolo HTTP se utiliza principalmente para la comunicación entre navegadores web y servidores para obtener, transmitir y mostrar páginas y recursos web.

        En el rastreo web, el protocolo HTTP (Protocolo de transferencia de hipertexto) juega un papel vital, es un protocolo para transferir datos entre el cliente y el servidor. Las siguientes son algunas funciones clave del protocolo HTTP en los rastreadores:

  1. Obtención del contenido de la página web: el rastreador utiliza el protocolo HTTP para enviar una solicitud al servidor para obtener el contenido de la página web. Al enviar una solicitud GET, el rastreador puede pedirle al servidor que devuelva el código HTML de la página web.

  2. Envío de solicitudes: los rastreadores pueden utilizar diferentes métodos de solicitud HTTP, como GET, POST, PUT, etc., para enviar diferentes tipos de solicitudes al servidor. Las solicitudes GET se utilizan para recuperar recursos, mientras que las solicitudes POST se utilizan para enviar datos, las solicitudes PUT se utilizan para actualizar recursos, etc.

  3. Pasar parámetros: el rastreador puede pasar varios datos, como parámetros de consulta, datos de formulario, etc., a través de parámetros de URL o parámetros del cuerpo de solicitud de solicitudes HTTP. Esto es útil al extraer datos específicos o realizar búsquedas.

  4. Establecer encabezados de solicitud: los rastreadores pueden configurar encabezados de solicitud en solicitudes HTTP, incluidos User-Agent, Referer, Cookie, etc., para simular diferentes tipos de comportamientos del navegador o para eludir las medidas anti-rastreo de sitios web.

  5. Procesamiento de la respuesta: el servidor devuelve una respuesta HTTP, que contiene el código de estado, los encabezados de la respuesta y el cuerpo de la respuesta. El rastreador puede juzgar si la solicitud se realizó correctamente según el código de estado, obtener información del encabezado de la respuesta y extraer el contenido de la página web del cuerpo de la respuesta.

  6. Análisis de contenido HTML: el rastreador extrae la información requerida del contenido HTML analizándolo. Por lo general, esto implica el uso de una biblioteca como Beautiful Soup para analizar la estructura DOM de la página web.

  7. Inicio de sesión simulado: para los sitios web que requieren iniciar sesión para acceder, el rastreador puede enviar el formulario de inicio de sesión simulando una solicitud POST para obtener los datos de inicio de sesión.

  8. Procesamiento anti-rastreo: el rastreador puede encontrar el mecanismo anti-rastreo del sitio web, como limitar la frecuencia de acceso, código de verificación, etc. En este caso, los rastreadores deben ajustar adecuadamente los encabezados de las solicitudes, utilizar una IP proxy, etc. para evitar estas restricciones.

        En resumen, el protocolo HTTP es la base del trabajo del rastreador: al enviar una solicitud al servidor y analizar la respuesta del servidor, el rastreador puede obtener los datos requeridos de la página web y luego procesarlos, analizarlos y almacenarlos. Al mismo tiempo, comprender las diversas características y mecanismos del protocolo HTTP puede ayudar a los rastreadores a operar e interactuar con los servidores de manera más efectiva.

1.1 Estructura de solicitud HTTP

         Una solicitud HTTP consta de las siguientes partes:

  1. Línea de solicitud: contiene el método de solicitud, la URL de destino y la versión del protocolo.
  2. Encabezados de solicitud: contiene metainformación sobre la solicitud, como agente de usuario, aceptación, cookie, etc.
  3. Línea vacía: se utiliza para separar el encabezado y el cuerpo de la solicitud.
  4. Cuerpo de solicitud (Cuerpo de solicitud): solo aparece cuando se utilizan métodos como POST y contiene los datos reales de la solicitud.

1.2 Estructura de respuesta HTTP

         Una respuesta HTTP consta de las siguientes partes:

  1. Línea de estado: contiene la versión del protocolo, el código de estado y la información de estado.
  2. Encabezados de respuesta: contiene metainformación sobre la respuesta, como tipo de contenido, longitud del contenido, etc.
  3. Línea vacía: se utiliza para separar el encabezado de la respuesta y el cuerpo de la respuesta.
  4. Cuerpo de respuesta: contiene los datos reales de la respuesta, como contenido HTML, datos JSON, etc.

1.3 Métodos HTTP comunes

  1. OBTENER: se utiliza para obtener datos del servidor y agregarlos en la URL.
  2. POST: Se utiliza para enviar datos al servidor e incluir los datos en el cuerpo de la solicitud.
  3. PUT: se utiliza para actualizar los recursos en el servidor, incluidos los datos en el cuerpo de la solicitud.
  4. ELIMINAR: Se utiliza para eliminar recursos del servidor, agregar datos en la URL.
  5. HEAD: similar a GET, pero solo devuelve el encabezado de respuesta, que se utiliza para obtener la metainformación del recurso.
  6. OPCIONES: Se utiliza para consultar los métodos HTTP admitidos por el servidor.

1.4 Códigos de estado HTTP comunes:

  1. 200 OK: La solicitud fue exitosa.
  2. 201 Creado: el recurso se creó correctamente.
  3. 400 Solicitud incorrecta: la solicitud es incorrecta.
  4. 401 No autorizado: La solicitud no está autorizada.
  5. 403 Prohibido: El servidor rechaza la solicitud.
  6. 404 No encontrado: el recurso solicitado no existe.
  7. 500 Error interno del servidor: Error interno del servidor.

Ejemplo: el siguiente es un ejemplo sencillo que demuestra cómo utilizar http.serverlos módulos de Python para crear un servidor HTTP simple y enviar solicitudes GET y POST. Puede ejecutar este ejemplo en una terminal y luego visitar la URL correspondiente en su navegador.

# 创建一个简单的HTTP服务器
# 在终端运行:python http_server_example.py
import http.server
import socketserver

class MyHandler(http.server.SimpleHTTPRequestHandler):
    def do_GET(self):
        self.send_response(200)
        self.send_header('Content-type', 'text/html')
        self.end_headers()
        self.wfile.write(b'Hello, GET request!')

    def do_POST(self):
        content_length = int(self.headers['Content-Length'])
        post_data = self.rfile.read(content_length)
        self.send_response(200)
        self.send_header('Content-type', 'text/html')
        self.end_headers()
        response = f'Hello, POST request! Data: {post_data.decode()}'
        self.wfile.write(response.encode())

if __name__ == "__main__":
    PORT = 8000
    with socketserver.TCPServer(("", PORT), MyHandler) as httpd:
        print(f"Serving at port {PORT}")
        httpd.serve_forever()

        Al visitar el navegador http://localhost:8000se puede ver la respuesta del servidor. Es posible utilizar herramientas como curluna requestsbiblioteca para enviar solicitudes HTTP y recibir respuestas.

2 HTTP o HTTPS

        HTTP (Protocolo de transferencia de hipertexto) y HTTPS (Protocolo seguro de transferencia de hipertexto) son protocolos para transferir datos entre un cliente y un servidor, pero existen importantes diferencias de seguridad y cifrado entre ellos.

HTTP (Protocolo de transferencia de hipertexto): HTTP es un protocolo para transferir datos de hipertexto, que se comunica entre navegadores web y servidores web. El protocolo HTTP se transmite en texto claro, lo que significa que los datos transmitidos no están cifrados y pueden ser fácilmente interceptados y manipulados. Generalmente utiliza el puerto 80 para la comunicación .

HTTPS (Protocolo seguro de transferencia de hipertexto): HTTPS es una versión segura de HTTP que protege los datos transmitidos mediante mecanismos de cifrado y autenticación. En HTTPS, los datos se transmiten cifrados, lo que hace más difícil su escucha y manipulación. Para lograr el cifrado, HTTPS utiliza el protocolo SSL (Secure Sockets Layer) o TLS (Transport Layer Security). HTTPS suele utilizar el puerto 443 para la comunicación .

Diferencia principal:

  1. Seguridad: La diferencia más notable es la seguridad. HTTP no cifra los datos, mientras que HTTPS protege la transmisión de datos mediante cifrado para garantizar la confidencialidad e integridad de los datos.

  2. Cifrado: HTTPS utiliza el protocolo SSL o TLS para cifrar datos de modo que no puedan ser interceptados ni alterados fácilmente durante la transmisión. HTTP no proporciona cifrado y los datos pueden ser monitoreados y modificados por terceros.

  3. Autenticación: HTTPS también puede autenticar el servidor durante el proceso de cifrado para garantizar que se comunique con el servidor correcto. HTTP no proporciona esta funcionalidad y puede ser vulnerable a ataques de intermediario.

  4. Prefijo de URL: las URL HTTP comienzan con "http://", mientras que las URL HTTPS comienzan con "https://".

        Si bien HTTPS es superior a HTTP en términos de seguridad, HTTPS es ligeramente más lento que HTTP debido a cierta sobrecarga computacional involucrada en el proceso de cifrado y descifrado. Sin embargo, con la mejora de la potencia informática, la brecha de rendimiento de HTTPS se reduce gradualmente.

        En la web moderna, proteger la privacidad del usuario y la seguridad de los datos es muy importante, por lo tanto, muchos sitios web están cambiando al uso de HTTPS para garantizar la protección de los datos del usuario.

3 proceso de solicitud HTTP

 3.1 Proceso de solicitud HTTP

         El proceso de solicitud HTTP implica que el cliente envía una solicitud al servidor, el servidor procesa la solicitud y devuelve una respuesta. El siguiente es el proceso básico de una solicitud HTTP:

  1. El cliente inicia una solicitud HTTP, incluido el método de solicitud (GET, POST, etc.), la URL de destino, el encabezado de la solicitud, el cuerpo de la solicitud, etc.
  2. El servidor recibe y procesa la solicitud y encuentra el recurso correspondiente según el método de solicitud y la URL.
  3. El servidor genera una respuesta HTTP, incluido el código de estado, el encabezado de la respuesta, el cuerpo de la respuesta, etc.
  4. El servidor envía una respuesta al cliente.
  5. El cliente recibe la respuesta y procesa el contenido de la respuesta.

3.2 Solicitud GET y solicitud POST

         GET y POST son métodos de solicitud HTTP que se utilizan para enviar solicitudes al servidor.

  • Solicitud GET: se utiliza para obtener datos del servidor, pasando parámetros a través de la URL, los parámetros de la solicitud son visibles en la URL, adecuados para obtener datos.
  • Solicitud POST: se utiliza para enviar datos al servidor, los parámetros de la solicitud se pasan en el cuerpo de la solicitud y se realizan operaciones como agregar y modificar datos.

3.3 Encabezados de solicitud comunes

         Los encabezados de solicitud en una solicitud HTTP contienen información adicional sobre la solicitud, como el agente de usuario, el tipo de contenido, etc. A continuación se muestran algunos encabezados de solicitud comunes:

  • User-Agent: Identifica el tipo y versión del cliente (normalmente un navegador).
  • Tipo de contenido: especifica el tipo de medio del cuerpo de la solicitud (como aplicación/json, aplicación/x-www-form-urlencoded, etc.).
  • Autorización: contiene credenciales de autenticación para la autenticación.
  • Referer: indica la URL de origen de la solicitud, utilizada para prevenir ataques CSRF.
  • Cookie: contiene la información de las cookies del cliente y se utiliza para mantener el estado de la sesión.

3.4 respuesta HTTP

         La respuesta HTTP contiene el resultado del procesamiento de la solicitud por parte del servidor, incluido el código de estado, el encabezado de la respuesta, el cuerpo de la respuesta, etc.

  • Código de estado (Código de estado): indica el estado de procesamiento del servidor para la solicitud, como 200 OK significa éxito, 404 No encontrado significa recurso no encontrado.
  • Encabezados de respuesta: contiene metainformación sobre la respuesta, como tipo de contenido, servidor, etc.
  • Cuerpo de respuesta: contiene el contenido de la respuesta real, como el contenido HTML de la página web, datos JSON, etc.

El siguiente es un ejemplo que demuestra el uso de la requestsbiblioteca Python para enviar una solicitud GET y luego analizar e imprimir la respuesta:

import requests

url = 'https://www.example.com'
response = requests.get(url)

print("Status Code:", response.status_code)
print("Headers:", response.headers)
print("Content:", response.text)

4 biblioteca de solicitudes HTTP solicita sintaxis común

  requestses una biblioteca de Python de uso común para enviar solicitudes HTTP y manejar respuestas HTTP. A continuación se muestra requestsun ejemplo del uso básico de la biblioteca:

Primero, asegúrese de tener la biblioteca instalada requests. Si no está instalado, puede instalarlo con el siguiente comando:

pip install requests

Luego puede importar la biblioteca en su código Python requestsy usarla para enviar solicitudes HTTP y manejar respuestas.

4.1 Enviar solicitud GET

        Usando requests.get()el método, el siguiente ejemplo demuestra cómo usar requestsla biblioteca para enviar una solicitud GET simple y procesar la respuesta:

import requests

# 发送GET请求获取网页内容
url = 'https://www.baidu.com'  # 替换为您要访问的网页URL
response = requests.get(url)
response.encoding = 'utf-8'  # 指定编码为UTF-8
html_content = response.text

# 输出网页内容
print(html_content)

Sintaxis común:

Iniciar una solicitud GET :

import requests

response = requests.get('https://www.example.com')
print(response.text)  # 输出响应内容

Inicie una solicitud GET con parámetros :

params = {'key1': 'value1', 'key2': 'value2'}
response = requests.get('https://www.example.com', params=params)

 Enviar solicitud y establecer encabezados :

headers = {'User-Agent': 'My User Agent'}
response = requests.get('https://www.example.com', headers=headers)

Obtener código de estado de respuesta :

response = requests.get('https://www.example.com')
status_code = response.status_code

 Obtener información del encabezado de respuesta :

response = requests.get('https://www.example.com')
headers = response.headers

Obtener contenido de respuesta (bytes)

response = requests.get('https://www.example.com')
content = response.content

 Obtener contenido de respuesta (texto)

response = requests.get('https://www.example.com')
text = response.text

Procese los datos JSON en la respuesta :

response = requests.get('https://api.example.com/data.json')
data = response.json()

 Tiempo de espera de procesamiento :

try:
    response = requests.get('https://www.example.com', timeout=5)  # 5秒超时
except requests.Timeout:
    print("请求超时")

Manejar excepciones :

try:
    response = requests.get('https://www.example.com')
    response.raise_for_status()  # 抛出HTTP错误状态码异常
except requests.HTTPError as http_err:
    print(f"HTTP错误: {http_err}")
except requests.RequestException as req_err:
    print(f"请求异常: {req_err}")

 4.2 Enviar solicitud POST

El siguiente ejemplo demuestra cómo utilizar requestsla biblioteca para enviar una solicitud POST con datos:

import requests

# 登录URL和登录所需的数据
login_url = 'https://mail.163.com/'
login_data = {
    'username': 'your_username',  # 替换为您的邮箱用户名
    'password': 'your_password'   # 替换为您的邮箱密码
}

# 创建会话对象
session = requests.Session()

# 发送POST请求模拟登录
response = session.post(login_url, data=login_data)

# 检查登录是否成功
if '退出' in response.text:
    print("Login successful.")
else:
    print("Login failed.")

        En este código de muestra, lo utilizamos requests.Session()para crear un objeto de sesión, de modo que el estado de la sesión pueda mantenerse en múltiples solicitudes. Luego usamos session.post()el método para enviar una solicitud POST para simular un inicio de sesión. En este ejemplo, utilizamos la página de inicio de sesión del buzón 163 como demostración; debe reemplazar login_urly login_datacon la URL de inicio de sesión real y los datos necesarios para iniciar sesión.

        Tenga en cuenta que este es solo un ejemplo simple y que los sitios web reales pueden tener una lógica de inicio de sesión más compleja, como códigos de verificación, tokens dinámicos, etc. Al mismo tiempo, cuando un rastreador visita un sitio web, debe cumplir con las reglas y políticas del sitio web para garantizar que sus acciones sean legales y conformes.

Sintaxis común:

Enviar una solicitud POST 

data = {'key1': 'value1', 'key2': 'value2'}
response = requests.post('https://www.example.com', data=data)

 Solicitud POST para enviar datos JSON :

import json

data = {'key1': 'value1', 'key2': 'value2'}
headers = {'Content-Type': 'application/json'}
response = requests.post('https://www.example.com', data=json.dumps(data), headers=headers)

4.3 Solicitar parámetros y encabezados

        Al utilizar requestsla biblioteca para enviar solicitudes HTTP, puede pasar información adicional a través de parámetros y encabezados de solicitud. Los parámetros de solicitud generalmente se usan para solicitudes GET o solicitudes con parámetros de consulta, mientras que los encabezados de solicitud se usan para pasar información diversa, como agente de usuario, cookies, etc. El siguiente es un código de muestra sobre parámetros y encabezados de solicitud:

import requests

# 请求参数示例
params = {
    'key1': 'value1',
    'key2': 'value2'
}

# 请求头部示例
headers = {
    'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/91.0.4472.124 Safari/537.36',
    'Referer': 'https://www.baiud.com',
    'Cookie': 'your_cookie_data'
}

# 发送GET请求,带参数和头部
url = 'https://www.baidu.com'  # 替换为您要访问的网页URL
response = requests.get(url, params=params, headers=headers)

# 输出响应内容
print(response.text)

4.4 Formato de codificación

        Cuando se utiliza requestsuna biblioteca para enviar solicitudes HTTP, el formato de codificación (también conocido como juego de caracteres o codificación de caracteres) se refiere a las reglas utilizadas para decodificar el contenido de la respuesta. requestsLa biblioteca intenta identificar y formatear automáticamente la codificación de la respuesta, pero a veces es posible que deba configurar manualmente la codificación para garantizar que el contenido de la respuesta se analice correctamente.

Aquí hay algunas explicaciones y ejemplos de formatos de codificación:

  1. Identificar automáticamente la codificación: de forma predeterminada, la biblioteca intentará identificar automáticamente el formato de codificación de la respuesta requestsen función de los campos del encabezado de la respuesta . Content-TypePor ejemplo, si se Content-Typeincluye charset=utf-8, requestsse utilizará la codificación UTF-8 para decodificar el contenido de la respuesta.

  2. Configure manualmente la codificación: si la codificación reconocida automáticamente es incorrecta, puede configurar manualmente la codificación para resolver el problema confuso. Al response.encodingconfigurar esto en la codificación adecuada, puede asegurarse de que el contenido de la respuesta se decodifique correctamente.

A continuación se muestra un ejemplo que demuestra cómo formatear manualmente la codificación para analizar correctamente el contenido de la respuesta:

import requests

# 发送GET请求获取网页内容
url = 'https://www.baidu.com'  # 替换为您要访问的网页URL
response = requests.get(url)
response.encoding = 'utf-8'  # 手动设置编码为UTF-8

# 输出响应内容
print(response.text)

4.5 Solicitudes de operación avanzada - carga de archivos

    requestsLa biblioteca le permite enviar solicitudes de carga de archivos, es decir, enviar un archivo al servidor como parte de la solicitud. Esto resulta útil al interactuar con API que incluyen la funcionalidad de carga de archivos.

        Para enviar una solicitud de carga de un archivo, puede utilizar requests.post()el método filespasando el archivo a cargar como parámetro. filesEl argumento debe ser un diccionario donde las claves son nombres de campos y los valores son objetos de archivo. Los objetos de archivo se pueden open()crear con funciones.

El siguiente es un ejemplo simple de carga de archivos, suponiendo que desea cargar un archivo local al servidor:

import requests

# 目标URL和文件路径
url = 'https://www.example.com/upload'  # 替换为实际的上传URL
file_path = 'path/to/your/file.txt'  # 替换为实际的文件路径

# 创建文件对象
with open(file_path, 'rb') as file:
    files = {'file': file}  # 'file'是字段名称,可以根据实际情况更改

    # 发送文件上传请求
    response = requests.post(url, files=files)

# 输出响应内容
print(response.text)

En este ejemplo, usamos open()la función para abrir el archivo en modo binario y luego pasamos el objeto del archivo como filesargumento. En filesel diccionario, las claves son los nombres de campos que el servidor espera recibir y los valores son objetos de archivo. Debe 'file'reemplazarlo con el nombre del campo real.

Tenga en cuenta que el servidor real puede requerir otros campos o parámetros adicionales, como autenticación, token, etc. Debe ajustar el código según la situación real.

4.6 Solicitudes de operación avanzada: obtener cookie

        En requestsla biblioteca, puede response.cookiesobtener la información de las cookies recibidas del servidor a través de las propiedades. Las cookies son algunos pares clave-valor establecidos por el servidor en el encabezado de respuesta HTTP para almacenar información de estado entre el cliente y el servidor. A continuación se detallan instrucciones y ejemplos para obtener cookies:

import requests

# 发送GET请求获取网页内容
url = 'https://www.example.com'  # 替换为您要访问的网页URL
response = requests.get(url)

# 获取响应中的Cookie信息
cookies = response.cookies

# 打印Cookie信息
for cookie in cookies:
    print("Name:", cookie.name)
    print("Value:", cookie.value)

        En este ejemplo, usamos requests.get()el método para enviar una solicitud GET y usamos response.cookiesel atributo para obtener la información de la cookie en la respuesta. response.cookiesDevuelve un RequestsCookieJarobjeto sobre el que puedes iterar para obtener el nombre y el valor de cada cookie.

        Tenga en cuenta que se pueden incluir varias cookies en la respuesta; cada cookie es un par clave-valor. Puede procesar aún más esta información de cookies de acuerdo con las necesidades reales, como almacenarla en la sesión, enviarla a la siguiente solicitud, etc.

Además, si desea configurar cookies manualmente y utilizarlas en solicitudes posteriores, puede hacerlo agregando un campo al encabezado de la solicitud Cookie. Por ejemplo:

import requests

# 设置Cookie
cookies = {'cookie_name': 'cookie_value'}

# 发送GET请求并添加Cookie到请求头部
url = 'https://www.example.com'  # 替换为您要访问的网页URL
response = requests.get(url, cookies=cookies)

# 处理响应...

 En este ejemplo, utilizamos cookiesparámetros para agregar la información de la cookie que se enviará a la solicitud. Esto es útil para situaciones en las que las cookies deben manejarse manualmente.

4.7 Solicitar operación avanzada - verificación de certificado

En requestsla biblioteca, puede verifycontrolar si se verifica el certificado SSL mediante parámetros. La verificación del certificado SSL es el proceso utilizado para garantizar una conexión cifrada segura con un servidor. De forma predeterminada, requestsla biblioteca verifica los certificados SSL, pero puede verifydeshabilitar la verificación o proporcionar un certificado personalizado configurando un parámetro.

Las siguientes son instrucciones detalladas y ejemplos para la verificación de certificados:

  1. Validación predeterminada: de forma predeterminada, requestsla biblioteca valida los certificados SSL. Es una práctica segura garantizar que la comunicación con el servidor esté cifrada. Por ejemplo:

import requests

# 发送GET请求
url = 'https://www.example.com'  # 替换为您要访问的网页URL
response = requests.get(url)

# 处理响应...

Deshabilitar la validación: en algunos casos, es posible que desee deshabilitar la validación de certificados, como en los servidores que acceden a certificados autofirmados. Puede deshabilitar la validación verifyconfigurando el parámetro en :False

import requests

# 发送GET请求并禁用证书验证
url = 'https://www.example.com'  # 替换为您要访问的网页URL
response = requests.get(url, verify=False)

# 处理响应...

 Tenga en cuenta que deshabilitar la validación de certificados reduce la seguridad y solo debe usarse si se comprenden los riesgos.

Certificado personalizado: si necesita conectarse a un servidor mediante un certificado personalizado, puede proporcionar la ruta al archivo del certificado como verifyvalor del parámetro:

import requests

# 发送GET请求并使用自定义证书进行验证
url = 'https://www.example.com'  # 替换为您要访问的网页URL
response = requests.get(url, verify='/path/to/custom/certificate.pem')

# 处理响应...

 En este ejemplo, /path/to/custom/certificate.pemla ruta a su archivo de certificado personalizado.

 Tenga en cuenta que para proteger la seguridad de sus datos, se recomienda mantener activada la verificación de certificados en aplicaciones prácticas. Si necesita deshabilitar o personalizar la validación de certificados en una situación específica, asegúrese de comprender los posibles riesgos de seguridad y tomar las medidas adecuadas.

5 combate

Utilice la biblioteca de solicitudes para obtener los títulos y enlaces de las noticias sobre el examen de ingreso a la universidad de 2023.

import requests
from bs4 import BeautifulSoup
import time

def fetch_news_by_page(page_number):
    keyword = "2023年高考录取"
    results_per_page = 10
    pn = (page_number - 1) * results_per_page

    # 构造搜索的URL,包括搜索关键词和分页参数
    url = f"https://www.baidu.com/s?wd={keyword}&pn={pn}"
    
    # 添加头部信息模拟浏览器请求
    headers = {
        "User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/90.0.4430.212 Safari/537.36",
        "Referer": "https://www.baidu.com/"
    }

    # 发送请求
    response = requests.get(url, headers=headers)

    # 如果请求成功
    if response.status_code == 200:
        # 解析网页内容
        soup = BeautifulSoup(response.text, 'html.parser')
        news_list = []

        # 找到所有的新闻标题和链接
        for news in soup.find_all('div', class_='result'):
            title_elem = news.find('h3', class_='t')
            title = title_elem.get_text() if title_elem else None

            link_elem = news.find('a')
            link = link_elem['href'] if link_elem and 'href' in link_elem.attrs else None

            if title and link:
                news_list.append({"title": title, "link": link})

        return news_list
    else:
        print("请求失败,状态码:", response.status_code)
        return None

if __name__ == "__main__":
    for page in range(1, 4):  # 输出前三页
        print(f"第{page}页的搜索结果:")
        news = fetch_news_by_page(page)
        if news:
            for idx, item in enumerate(news, start=1):
                print(f"{idx}. {item['title']}")
                print(f"   Link: {item['link']}")
                print("=" * 50)
        else:
            print("没有搜索结果。")
        time.sleep(2)  # 添加延时,模拟人类浏览行为

El resultado es el siguiente:

         Este código es un rastreador web Python, que se utiliza para obtener titulares de noticias y enlaces sobre "admisión al examen de ingreso a la universidad 2023" del motor de búsqueda Baidu.

  1. Primero, importa la biblioteca de solicitudes (para enviar solicitudes HTTP), la biblioteca BeautifulSoup (para analizar documentos HTML) y la biblioteca de tiempo (para pausar la ejecución del programa).

  2. Primero, define una función fetch_news_by_page(), que acepta un parámetro número_página, que indica el número de páginas que se van a buscar.

  3. Dentro de la función, primero defina la palabra clave de búsqueda "admisión al examen de ingreso a la universidad 2023" y la cantidad de resultados mostrados por página results_per_page.

  4. Luego, se construye una URL de búsqueda de Baidu, que incluye palabras clave de búsqueda y parámetros de paginación. La cadena de formato f-string se utiliza aquí para insertar número de página y resultados por página en la URL.

  5. A continuación, se define un diccionario de encabezados, que contiene dos campos User-Agent y Referer, que se utilizan para simular un navegador que envía una solicitud.

  6. Utilice la función request.get() para enviar una solicitud GET, pasando el diccionario de encabezados como parámetro.

  7. Si la solicitud tiene éxito (es decir, el código de estado HTTP es 200), el documento HTML devuelto se analiza utilizando BeautifulSoup.

  8. En el documento HTML analizado, encuentre todos los titulares y enlaces de noticias. La función find_all() se utiliza aquí para buscar todos los elementos div con la clase 'resultado' y luego buscar la etiqueta h3 (la clase es 't') y una etiqueta en cada elemento div.

  9. Si se encuentran el título y el enlace, se agregan a la lista news_list.

  10. Finalmente, si la solicitud falla, imprima el código de estado fallido y devuelva Ninguno.

  11. En el programa principal, llame a la función fetch_news_by_page() para recorrer los resultados de búsqueda de las primeras tres páginas e imprimirlos. Para evitar solicitudes frecuentes de red, hay una pausa de 2 segundos después de cada resultado de impresión.

Anterior:

[100 días de dominio de Python] Día 41: Desarrollo del rastreador web Python_Introducción a los conceptos básicos del rastreador_El rastreador web del blog-CSDN del blog de LeapMay (Web Crawler) es un programa automatizado para navegar y capturar información en Internet. Los rastreadores pueden recorrer páginas web, recopilar datos y extraer información para su posterior procesamiento y análisis. Los rastreadores web desempeñan un papel importante en los motores de búsqueda, la recopilación de datos, el seguimiento de la información y otros campos. 1.1 Cómo funciona Selección de URL inicial: el rastreador comienza con una o más URL iniciales, que generalmente son la página de inicio u otras páginas del sitio web que desea comenzar a rastrear. Enviar solicitud HTTP: para cada URL inicial, el rastreador envía una solicitud HTTP para obtener el contenido de la página web. https://blog.csdn.net/qq_35831906/article/details/132377113?spm=1001.2014.3001.5502

Supongo que te gusta

Origin blog.csdn.net/qq_35831906/article/details/132381253
Recomendado
Clasificación