Ajax de notas del rastreador python3


La página original no tendrá algunos datos, puede cargarse a través de ajax y los datos se mostrarán después de cargarse uniformemente a través de ajax. El uso directo de la biblioteca de solicitudes para capturar el html original no contendrá ningún dato. Es necesario analizar el ajax enviado por la página web a la interfaz de fondo pregunta.

que es ajax

Usar javascrip para asegurarse de que la página no se actualice y el enlace no se cambie para intercambiar datos con el servidor y actualizar algunos contenidos web.
Por ejemplo, deslizarse hacia abajo para ver más es el proceso de carga de ajax.

Fundamental

var xmlhttp;
if (window.XMLHttpRequests) {
    
    
pass
} else {
    
    
xmlhttp=new.....
}
xmlhttp.onreadystatechange=function{
    
    }
xmlhttp.open()
xmlhttp.send()

Cree un nuevo objeto XMLHttpRequests xmlhttp, luego llame al atributo onreadystatechange para configurar el oyente y finalmente llame a los métodos open y send para enviar una solicitud a un enlace. Este es el principio de la solicitud, así como el análisis del contenido y la representación. Si está interesado, puede averiguarlo usted mismo.

método de análisis ajax

inserte la descripción de la imagen aquí
El tipo de solicitud ajax es xhr, lo que significa que es una solicitud ajax.
inserte la descripción de la imagen aquí
Hay un X-Requested-With en los encabezados de las solicitudes para marcar la solicitud ajax cuando se realiza esta solicitud. Haga clic en previev para ver el contenido de la respuesta. Cambie a la
inserte la descripción de la imagen aquí
opción de respuesta para ver la información.

Análisis de Ajax y combate de rastreadores.

import pymongo
import requests
import logging

logging.basicConfig(level=logging.INFO,
                    format='%(asctime)s - %(levelname)s: %(message)s')


INDEX_URL = 'https://spa1.scrape.center/api/movie/?limit={limit}&offset={offset}'#把limit和offset预留出来占位符动态传入参数,构造完整列表页

MONGO_CONNECTION_STRING = 'mongodb://localhost:27017'
MONGO_DB_NAME = 'movies'
MONGO_COLLECTION_NAME = 'movies'

client = pymongo.MongoClient(MONGO_CONNECTION_STRING)
db = client['movies']
collection = db['movies']


def scrape_api(url):
    logging.info('scraping %s...', url)
    try:
        response = requests.get(url)
        if response.status_code == 200:
            return response.json()
        logging.error('get invalid status code %s while scraping %s',
                      response.status_code, url)
    except requests.RequestException:
        logging.error('error occurred while scraping %s', url, exc_info=True)


LIMIT = 10


def scrape_index(page):
    url = INDEX_URL.format(limit=LIMIT, offset=LIMIT * (page - 1))
    return scrape_api(url)


DETAIL_URL = 'https://dynamic1.scrape.center/api/movie/{id}'


def scrape_detail(id):
    url = DETAIL_URL.format(id=id)
    return scrape_api(url)


TOTAL_PAGE = 10


def save_data(data):
    collection.update_one({
    
    
        'name': data.get('name')
    }, {
    
    
        '$set': data
    }, upsert=True)


def main():
    for page in range(1, TOTAL_PAGE + 1):
        index_data = scrape_index(page)
        for item in index_data.get('results'):
            id = item.get('id')
            detail_data = scrape_detail(id)
            logging.info('detail data %s', detail_data)
            save_data(detail_data)
            logging.info('data saved successfully')


if __name__ == '__main__':
    main()

Supongo que te gusta

Origin blog.csdn.net/weixin_41867184/article/details/125216788
Recomendado
Clasificación