Enseñanza práctica del rastreador de Python, introducción práctica

I. Introducción

Este artículo se usó anteriormente para capacitar a los recién llegados. Todos lo encontraron fácil de entender, así que lo compartí y aprendí con todos. Si ha aprendido algo de Python y quiere hacer algo con él, pero no tiene una dirección, también puede intentar completar los siguientes casos.

Reglas antiguas, necesita software empaquetado para prestar atención al editor, grupo QQ: 721195303 para recibir.

2. Preparación ambiental

Instale requests lxml beautifulsoup4 tres bibliotecas (los siguientes códigos han pasado la prueba en el entorno python3.5)

solicitudes de instalación pip lxml beautifulsoup4


image.png

Tres, algunos casos pequeños de rastreadores

  • Obtenga la dirección IP de la red pública local
  • Utilice la interfaz de búsqueda de Baidu para escribir un recopilador de URL
  • Descargar automáticamente fondos de pantalla de Sogou
  • Completa automáticamente el cuestionario
  • Obtenga la IP del proxy de la red pública y juzgue si se puede usar o retrasar

3.1 Obtenga la dirección IP de la red pública local

Use la excusa para consultar la IP en la red pública y use la biblioteca de solicitudes de Python para obtener automáticamente la dirección IP.

import requests
r = requests.get("http://2017.ip138.com/ic.asp")
r.encoding = r.apparent_encoding        #使用requests的字符编码智能分析,避免中文乱码
print(r.text)
# 你还可以使用正则匹配re模块提取出IP
import re
print(re.findall("\d{1,3}\.\d{1,3}\.\d{1,3}\.\d{1,3}",r.text))


image.png

3.2 Utilice la interfaz de búsqueda de Baidu para escribir un recopilador de URL

En este caso, utilizaremos solicitudes combinadas con la biblioteca BeautifulSoup para completar la tarea. Necesitamos configurar el encabezado User-Agent en el programa para evitar el mecanismo anti-rastreador del motor de búsqueda de Baidu (puede intentarlo sin el encabezado User-Agent para ver si puede obtener los datos). Preste atención a las reglas de enlace de URL de la estructura de búsqueda de Baidu. Por ejemplo, el parámetro de enlace de URL pn = 0 en la primera página, el parámetro de enlace de URL pn = 10 en la segunda página, y así sucesivamente. Aquí, usamos la ruta del selector css para extraer los datos.

import requests
from bs4 import BeautifulSoup
# 设置User-Agent头,绕过百度搜索引擎的反爬虫机制
headers = {'User-Agent': 'Mozilla/5.0 (X11; Linux x86_64; rv:52.0) Gecko/20100101 Firefox/52.0'}
# 注意观察百度搜索结构的URL链接规律,例如第一页pn=0,第二页pn=10.... 依次类推,下面的for循环搜索前10页结果
for i in range(0,100,10):
        bd_search = "https://www.baidu.com/s?wd=inurl:/dede/login.php?&pn=%s" % str(i)
        r = requests.get(bd_search,headers=headers)
        soup = BeautifulSoup(r.text,"lxml")
    # 下面的select使用了css选择器路径提取数据
        url_list = soup.select(".t > a")
        for url in url_list:
                real_url = url["href"]
                r = requests.get(real_url)
                print(r.url)

Después de escribir el programa, usamos palabras clave inurl:/dede/login.php para extraer la dirección de fondo de los cms de tejido de sueños en lotes. El efecto es el siguiente:


image.png

3.3 Descargar automáticamente fondos de pantalla de Sogou

En este ejemplo, descargaremos automáticamente el fondo de pantalla buscado a través del rastreador y cambiaremos la ruta donde se almacenan las imágenes en el programa por la ruta del directorio donde desea almacenar las imágenes. Otro punto es que usamos la biblioteca json en el programa. Esto se debe a que durante nuestra observación, encontramos que la dirección del fondo de pantalla de Sogou está almacenada en formato json, por lo que usamos json para analizar este conjunto de datos.

import requests
import json
#下载图片
url = "http://pic.sogou.com/pics/channel/getAllRecomPicByTag.jsp?category=%E5%A3%81%E7%BA%B8&tag=%E6%B8%B8%E6%88%8F&start=0&len=15&width=1366&height=768"
r = requests.get(url)
data = json.loads(r.text)
for i in data["all_items"]:
    img_url = i["pic_url"]
    # 下面这行里面的路径改成你自己想要存放图片的目录路径即可
    with open("/home/evilk0/Desktop/img/%s" % img_url[-10:]+".jpg","wb") as f:
        r2 = requests.get(img_url)
        f.write(r2.content)
    print("下载完毕:",img_url)


