El rastreador Python obtiene el tipo de cambio de liquidación y venta de divisas del Banco Agrícola de China

Los artículos sirven como notas para registrar el proceso de aprendizaje.

referencia:

https://blog.csdn.net/u012662731/article/details/78537432

Requisito: Enviar al buzón a través del buzón qq el tipo de cambio del dólar bancario en tiempo real obtenido todos los días

Entorno: entorno de desarrollo Mac Os, Sublime Text3, Python3

           Entorno de servidor LAMP+Python3 (CentOs7)

 

Primero verifique el sitio web de destino  http://app.abchina.com/static/app/ll/exchangerate/

A B C

Sube a la página completa y echa un vistazo:

peticiones

Necesita instalar el comando de solicitudes, ingrese en la terminal:

pip install requests

Cree un nuevo archivo llamado test.py e ingrese el siguiente código: 

import requests

if __name__ == '__main__':
	url = 'http://app.abchina.com/static/app/ll/exchangerate/'
	req = requests.get(url)
	print(req.text)

Después de la ejecución, se encontró código confuso:

Solución: Recodificar solicitud

import requests

if __name__ == '__main__':
	url = 'http://app.abchina.com/static/app/ll/exchangerate/'
	req = requests.get(url)
	req.encoding = 'utf-8'
	print(req.text)

 Al observar el código de la página web, descubrimos que los datos del sitio web se representan mediante js, lo que lleva al código que obtenemos sin el contenido del tipo de cambio en tiempo real.

Solución: usar selenio

selenio

Primero instale el comando:

pip install selenium

Importar controlador web en selenio

Estoy usando el navegador Chrome y necesito descargar ChromeDriver

En el entorno Mac, simplemente arrastre el archivo descargado al directorio bin, puede consultar el siguiente tutorial de instalación:

Ventanas: https://www.jianshu.com/p/dd848e40c7ad

Mac: https://blog.csdn.net/ywj_486/article/details/80940087 

Nota: Es posible que el directorio usr/local/bin en Mac no se pueda escribir; consulte https://blog.csdn.net/a547720714/article/details/52678643

import requests
import time
from selenium import webdriver

if __name__ == '__main__':
	driver = webdriver.Chrome()
	url = "http://app.abchina.com/static/app/ll/exchangerate/"
	driver.get(url)
	time.sleep(2) #暂停2秒让网页加载完,这里需要导入time库
	html = driver.page_source
	print(html)
	driver.close()

Imprímelo y podrás ver que esta parte es la información del tipo de cambio.

 Hay muchos densos, esta vez necesitamos usar BeautifulSoup para analizar el código del sitio web.

hermosasopa

pip install beautifulsoup4
import requests
import time
from selenium import webdriver
from bs4 import BeautifulSoup

if __name__ == '__main__':
	driver = webdriver.Chrome()
	url = "http://app.abchina.com/static/app/ll/exchangerate/"
	driver.get(url)
	time.sleep(2) #暂停2秒让网页加载完,这里需要导入time库
	html = driver.page_source

	bf = BeautifulSoup(html,"html.parser")
	ul = bf.find_all('ul', class_ = 'g-priceLst') #通过class标签寻找目标
	li_ul = BeautifulSoup(str(ul),"html.parser")
	li = li_ul.find_all('li')

	for i in range(len(li)):
		print(li[i],'\n')
	
	driver.close()

 Después de ejecutar, obtenemos:

Puede ver que los precios de compra y venta de dólares estadounidenses son: li[5] y li[6] respectivamente.

Integraré el código con el método de correo.

El buzón necesita importar la biblioteca smtplib.

Referencia:  https://blog.csdn.net/mumuqingwei/article/details/82015459

import requests, sys
import time
import schedule
from bs4 import BeautifulSoup
from selenium import webdriver

import smtplib
from email.mime.text import MIMEText
from email.header import Header

from selenium.webdriver.chrome.options import Options



def getRate():
	chrome_options = Options()
	chrome_options.add_argument('--headless')
	chrome_options.add_argument('--disable-gpu')
	chrome_options.add_argument('--no-sandbox')
	driver = webdriver.Chrome(chrome_options=chrome_options)
	url = "http://app.abchina.com/static/app/ll/exchangerate/"
	driver.get(url)
	time.sleep(2)
	html = driver.page_source
	bf = BeautifulSoup(html,"html.parser")
	ul = bf.find_all('ul', class_ = 'g-priceLst')
	li_ul = BeautifulSoup(str(ul),"html.parser")
	li = li_ul.find_all('li')

	content = "银行买入价:"+li[5].string+"\n"+"银行卖出价:"+li[6].string
	driver.close()
	sent_email(mail_body = content)
	

def sent_email(mail_body):
	print(mail_body)
	mail_host="smtp.qq.com"#设置的邮件服务器host必须是发送邮箱的服务器,与接收邮箱无关。
	mail_user=""#qq邮箱登陆名
	mail_pass=""  #开启stmp服务的时候并设置的授权码,注意!不是QQ密码。

	sender=''#发送方qq邮箱
	receivers=['']#接收方qq邮箱

	message=MIMEText(mail_body,'plain','utf-8')
	message['From']=Header("将发件人写在这",'utf-8') #设置显示在邮件里的发件人
	message['To']=Header("接受者写在这",'utf-8') #设置显示在邮件里的收件人

	subject ='ABC中国农业银行结汇售牌价 美元USD'
	message['Subject']=Header(subject,'utf-8') #设置主题和格式

	try:
		smtpobj=smtplib.SMTP_SSL(mail_host,465) #本地如果有本地服务器,则用localhost ,默认端口25,腾讯的(端口465或587)
		smtpobj.set_debuglevel(1)
		smtpobj.login(mail_user,mail_pass)#登陆QQ邮箱服务器
		smtpobj.sendmail(sender,receivers,message.as_string())#发送邮件
		print("邮件发送成功")
		smtpobj.quit()#退出
	except smtplib.SMTPException as e :
		print("Error:无法发送邮件")
		print(e)


#这个方法是定时器
def run():
	schedule.every().day.at("08:00").do(getRate) #每天08:00执行getRate()方法,注意是08:00,填8:00会报错
	# schedule.every(5).minutes.do(getRate) #每5分钟执行一次
	# schedule.every().hour.do(job) #每小时执行一次
	# schedule.every().monday.do(job) #每周一执行
	# schedule.every().wednesday.at("13:15").do(job) #每周三13:15执行

	while True:
		schedule.run_pending()
		time.sleep(1)

if __name__=="__main__":
	run() #执行定时器

Cargue el archivo de código en el servidor y use el comando nohup para ejecutar el archivo (referencia: https://blog.csdn.net/lzw17750614592/article/details/89092319 )

nohup python -u test.py >nohup.out 2>&1 &

Suplemento: debe instalar la versión Centos del navegador Chrome en el servidor; consulte: https://blog.csdn.net/yushun17/article/details/84112730

           Después de instalar Chrome, debe instalar la versión correspondiente de ChromeDriver, puede consultar: https://blog.csdn.net/zzzcl112/article/details/80470884

Supongo que te gusta

Origin blog.csdn.net/qq_35229591/article/details/97640984
Recomendado
Clasificación