前言

用python结合selenium模块写爬虫程序简单多了,还可直接驱动浏览器,比无头浏览器更加直观,同时加深了自己对爬虫的理解

场景

工作原因要采集1688网站上的店铺信息(突然意识到这文章是发布在阿里云栖社区,明目张胆采集马爸爸家店铺信息是不是不太好),另外访问频繁,经常需要验证码,python这时可以大显身手。

准备

部分代码

from selenium import webdriver   # 导入webdriver包  
driver = webdriver.Firefox()    # 初始化一个火狐浏览器实例,记得安装火狐浏览器 
driver.maximize_window()        # 最大化浏览器,根据需要 
driver.get("https://www.1688.com")  # 通过get()方法,打开一个url站点  
driver.quit()     #关闭并退出浏览器

然后通过css选择器、xpath等定位目标位置。
由于数据需要入库,平时经常使用mysql数据库,百度了一番,引入pymysql模块

import pymysql
# 打开数据库连接
db = pymysql.connect("localhost","testuser","test123","TESTDB" )
# 使用 cursor() 方法创建一个游标对象 cursor
cursor = db.cursor()
# 使用 execute()  方法执行 SQL 查询 
cursor.execute("SELECT VERSION()")
# 使用 fetchone() 方法获取单条数据.
data = cursor.fetchone()
print ("Database version : %s " % data)
# 关闭数据库连接
db.close()

再完善代码,就可以完成店铺信息初步采集。

补充:验证码处理

一开始,尝试自己写代码识别图片验证码,首先对图片进行处理:二值化、降噪,这两步容易实现,
接着分割字符时,对于字母类型连在一起的不知道如何正确处理,于是取内容部分的宽度进行等分。
到了识别环节,查阅资料得知:有可以直接拿来用的识别库;还可以通过机器学习来训练识别验证码。
考虑到自己基础薄弱,机器学习来训练实践起来难度高,再者短期内这些知识使用频率不高,最终放弃自己写代码识别验证码。

最后的解决方案:

偷懒,选用了第三方的图片识别服务,提交验证码图片到服务商,返回正确的结果。-,-

总结

程序虽然简单,确实感受到了python代码的简洁效率,需要使用的功能,直接引入模块查询使用方法就能帮助快速完成功能。
现在仅仅会使用前辈提供的模块,通过python来实现自己想要的小功能,背后的逻辑、python的编程思维,还需逐步理解深入。