本站目的是介绍一些基本应用,组件的组合应用就看每个人的理解了,文档也是很多的就不详细写了。每一篇基本都是基础应用,看文档应该是每个程序员的基本人生吧,感谢。
本介绍的目的是方便大家来使用一些基本组件,爬数据不是目的,偷取别人的私密数据也是违规的,所以仁者见仁智者见智,大家搞一些爱好的基本分析还是可以的。
在爬一些简单数据的时候,一般会遇到几种问题,常见的呢就是:跨域、登录验证乱七八糟的,不过这些都和我今天说的方法没啥关系,因为今天用的是selenium库,也就是自动化web测试工具。一般用selenium做测试的比较多,在我们这里,使用他做一些其他有趣的事情。
python3
的环境,这个就不说了
有了环境之后安装selenium包
pip3 install selenium -i https://pypi.doubanio.com/simple
老规矩还是豆瓣源,速度快
安装了库是无法使用的,我们还需要chromedriver
这种浏览器驱动才行,fox或者chrome都支持,不过我习惯用chromedriver
,这里都已chromedriver来举例了,反正也没什么区别。
在这里我上传一份
chromedriver.zip
接下来我们先使用selenium打开网页,直接贴代码:
from selenium import webdriver
## 如果是chrome浏览器的驱动
driver = webdriver.Chrome("./chromedriver")
driver.get("https://www.qidian.com/")
运行这段代码,可以看到浏览器已经运行起来了,而且打开了起点网站。
这里边列一些我们常用的selenium方法,只列几个常用的吧。
driver.get(url)
发起请求,这个就不多说了哈
driver.title()
获取请求网页的标题
driver.find_element_by_id("id")
获取指定id中的内容
find_elements_by_id("id")
获取所有指定id中的内容
find_element_by_link_text(link_text)
根据准确文字获取定位
find_elements_by_link_text(link_text)
根据准确文字获取定位
find_element_by_xpath(xpath)
用xpath定位标签,xpath之后相信说一
find_elements_by_xpath(xpath)
同上
find_element_by_partial_link_text(self,link_text)
根据模糊文字获取定位
------带s的我都不写了,靠太累了,基本就是这个意思
find_element_by_tag_name(name)
通过标签名进行定位
find_element_by_class_name(name)
通过class标签定位
driver.send_keys("balbala")
向标签输入内容
driver.is_displayed()
判断某个元素是否存在
driver.execute_script(self, script, *args)
执行js脚本
driver.current_url
获取当前driver的url
driver.page_source
获取当前driver的html
driver.close()
关闭当前窗口
driver.quit()
关闭所有窗口
driver.current_window_handle
获取当前窗口,因为有时候进行跳转,这个是非常有必要的
driver.current_window_handle
获取所有窗口
driver.switch_to()
切换窗口
driver.get_cookies()
得到cookies信息
driver.add_cookie(self,cookie_dict)
添加cookies,实现自动登录
driver.implicitly_wait(self, time_to_wait)
等待页面加载时间
driver.set_script_timeout(self, time_to_wait)
设置等待超时时间
还有很多就,,,先不说了
简单的说一下xpath的语法哈,非常简单的说一下
例如我有一个标签
<div id="name">symoon</div>
我像获得symoon,怎么获得呢?用xpath做如下操作
//div[@id="name"]
这样我们可以拿到这个标签,然后怎么操作,哈哈不说了,在xpath里面也可以直接取text
接下来再介绍几个方法,就不一一举例了
//*[contains(text(),'symoon']
模糊匹配
//*[contains(@name,'123')]
模糊匹配某个属性
//span[starts-with(@id,'s_kw_')]
匹配以什么开头
//span[ends-with(@id,'kw_wrap')]
匹配以什么结尾
//*[matchs(text(),'hao13')]
模糊匹配正则
因为我们本文主要说selenium获取数据,就不介绍其他的什么获取href值啊什么的了哈
一个简单的使用,来获取一下当前页面所有小说的名称
from selenium import webdriver
from selenium.webdriver.chrome.options import Options
chrome_options = Options()
chrome_options.add_argument('--headless')
driver = webdriver.Chrome("./chromedriver",options=chrome_options)
book_list=[]
driver.get("https://www.qidian.com/")
ele=driver.find_elements_by_xpath("//div[@class='book-list']//li//a[@class='name']")
for item in ele:
if item.text:
book_list.append(item.text)
可以看到我多加了一个options,是为了进行无头模式,也就是不打开浏览器直接进行操作。
取出来的结果就是当前页面所有小说名称了。
再进行一个小的跳转
from selenium import webdriver
driver = webdriver.Chrome("./chromedriver")
book_list=[]
driver.get("https://www.qidian.com/")
ele=driver.find_elements_by_xpath("//div[@class='book-list']//li//a[@class='name']")
ele[0].click()
还是同样的xpath,这里我们对第一个标签进行了点击事件,取消了无头模式,这样我们的页面会直接跳过去。哈哈,就到这,高深的使用大家一起研究吧。
提醒下哈,无头模式还可以用在乱七八糟程序里,因为又不用打开浏览器,可以根据实际情况使用拉