前言
本文为上一篇爬虫文章的多线程优化版,上一版本爬取时间为3000s
左右,优化后仅200多s
前一文连接:爬取京东笔记本电脑销量榜每件商品详情页url,并存入云服务器中的mysql库
较原版所作改动:
1.获取的url改为data-sku,即产品Id。
2.双线程池使用,获取数据和插入数据到数据库同样使用了多线程。
3.原数据库操作为创建数据表插入数据操作,现在为清空原有表中数据再插入新数据操作。
4.需在数据库中先创建数据库和数据表
5.可能遇到的错误及解决方法:
数据库设置最大连接数方法(使用ThreadPool多线程插入数据到数据库报错)
使用ThreadPool()中的pool.map()多线程运行selenium webdriver导致的内存占用巨大,内存溢出乃至电脑卡死解决方法
文末附完整代码(备注:数据库ip和密码以***替代
)
一、优化内容
1、cromeOptions()加载优化
chromeOptions 是一个配置 chrome 启动是属性的类。通过这个类,我们可以为chrome配置如下参数(这个部分可以通过selenium源码看到):
设置 chrome 二进制文件位置 (binary_location)
添加启动参数 (add_argument)
添加扩展应用 (add_extension, add_encoded_extension)
添加实验性质的设置参数 (add_experimental_option)
设置调试器地址 (debugger_address)
添加示例:
from selenium import webdriver
options = webdriver.ChromeOptions()
options.add_argument('lang=zh_CN.UTF-8') # 此为设置编码格式为中文,可用下面配置项替换
# driver = webdriver.Chrome(options = options) #如需打开驱动位置,换下一行
driver = webdriver.Chrome("D:\Anaconda3\envs\Python\chromedriver.exe", options=options)
常用配置项枚举:
–user-data-dir=”[PATH]” 指定用户文件夹User Data路径,可以把书签这样的用户数据保存在系统分区以外的分区。
–disk-cache-dir=”[PATH]“ 指定缓存Cache路径
–disk-cache-size= 指定Cache大小,单位Byte
–first run 重置到初始状态,第一次运行
–incognito 隐身模式启动
–disable-javascript 禁用Javascript
–omnibox-popup-count=”num” 将地址栏弹出的提示菜单数量改为num个。我都改为15个了。
–user-agent=”xxxxxxxx” 修改HTTP请求头部的Agent字符串,可以通过about:version页面查看修改效果
–disable-plugins 禁止加载所有插件,可以增加速度。可以通过about:plugins页面查看效果
–disable-javascript 禁用JavaScript,如果觉得速度慢在加上这个
–disa