文章目录(Table of Contents)
简介
这里讲一下python库selenium的简单介绍。这是一个浏览器自动化测试框架,可以模拟出用户操作。所以我们可以通过selenium来做一些爬虫。
我会在下面示例代码部分放一下使用selenium来爬取北邮人论坛十大的内容。
参考资料
- selenium中文指南: Selenium-Python中文文档
- chrome浏览器的插件下载chromedriver : https://github.com/bayandin/chromedriver
- 查看网页源代码(使用driver.page_source来进行查看): Selenium python获取当前页面源码
selenium简单实验
selenium快速使用
首先看一下selenium的快速使用, 我们可以通过下面的方式来查看我们是否获得了我们需要的页面信息 (打印出网页源代码).
- from selenium import webdriver
- import time
- driver = webdriver.Chrome()
- driver.set_page_load_timeout(30)
- driver.get('https://www.seebug.org/vuldb/ssvid-61248')
- print('等待页面加载')
- time.sleep(30)
- print('等待完成')
- print(driver.page_source)
- # 关闭浏览器
- driver.quit()
使用selenium爬取北邮人论坛
- from selenium import webdriver
- from lxml import etree
- import time
- class byr_crawle(object):
- def __init__(self):
- self.username = 'Username'
- self.password = 'Password'
- def run(self):
- driver = webdriver.Firefox()
- driver.set_page_load_timeout(60)
- driver.get('https://bbs.byr.cn/index')
- textElement = driver.find_element_by_id('id')#输入账号
- textElement.clear()
- textElement.send_keys(self.username)
- passWordElement = driver.find_element_by_id('pwd')#输入密码
- passWordElement.clear()
- passWordElement.send_keys(self.password)
- #找到登录按钮,进行登录
- submitElement = driver.find_element_by_id('b_login')
- submitElement.click()
- #等待页面加载完毕
- time.sleep(3)
- html = driver.page_source
- dom_tree = etree.HTML(html)
- #获得十大的标题
- title = dom_tree.xpath('//li[@id="topten"]/div[@class="widget-content"]/ul/li/@title')
- #获得十大的url
- urls = dom_tree.xpath('//li[@id="topten"]/div[@class="widget-content"]/ul/li/a/@href')
- urls = ['https://bbs.byr.cn'+i for i in urls]
- driver.close()
- line = ''
- for i in range(len(urls)):
- line = line+str(i)+' : '+title[i]+'\n'
- return line
- if __name__=='__main__':
- print(byr_crawle().run())
上面的代码可以获取北邮人论坛十大的标题和链接。
我们也可以使用chrome浏览器来进行操作.
- driver = webdriver.Chrome()
结语
虽说使用selenium可以爬取大部分的网站,但是这样导致的后果就是会导致代码的速度变慢,效率变低,因为需要模拟浏览器。所以大部分情况下,如果是做爬虫的话,我们会尽量减少这种方法的使用。
- 微信公众号
- 关注微信公众号
- QQ群
- 我们的QQ群号
评论