1.gif

3.4 Rellenar automáticamente el cuestionario

import requests
import random

url = "https://www.wjx.cn/joinnew/processjq.ashx?submittype=1&curID=21581199&t=1521463484600&starttime=2018%2F3%2F19%2020%3A44%3A30&rn=990598061.78751211"
data = {
    "submitdata" : "1$%s}2$%s}3$%s}4$%s}5$%s}6$%s}7$%s}8$%s}9$%s}10$%s"
}
header = {
    "User-Agent" : "Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko)",
    "Cookie": ".ASPXANONYMOUS=iBuvxgz20wEkAAAAZGY4MDE1MjctNWU4Ni00MDUwLTgwYjQtMjFhMmZhMDE2MTA3h_bb3gNw4XRPsyh-qPh4XW1mfJ41; spiderregkey=baidu.com%c2%a7%e7%9b%b4%e8%be%be%c2%a71; UM_distinctid=1623e28d4df22d-08d0140291e4d5-102c1709-100200-1623e28d4e1141; _umdata=535523100CBE37C329C8A3EEEEE289B573446F594297CC3BB3C355F09187F5ADCC492EBB07A9CC65CD43AD3E795C914CD57017EE3799E92F0E2762C963EF0912; WjxUser=UserName=17750277425&Type=1; LastCheckUpdateDate=1; LastCheckDesign=1; DeleteQCookie=1; _cnzz_CV4478442=%E7%94%A8%E6%88%B7%E7%89%88%E6%9C%AC%7C%E5%85%8D%E8%B4%B9%E7%89%88%7C1521461468568; jac21581199=78751211; CNZZDATA4478442=cnzz_eid%3D878068609-1521456533-https%253A%252F%252Fwww.baidu.com%252F%26ntime%3D1521461319; Hm_lvt_21be24c80829bd7a683b2c536fcf520b=1521461287,1521463471; Hm_lpvt_21be24c80829bd7a683b2c536fcf520b=1521463471",
}

for i in range(0,500):
    choice = (
        random.randint(1, 2),
        random.randint(1, 4),
        random.randint(1, 3),
        random.randint(1, 4),
        random.randint(1, 3),
        random.randint(1, 3),
        random.randint(1, 3),
        random.randint(1, 3),
        random.randint(1, 3),
        random.randint(1, 3),
    )
    data["submitdata"] = data["submitdata"] % choice
    r = requests.post(url = url,headers=header,data=data)
    print(r.text)
    data["submitdata"] = "1$%s}2$%s}3$%s}4$%s}5$%s}6$%s}7$%s}8$%s}9$%s}10$%s"

Cuando usamos la misma IP para enviar varios cuestionarios, se activará el mecanismo anti-rastreador del objetivo y aparecerá un código de verificación en el servidor.


image.png


image.png

Podemos usar X-Fordered-For para falsificar nuestra IP, el código modificado es el siguiente:

import requests
import random

url = "https://www.wjx.cn/joinnew/processjq.ashx?submittype=1&curID=21581199&t=1521463484600&starttime=2018%2F3%2F19%2020%3A44%3A30&rn=990598061.78751211"
data = {
    "submitdata" : "1$%s}2$%s}3$%s}4$%s}5$%s}6$%s}7$%s}8$%s}9$%s}10$%s"
}
header = {
    "User-Agent" : "Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko)",
    "Cookie": ".ASPXANONYMOUS=iBuvxgz20wEkAAAAZGY4MDE1MjctNWU4Ni00MDUwLTgwYjQtMjFhMmZhMDE2MTA3h_bb3gNw4XRPsyh-qPh4XW1mfJ41; spiderregkey=baidu.com%c2%a7%e7%9b%b4%e8%be%be%c2%a71; UM_distinctid=1623e28d4df22d-08d0140291e4d5-102c1709-100200-1623e28d4e1141; _umdata=535523100CBE37C329C8A3EEEEE289B573446F594297CC3BB3C355F09187F5ADCC492EBB07A9CC65CD43AD3E795C914CD57017EE3799E92F0E2762C963EF0912; WjxUser=UserName=17750277425&Type=1; LastCheckUpdateDate=1; LastCheckDesign=1; DeleteQCookie=1; _cnzz_CV4478442=%E7%94%A8%E6%88%B7%E7%89%88%E6%9C%AC%7C%E5%85%8D%E8%B4%B9%E7%89%88%7C1521461468568; jac21581199=78751211; CNZZDATA4478442=cnzz_eid%3D878068609-1521456533-https%253A%252F%252Fwww.baidu.com%252F%26ntime%3D1521461319; Hm_lvt_21be24c80829bd7a683b2c536fcf520b=1521461287,1521463471; Hm_lpvt_21be24c80829bd7a683b2c536fcf520b=1521463471",
    "X-Forwarded-For" : "%s"
}

