目标网站 --> 有效机构查询网
需求如下:
咋一看 不太难 全是静态html 且数据也都是规则的 这时候xpath工程师的作用就体现了!
于是乎先开始抓接口 查询接口
这里出现了个验证码 而且是会后端验证的(有那种只是前端验证不给后端验证的忽悠人的验证码) 还好是普通的数英验证码 直接调用我以前的接口就行
headers = {
"User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/62.0.3202.62 Safari/537.36"
}
s = requests.Session()
r = s.get('https://las.cnas.org.cn/LAS/publish/externalQueryL1.jsp', headers=headers)
print(r.text)
r = s.get('https://las.cnas.org.cn/LAS/verify/getValidateCode.action?fleshCode={0}'.format(str(random.uniform(0, 1))), headers=headers)
with open('verify.jpg', 'wb') as f:
f.write(r.content)
url = 'http://127.0.0.1:4006/verify' # 验证码识别接口(自启) 有需要的童鞋可以留言找我获取 支持大多数4-6位数英验证码
data = open("verify.jpg", "rb").read()
verify = requests.post(url, data=data).json().get('code')
print(verify)
把验证码这一块破解之后 后续的就挺简单了 xpath+re 解决一切数据匹配问题
另外多提一句 保存CSV格式文件为防止乱码 encoding应该设为utf-8-sig
with open('lasCnas{0}.csv'.format(city), 'a+', encoding='utf-8-sig', newline='') as csvfile:
spamwriter = csv.writer(csvfile, dialect=('excel'))
# 设置标题
spamwriter.writerow(["公司名", "注册编号", "报告", "联系人", "联系电话", "邮政编码", "传真号码", "电子邮箱", "单位地址", "认可有效期", "暂停项目/参数", "网站地址", "认可能力范围"])
github传送门 --> 爬取有效机构查询网(CNAS)全量数据