Selenium爬取欧米奇培训学校官网新闻
数据存储在xls(x)表格文件中
1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192#!/usr/bin/python3import refrom selenium.webdriver.support import expected_conditions as ECfrom selenium.webdriver.support.ui import WebDriverWaitfrom selenium.webdriver.common.by import Byfrom selenium import webdriverimport timefrom lxml import etreeimport xlrd2import xlwtclass Spider(object): # chrome ...
自动化操作帮考网接口(涉及多线程)
生产者消费者模式
声明: 大家不要用这种方式恶意消耗别人付费资源,损失严重可能要承担法律后果,另外如果有条件建议后端开发时候增加图形验证码,好多短信炸弹都是采集这种”大开门”接口作为资源
12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364import randomimport sysimport timefrom queue import Queueimport threadingimport requestsdef get_phone_num(): second_spot = random.choice([3, 5, 7, 8]) third_spot = {3: random.randint(0, 9), 4: random.choice([5, 7, 9]), 5: random.choice([i fo ...
H5页面选择文件和拖入文件两种方式兼容
demo是在React组件, 原生js同理稍加修改即可
12345678910111213141516171819202122232425262728293031323334353637383940414243<input id='fileInput' accept=".jpg, .jpeg, .png" multiple onChange={e => { this.selectFiles(e, 1) }} type='file' style={{ width: 0, height: 0, display: 'none'}}></input>QUpload.ondrop = function (e) { e.preventDefault() that.selectFiles(e, 2)}selectFiles = (e, fromType) =& ...
Selenium爬取斗鱼主播列表
只获取其中一个板块第一页
1234567891011121314151617181920212223242526272829303132333435363738394041# -*- coding: utf-8 -*-from selenium import webdriverfrom fake_useragent import UserAgentimport timeclass DouyuSpider(object): start_url = 'https://www.douyu.com/g_LOL' driver = webdriver.Chrome(executable_path=r"C:\Programs\chromedriver\chromedriver.exe") options = webdriver.ChromeOptions() ua = UserAgent().chrome options.add_argument('user-agent=%s' % ua) def ...
Scrapy中Pipeline处理本地文件写入标准写法(一般)
123456789101112131415class QsbkPipeline(object): def __init__(self): self.fp = open("duanzi.json",'wb') self.exporter = JsonLinesItemExporter(self.fp,ensure_ascii=False,encoding='utf-8') def open_spider(self,spider): print('爬虫开始了...') def process_item(self, item, spider): self.exporter.export_item(item) return item def close_spider(self,spider): self.fp.close() print('爬虫结束了...')
scrapy框架的中间件中使用selenium
12345678910111213141516171819202122232425class SeleniumDownloadMiddleware(object): def __init__(self): self.driver = webdriver.Chrome(executable_path=r"C:\Programs\chromedriver\chromedriver.exe") options = webdriver.ChromeOptions() ua = UserAgent().chrome options.add_argument('user-agent=%s'%ua) def process_request(self,request,spider): self.driver.set_window_size(3000, 30000) self.driver.get(request.url) time.sleep(3) ...
Python调用摄像头拍照自动发邮件到邮箱
1234567891011121314151617181920212223242526272829303132333435363738394041424344454647import os # 删除图片文件import cv2 # 调用摄像头拍摄照片from smtplib import SMTP_SSL # SSL加密的 传输协议from email.mime.text import MIMEText # 构建邮件文本from email.mime.multipart import MIMEMultipart # 构建邮件体from email.header import Header # 发送内容# 调用摄像头拍摄照片def get_photo(): cap = cv2.VideoCapture(0) # 开启摄 ...
全局状态管理Dva的使用
前两天项目(Antd + Umijs)项目中传值不方便, 于是便想到了store全局状态管理看了下文档Umijs既然内置了那就直接按照文档搞起~ 传送门 👈🏻文档里比较详细,原理 场景 配置项 范例一应俱全.
简书文章
https://www.jianshu.com/p/e184cd6d253c
Dva
https://dvajs.com/
Redux
https://www.redux.org.cn/
我没有用Umi中的@connect反而是用的Dva中的connect,都差不多
1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859// src/models/test.tsconst model = { namespace: "test", state: { key: 0, }, effects: ...
JS异步的那些小心思
异步常规操作1234567const fn1 = (async () => { return 1;})fn1().then(res=>{ console.log( res );});
等价于
123456789const fn2 = () => { return new Promise(resolve=>{ resolve(2) })}fn2().then(res=>{ console.log( res );});
异步执行循环forEach map是同步操作 并行执行while, do while, for in, for of是串行执行
123456789101112131415const sleep = (time: number) => { return new Promise((resolve, reject) => { setTimeout(() = ...
javascript之function用括号包起来
function a(){}(函数声明)返回undefined(不会执行),仅仅是函数声明(声明提前)
var res = function a(){}() (函数表达式),立即执行该函数,必须使用一个变量接收返回值,否则报错
(function a(){}) (命名函数表达式)会返回这个函数(不会执行),但是在括号外面无法调用该函数,需要一个变量接收这个函数,var fun = (function a(){}),一般这个用在递归上1234567var fact = (function f(num){ if(num === 1 ) return 1; else return num * f(num - 1);})console.log(fact(3)); // 6
(function a(){})() (函数表达式),立即执行该函数,不必须使用变量接收
不同结果出现的原因是因为函数表达式和函数声明的区别