for i in range(0,500):
    choice = (
        random.randint(1, 2),
        random.randint(1, 4),
        random.randint(1, 3),
        random.randint(1, 4),
        random.randint(1, 3),
        random.randint(1, 3),
        random.randint(1, 3),
        random.randint(1, 3),
        random.randint(1, 3),
        random.randint(1, 3),
    )
    data["submitdata"] = data["submitdata"] % choice
    header["X-Forwarded-For"] = (str(random.randint(1,255))+".")+(str(random.randint(1,255))+".")+(str(random.randint(1,255))+".")+str(random.randint(1,255))
    r = requests.post(url = url,headers=header,data=data)
    print(header["X-Forwarded-For"],r.text)
    data["submitdata"] = "1$%s}2$%s}3$%s}4$%s}5$%s}6$%s}7$%s}8$%s}9$%s}10$%s"
    header["X-Forwarded-For"] = "%s"

Imagen de efecto:


image.png

image.png


image.png

 

Respecto a este artículo, porque lo he escrito antes, no lo repetiré

3.5 Obtenga la IP del proxy de la red pública y juzgue si se puede usar y el tiempo de demora

En este ejemplo, queremos rastrear la IP del proxy y verificar la viabilidad y latencia de estos proxies. (Puede agregar la IP del proxy rastreada a la cadena de proxy y luego realizar las tareas de infiltración habituales). Aquí, llamo directamente al comando del sistema Linux

ping -c 1 " + ip.string + " | awk 'NR==2{print}' - 

Si desea ejecutar este programa en Windows, debe modificar os.popenel comando en la penúltima línea para que Windows lo pueda ejecutar.

from bs4 import BeautifulSoup
import requests
import os

url = "http://www.xicidaili.com/nn/1"
headers = {'User-Agent': 'Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/62.0.3202.62 Safari/537.36'}
r = requests.get(url=url,headers=headers)
soup = BeautifulSoup(r.text,"lxml")
server_address = soup.select(".odd > td:nth-of-type(4)")
ip_list = soup.select(".odd > td:nth-of-type(2)")
ports = soup.select(".odd > td:nth-of-type(3)")
for server,ip in zip(server_address,ip_list):
    if len(server.contents) != 1:
        print(server.a.string.ljust(8),ip.string.ljust(20), end='')
    else:
        print("未知".ljust(8), ip.string.ljust(20), end='')
    delay_time = os.popen("ping -c 1 " + ip.string + " | awk 'NR==2{print}' -")
    delay_time = delay_time.read().split("time=")[-1].strip("\r\n")
    print("time = " + delay_time)


image.png

3.gif

Cuatro, conclusión

Por supuesto, también puedes hacer muchas cosas interesantes con Python. Si no comprende muy bien los ejemplos anteriores, finalmente enviaré un conjunto de tutorial introductorio del rastreador de Python: Capítulo introductorio del rastreador web de Python --- mi abuelo puede entenderlo . Realmente hay mucho aprendizaje en Internet ahora, espero que pueda hacer un buen uso de él.


Aún quiero recomendar el grupo de aprendizaje de Python que construí yo mismo : 721195303 , todos los cuales están aprendiendo Python. Si quieres aprender o estás aprendiendo Python, puedes unirte. Todos son parte del desarrollo de software y comparten productos secos de tiempo. a tiempo (solo relacionado con el desarrollo de software de Python), incluida una copia de los últimos materiales avanzados de Python y la enseñanza basada en cero compilada por mí en 2021. ¡Bienvenidos amigos que están en avanzado e interesados ​​en Python para unirse!

Supongo que te gusta

Origin blog.csdn.net/aaahtml/article/details/112857514
Recomendado
Clasificación