Python crawler combate real, solicitudes + módulo parsel, rastreo de datos de información de listado de viviendas de segunda mano

prefacio

Recientemente, estoy tratando de usar Python para rastrear datos de información de listados de viviendas de segunda mano. Aquí, proporcionaré el código para aquellos que lo necesiten y daré algunos consejos.

En primer lugar, antes de rastrear, debe pretender ser un navegador tanto como sea posible sin ser reconocido como un rastreador. Lo básico es agregar un encabezado de solicitud, pero habrá muchas personas rastreando datos de texto sin formato, por lo que necesitamos para considerar cambiar la IP del proxy y el reemplazo aleatorio El método del encabezado de solicitud se usa para rastrear los datos del precio de la vivienda.

Antes de escribir el código del rastreador cada vez, nuestro primer y más importante paso es analizar nuestras páginas web.

En nuestro ejemplo, esta vez, necesitamos obtener el enlace de cada listado específico en cada página, luego ingresar a la página web de segundo nivel para obtener información detallada y luego regresar a la página web de nivel superior para repetir el proceso.

A través del análisis, descubrimos que la velocidad de rastreo es relativamente lenta durante el proceso de rastreo, por lo que también podemos mejorar la velocidad de rastreo de los rastreadores al deshabilitar las imágenes del navegador de Google, JavaScript, etc.

herramientas de desarrollo

Versión de Python: 3.8

Módulos relacionados:

módulo de solicitudes
módulo analizador

Construcción del entorno

Instale Python y agréguelo a la variable de entorno, y pip instala los módulos relacionados necesarios.

Análisis de ideas

La página rastreada se muestra en la siguiente figura:

inserte la descripción de la imagen aquí

Extraer datos de la página

Abra la página que queremos rastrear en el navegador
y presione F12 para ingresar a la herramienta de desarrollo para ver dónde están los datos que queremos aquí.
Solo necesitamos los datos de la página de listado.
datos de la página

Código

# 伪装
headers = {
    
    
    'cookie': 'aQQ_ajkguid=B7A0A0B5-30EC-7A66-7500-D8055BFFE0FA; ctid=27; id58=CpQCJ2Lbhlm+lyRwdY5QAg==; _ga=GA1.2.2086942850.1658553946; wmda_new_uuid=1; wmda_uuid=009620ee2a2138d3bd861c92362a5d28; wmda_visited_projects=%3B6289197098934; 58tj_uuid=8fd994c2-35cc-405f-b671-2c1e51aa100c; als=0; ajk-appVersion=; sessid=8D76CC93-E1C8-4792-9703-F864FF755D63; xxzl_cid=2e5a66fa054e4134a15bc3f5b47ba3ab; xzuid=e60596c8-8985-4ab3-a5df-90a202b196a3; fzq_h=4c8d83ace17a19ee94e55d91124e7439_1666957662955_85c23dcb9b084efdbc4ac519c0276b68_2936029006; fzq_js_anjuke_ershoufang_pc=75684287c0be96cac08d04f4d6cc6d09_1666957664522_25; twe=2; xxzl_cid=2e5a66fa054e4134a15bc3f5b47ba3ab; xxzl_deviceid=OOpJsA5XrQMdJFfv71dg+l+he0O1OKPQgRAQcFPbeRAyhjZ4/7gS3Gj4DfiLjxfc; isp=true; obtain_by=2; new_session=1; init_refer=https%253A%252F%252Fcs.anjuke.com%252F; new_uv=3',
    'user-agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/106.0.0.0 Safari/537.36'
}
1.发送请求
response = requests.get(url=url, headers=headers)
2.获取数据
html_data = response.text
3.解析数据
 select = parsel.Selector(html_data)
    divs = select.css('.property-content')
    for div in divs:
        # .property-content-title-name   标题
        标题 = is_null(div.css('.property-content-title-name::text').get())
        # .property-content-info:nth-child(1) .property-content-info-text:nth-child(1) span  户型
        户型s = div.css('.property-content-info:nth-child(1) .property-content-info-text:nth-child(1) span::text').getall()
        户型 = ' '.join(户型s)
        # .property-content-info:nth-child(1) .property-content-info-text:nth-child(2)  面积
        面积 = is_null(div.css('.property-content-info:nth-child(1) .property-content-info-text:nth-child(2)::text').get())
        # .property-content-info:nth-child(1) .property-content-info-text:nth-child(3)  朝向
        朝向 = is_null(div.css('.property-content-info:nth-child(1) .property-content-info-text:nth-child(3)::text').get())
        # .property-content-info:nth-child(1) .property-content-info-text:nth-child(4)  楼层
        楼层 = is_null(div.css('.property-content-info:nth-child(1) .property-content-info-text:nth-child(4)::text').get())
        # .property-content-info:nth-child(1) .property-content-info-text:nth-child(5)  年份
        年份 = is_null(div.css('.property-content-info:nth-child(1) .property-content-info-text:nth-child(5)::text').get())
        # .property-content-info:nth-child(2) .property-content-info-comm-name  小区名称
        小区名称 = is_null(div.css('.property-content-info:nth-child(2) .property-content-info-comm-name::text').get())
        # .property-content-info:nth-child(2) .property-content-info-comm-address  小区地址
        小区地址 = is_null(div.css('.property-content-info:nth-child(2) .property-content-info-comm-address::text').get())
        # .property-content-info:nth-child(3) span  小区标签
        小区标签s = div.css('.property-content-info:nth-child(3) span::text').getall()
        小区标签 = ' '.join(小区标签s)
        # .property-price .property-price-total .property-price-total-num  总价
        总价 = is_null(div.css('.property-price .property-price-total .property-price-total-num::text').get())
        # .property-price .property-price-average  每平方米的价格
        单价 = is_null(div.css('.property-price .property-price-average::text').get())
        print(标题, 户型, 面积, 朝向, 楼层, 年份, 小区名称, 小区地址, 小区标签, 总价, 单价)
4.保存数据
        with open('安居客.csv', mode='a', encoding='utf-8', newline='') as f:
            csv_writer = csv.writer(f)
            csv_writer.writerow([标题, 户型, 面积, 朝向, 楼层, 年份, 小区名称, 小区地址, 小区标签, 总价, 单价])

Visualización de resultados

resultado
pd: las imágenes son solo para referencia

por fin

El intercambio de hoy está aquí, y los amigos interesados ​​​​también pueden probarlo.

Si tiene alguna pregunta sobre el artículo, o tiene otras preguntas sobre python, puede dejar un mensaje en el área de comentarios o enviarme un mensaje privado

Si crees que el artículo que compartí es bueno, puedes seguirme o darle me gusta al artículo (/≧▽≦)/

Supongo que te gusta

Origin blog.csdn.net/Modeler_xiaoyu/article/details/128181390
Recomendado
Clasificación