Python series-start en el suelo (1)
También escribí un blog sobre rastreadores antes, puede consultar:
registro de código de grupo de proxy de IP del rastreador
Python crawler crawler network novela
Práctica del rastreador de Python rastreando información
Vistas de página del experimento del rastreador de Python: genial
Evite gatear ilegalmente
- Optimice su programa de vez en cuando para evitar interferencias con el funcionamiento normal del sitio web visitado
- Al utilizar y difundir los datos rastreados, revise el contenido capturado. Si encuentra contenido sensible, como la privacidad del usuario, secretos comerciales, etc., debe detener el rastreo o la difusión a tiempo.
Clasificación de rastreadores en escenarios de uso
Reptil común
Una parte importante del sistema de rastreo, que captura una página completa de datos.
Rastreador de enfoque
Construido sobre la base de rastreadores generales. El rastreo es una parte específica de la página.
Rastreador incremental
Verifique el estado de las actualizaciones de datos en el sitio web. Rastrear solo el contenido actualizado más reciente del sitio web
Reptiles Anti-reptiles
Mecanismo anti-ascenso
Los sitios web del portal pueden evitar que los rastreadores rastreen los datos del sitio web mediante la formulación de estrategias o medios técnicos correspondientes.
Estrategia anti-anti-escalada
El programa rastreador puede descifrar el mecanismo anti-rastreo en el sitio web del portal mediante la formulación de estrategias o medios técnicos relevantes, a fin de obtener la información del sitio web del portal.
protocolo robots.txt
Acuerdo de caballeros. Especifica qué datos del sitio web pueden ser rastreados por los rastreadores y qué datos no pueden ser rastreados.
Puede ingresar /robots.txt después del nombre del sitio web para ver el acuerdo de robots del sitio web
Encabezados de solicitud y encabezados de respuesta comunes
Encabezado de solicitud
Agente de usuario
La identidad del operador de la solicitud, como Google Chrome.
Conexión
Una vez completada la solicitud, ya sea para desconectarse o mantenerse conectado
Encabezado de respuesta
Tipo de contenido
El tipo de datos que el servidor responde al cliente.
módulo de solicitudes
Un módulo nativo basado en solicitudes de red en Python, que es muy poderoso, simple y rápido, y extremadamente eficiente.
作用:模拟浏览器发送请求
Pasos de uso:
- URL especificada
- Iniciar una solicitud
- Obtener datos de respuesta
- Almacenamiento persistente
descargar:pip install requests
ejemplo:
import requests
# 下载一个网页
url = 'http://www.linlida.com/0_646/'
# 模拟浏览器发送HTTP请求
response = requests.get(url)
response.encoding='gbk'
print(response.encoding)
# print(response.text)
# 持久化存储
with open('./requestsDemo.html', 'w', encoding='utf-8') as fp:
fp.write(response.text)
efecto:
Rastrear la página de resultados de búsqueda correspondiente a la entrada realizada por Sogou (simple recopilador de páginas web)
Código:
import requests
import random
# UA 伪装
# User-Agent(请求载体):门户网站的服务器会检测对于请求的载体身份表示,如果检测到请求的载体身份为某一款浏览器,当前的请求一定是正常的请求
user_agent_list=[
'Mozilla/5.0(compatible;MSIE9.0;WindowsNT6.1;Trident/5.0)',
'Mozilla/4.0(compatible;MSIE8.0;WindowsNT6.0;Trident/4.0)',
'Mozilla/4.0(compatible;MSIE7.0;WindowsNT6.0)',
'Opera/9.80(WindowsNT6.1;U;en)Presto/2.8.131Version/11.11',
'Mozilla/5.0(WindowsNT6.1;rv:2.0.1)Gecko/20100101Firefox/4.0.1',
'Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.1 (KHTML, like Gecko) Chrome/21.0.1180.71 Safari/537.1 LBBROWSER',
'Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; SV1; QQDownload 732; .NET4.0C; .NET4.0E)',
'Mozilla/5.0 (Windows NT 5.1) AppleWebKit/535.11 (KHTML, like Gecko) Chrome/17.0.963.84 Safari/535.11 SE 2.X MetaSr 1.0',
'Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Maxthon/4.4.3.4000 Chrome/30.0.1599.101 Safari/537.36',
'Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/38.0.2125.122 UBrowser/4.0.3214.0 Safari/537.36',
'Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/39.0.2171.95 Safari/537.36 OPR/26.0.1656.60',
'Opera/8.0 (Windows NT 5.1; U; en)',
'Mozilla/5.0 (Windows NT 5.1; U; en; rv:1.8.1) Gecko/20061208 Firefox/2.0.0 Opera 9.50',
'Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; en) Opera 9.50',
'Mozilla/5.0 (Windows NT 6.1; WOW64; rv:34.0) Gecko/20100101 Firefox/34.0',
'Mozilla/5.0 (X11; U; Linux x86_64; zh-CN; rv:1.9.2.10) Gecko/20100922 Ubuntu/10.10 (maverick) Firefox/3.6.10',
'Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/534.57.2 (KHTML, like Gecko) Version/5.1.7 Safari/534.57.2',
'Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/39.0.2171.71 Safari/537.36',
'Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.11 (KHTML, like Gecko) Chrome/23.0.1271.64 Safari/537.11',
'Mozilla/5.0 (Windows; U; Windows NT 6.1; en-US) AppleWebKit/534.16 (KHTML, like Gecko) Chrome/10.0.648.133 Safari/534.16',
'Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/536.11 (KHTML, like Gecko) Chrome/20.0.1132.11 TaoBrowser/2.0 Safari/536.11',
'Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.1 (KHTML, like Gecko) Chrome/21.0.1180.71 Safari/537.1 LBBROWSER',
'Mozilla/5.0 (compatible; MSIE 9.0; Windows NT 6.1; WOW64; Trident/5.0; SLCC2; .NET CLR 2.0.50727; .NET CLR 3.5.30729; .NET CLR 3.0.30729; Media Center PC 6.0; .NET4.0C; .NET4.0E; LBBROWSER)',
'Mozilla/5.0 (Windows NT 5.1) AppleWebKit/535.11 (KHTML, like Gecko) Chrome/17.0.963.84 Safari/535.11 SE 2.X MetaSr 1.0',
'Mozilla/4.0 (compatible; MSIE 7.0; Windows NT 5.1; Trident/4.0; SV1; QQDownload 732; .NET4.0C; .NET4.0E; SE 2.X MetaSr 1.0)',
'Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/38.0.2125.122 UBrowser/4.0.3214.0 Safari/537.36'
]
if __name__ == '__main__':
url = 'https://www.sogou.com/web'
# 处理url携带参数,封装到字典中
kw = input('输入搜索内容: ')
param = {
'query': kw
}
header = {
'User-Agent': random.choice(user_agent_list)
}
# 对指定的url发起的请求对应的url是携带参数的,并且请求过程中处理了参数
response = requests.get(url, param, headers=header)
page_text = response.text
fileName = kw + '.html'
with open(fileName, 'w', encoding='utf-8') as fp:
fp.write(response.text)
print(fileName, '保存成功')
efecto:
Traducción de Crack Baidu
Análisis: cada vez que ingresa contenido, la página se actualizará parcialmente. Después del análisis de la red, se encuentra que los sugs se pasan entre sí y se envía una solicitud ajax.
Código:
import requests
import random
import json
user_agent_list=[
'Mozilla/5.0(compatible;MSIE9.0;WindowsNT6.1;Trident/5.0)',
'Mozilla/4.0(compatible;MSIE8.0;WindowsNT6.0;Trident/4.0)',
'Mozilla/4.0(compatible;MSIE7.0;WindowsNT6.0)',
'Opera/9.80(WindowsNT6.1;U;en)Presto/2.8.131Version/11.11',
'Mozilla/5.0(WindowsNT6.1;rv:2.0.1)Gecko/20100101Firefox/4.0.1',
'Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.1 (KHTML, like Gecko) Chrome/21.0.1180.71 Safari/537.1 LBBROWSER',
'Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; SV1; QQDownload 732; .NET4.0C; .NET4.0E)',
'Mozilla/5.0 (Windows NT 5.1) AppleWebKit/535.11 (KHTML, like Gecko) Chrome/17.0.963.84 Safari/535.11 SE 2.X MetaSr 1.0',
'Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Maxthon/4.4.3.4000 Chrome/30.0.1599.101 Safari/537.36',
'Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/38.0.2125.122 UBrowser/4.0.3214.0 Safari/537.36',
'Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/39.0.2171.95 Safari/537.36 OPR/26.0.1656.60',
'Opera/8.0 (Windows NT 5.1; U; en)',
'Mozilla/5.0 (Windows NT 5.1; U; en; rv:1.8.1) Gecko/20061208 Firefox/2.0.0 Opera 9.50',
'Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; en) Opera 9.50',
'Mozilla/5.0 (Windows NT 6.1; WOW64; rv:34.0) Gecko/20100101 Firefox/34.0',
'Mozilla/5.0 (X11; U; Linux x86_64; zh-CN; rv:1.9.2.10) Gecko/20100922 Ubuntu/10.10 (maverick) Firefox/3.6.10',
'Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/534.57.2 (KHTML, like Gecko) Version/5.1.7 Safari/534.57.2',
'Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/39.0.2171.71 Safari/537.36',
'Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.11 (KHTML, like Gecko) Chrome/23.0.1271.64 Safari/537.11',
'Mozilla/5.0 (Windows; U; Windows NT 6.1; en-US) AppleWebKit/534.16 (KHTML, like Gecko) Chrome/10.0.648.133 Safari/534.16',
'Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/536.11 (KHTML, like Gecko) Chrome/20.0.1132.11 TaoBrowser/2.0 Safari/536.11',
'Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.1 (KHTML, like Gecko) Chrome/21.0.1180.71 Safari/537.1 LBBROWSER',
'Mozilla/5.0 (compatible; MSIE 9.0; Windows NT 6.1; WOW64; Trident/5.0; SLCC2; .NET CLR 2.0.50727; .NET CLR 3.5.30729; .NET CLR 3.0.30729; Media Center PC 6.0; .NET4.0C; .NET4.0E; LBBROWSER)',
'Mozilla/5.0 (Windows NT 5.1) AppleWebKit/535.11 (KHTML, like Gecko) Chrome/17.0.963.84 Safari/535.11 SE 2.X MetaSr 1.0',
'Mozilla/4.0 (compatible; MSIE 7.0; Windows NT 5.1; Trident/4.0; SV1; QQDownload 732; .NET4.0C; .NET4.0E; SE 2.X MetaSr 1.0)',
'Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/38.0.2125.122 UBrowser/4.0.3214.0 Safari/537.36'
]
if __name__ == '__main__':
post_url = 'https://fanyi.baidu.com/sug'
# post请求参数处理
data = {
'kw': 'cat'
}
header = {
'User-Agent': random.choice(user_agent_list)
}
response = requests.post(post_url, data, headers=header)
# 获取响应数据: json()方法返回的是obj对象 (如果确认响应数据是json类型的,才可以使用json()方法)
page_json = response.json()
print(page_json)
# 持久化存储
fp = open('./cat.json','w', encoding='utf-8');
json.dump(page_json, fp=fp, ensure_ascii=False)
print('cat.json保存成功')