链家二手房数据自动化点选验证码
前言本次分享目的为研究 DrissionPage的相关使用以及xpath/css语法的应用及其点选验证码的机制切勿作为商业目的恶意采集或者网站自觉遵守相关法律法规网址aHR0cHM6Ly9jcy5saWFuamlhLmNvbS9lcnNob3VmYW5nL3BnMS8点击下一页后弹出人机验证点击开始验证后 会有三种类型点选验证码点字、点图、按语序1、环境配置pip install DrissionPage//安装模块官方文档https://www.drissionpage.cn/browser_control/intro新建一个临时py文件然后填入个人电脑里面的浏览器可执行文件路径然后运行即可dp ChromiumPage() path rD:\chrome\chrome.exe# 按需修改为实际浏览器路径 ChromiumOptions.set_browser_path(path).save()保存后以后都不需要配置路径了2. 访问网站from DrissionPage import ChromiumPage, ChromiumOptions dp ChromiumPage() dp.get(https://cs.lianjia.com/ershoufang/pg1/)# 按需修改3. 获取数据元素定位:(静态网页)监听数据:(f动态网页/专门的数据接口)- 通过元素面板中对应标签把每个房源数据当作整体-对应的元素标签每个房源数据内容都在li标签中存在利用CSS/Xpath匹配表数据标签我这里用的是cssdp.eles(css:)# 元素定位使用css选择器匹配多个标签可以查看右侧css选择器语法但不通用4. 保存数据# 导入CSV模块 import csv # 创建文件对象 fopen(data.csv,modew,encodingutf-8,newline # 字典写入的方法fieldnames-字段名,使用dit中键 csv_writercsv.DictWriter(f, fieldnames[]) # 写入表头 csv_writer.writeheader() # 数据 dit{} # 写入数据 csv_writer.writerow(dit)5.翻页处理先触发人机验证 然后载触发点选自动化点选识别1. 判断页面是否有验证码有验证码的链接有特点的url dp.url ifcaptcha in url: # 验证码识别 print(有验证码) else: # 正常采集数据 get_content()2. 出现验证码后我个人用的是超级鹰用其他打码平台效果差不多原理就是弹出人机验证后通过css定位自动点击先过人机验证码dp.ele(text点击按钮开始验证).click() time.sleep(4)等待几秒后弹出点选验证# 定位验证码图片标签 img dp.ele(css:.geetest_box) # 截取验证码图片 img.get_screenshot(bg.png)截取图片上传打码平台计算坐标def get_codex(): chaojiying Chaojiying_Client(用户账号, 用户密码, 软件ID) im open(bg.png, rb).read() print(chaojiying.PostPic(im, 9103)) x_y chaojiying.PostPic(im, 9103)[pic_str]# 9103验证码类型 return x_y.split(|)利用打码平台进行验证码识别获取坐标通过验证后在返回接口中获取uuid列表提取uuid即可效果如上