Python rastrea imágenes de Baidu (imagen original HD)

El objetivo de hoy es como el título, rastrear imágenes de Baidu, imágenes originales de alta definición, no miniaturas: https://image.baidu.com/

Hay muchos hoyos en el sitio web de fotografías de Baidu. Quizás la mayoría de la gente vaya inmediatamente a la Red para buscar datos cuando vean el sitio web y descubran que es dinámico, y luego descubran que todas las miniaturas están almacenadas en él. ¿Qué debo hacer? Vaya a JS para buscar, luego depuración de puntos de interrupción y así sucesivamente. . . De hecho, esta es una forma, pero para aquellos de nosotros que no entendemos JS, ¡no lo entendemos en absoluto! ¿Hay alguna otra manera? Por supuesto que sí. Hoy compartiré uno de los métodos un poco más simples. Además, si he aprendido los dos primeros artículos y la escritura de hoy, básicamente el 90% de las imágenes se pueden recoger sin problemas, y el 10% restante Aquellos que necesitan iniciar sesión y VIP.

De acuerdo, no digas mucho, solo comienza (arriba):

Inserte la descripción de la imagen aquí
no sé si ustedes han notado la diferencia entre los dos.

Sí, las URL son diferentes. La URL de la primera imagen no se puede ver de un vistazo, y la URL de la segunda imagen tiene una longitud de URL relativamente normal, pero el contenido que se muestra es exactamente el mismo; se puede ver en este Fuera: la URL de la primera imagen agrega muchas cosas innecesarias, y estas cosas no tienen ningún efecto en el usuario y dificultan el rastreo para el rastreador.

Ahora que ve la diferencia, ¿cómo sabe cuáles están disponibles y cuáles no?

Inserte la descripción de la imagen aquí
Mirando la imagen, las cosas en las cajas son obviamente inútiles. Como son inútiles, se pueden eliminar. De la misma manera, las inútiles se pueden eliminar paso a paso. El resto es la URL real que estamos buscando.

Ahora que se encuentra la URL, ¿cómo encontrar la imagen? Abrimos el código fuente de la página web y descubrimos que es todo código JS. ¿Cómo hacerlo? No hemos jugado JS.
De hecho, esto también es un pozo hecho por Baidu. El enlace de la imagen que necesitamos está en el código fuente de la página web. Entonces, ¿cómo encontramos lo que necesitamos? Es muy simple. Mire el formato de la imagen y luego vaya al código fuente de la página web para encontrar la
Inserte la descripción de la imagen aquí
Inserte la descripción de la imagen aquí
misma imagen, hay muchos tamaños en ella, simplemente elija lo que quiera, yo elijo la imagen original

Ahora que se encuentra el enlace a la imagen, significa que el análisis del sitio web está completo y puede cargar directamente el código:

import re
import requests


url = 'https://image.baidu.com/search/index?tn=baiduimage&ipn=r&word=高清壁纸&pn=0'

headers = {
    
    
    'User-Agent': 'Mozilla/5.0 (Windows NT 6.1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/70.0.3538.25 Safari/537.36 Core/1.70.3760.400 QQBrowser/10.5.4083.400',
}

res = requests.get(url,headers=headers).text
for img in re.findall('"objURL":"(.*?)",',res):
    print(img)
output:
http://img.pconline.com.cn/images/upload/upc/tx/wallpaper/1306/21/c1/22386490_1371808534385.jpg
http://b-ssl.duitang.com/uploads/item/201312/27/20131227233312_feEjH.jpeg
http://up.enterdesk.com/edpic/8c/d2/d9/8cd2d9421559855d153e872faf514137.jpg
http://01.minipic.eastday.com/20171011/20171011095832_49d23dd458b7446249d84fda3d4ea1c1_2.jpeg
http://up.enterdesk.com/edpic/f1/63/4d/f1634dc19bcaae62e769b3d9315cf194.jpg
http://a.hiphotos.baidu.com/zhidao/pic/item/e824b899a9014c08be3151a4087b02087bf4f4ad.jpg
http://up.enterdesk.com/edpic/2d/a3/18/2da318335152ebe82061e55afa883be5.jpg
http://up.enterdesk.com/edpic/58/bf/e9/58bfe913ea48cdb2b4174432cd103583.jpg
http://b.hiphotos.baidu.com/zhidao/pic/item/63d0f703918fa0ece9221cfe279759ee3c6ddb58.jpg
http://b.zol-img.com.cn/desk/bizhi/start/3/1379385428221.jpg
...

Debido a la particularidad de la ubicación, tuve que usar la expresión regular re para hacer coincidir fácilmente el enlace de la imagen.

Aquí hay un pequeño problema. Hay muchos formatos de imágenes de Baidu, como jpg, jpeg, png, etc., así que para ser más perfectos, usamos el módulo os para hacer coincidir el sufijo de la imagen, todo el código:

import re
import requests
import os 


def get_url(word):
    url = f'https://image.baidu.com/search/index?tn=baiduimage&ipn=r&word={word}&pn=0'
    # pn代表翻页,每30张图片为1页  0   30   60   90 ....
    headers = {
    
    
        'User-Agent': 'Mozilla/5.0 (Windows NT 6.1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/70.0.3538.25 Safari/537.36 Core/1.70.3760.400 QQBrowser/10.5.4083.400',
    }

    res = requests.get(url,headers=headers).text
    for img in re.findall('"objURL":"(.*?)",',res):
        print(img)   

        image = requests.get(img,headers=headers)
        file_name = img.split("/")[-1]   #使用图片链接后缀作为图片名称
        with open("./images/"+str(file_name),"wb") as f:
            f.write(image.content)

if __name__ == "__main__":
    word = input("请输入您要采集的图片名称:")
    get_url(word)

Inserte la descripción de la imagen aquí
Inserte la descripción de la imagen aquí
Inserte la descripción de la imagen aquí

Inserte la descripción de la imagen aquí

¡Hazlo! Si no lo entiende, puede dejar un mensaje a continuación. ¡Los grandes se comunican juntos! !

Supongo que te gusta

Origin blog.csdn.net/weixin_51211600/article/details/108991396
Recomendado
Clasificación