赞
踩
selenium模块可以模拟浏览器操作,比如输入文本、点击、前进、后退等,可以获取经过渲染之后的网页内容。
目前最新版的selenium模块不支持pantomJS浏览器,所以最好使用Chrome浏览器或者火狐浏览器。
1、使用anaconda命令进行安装,执行命令conda install selenium
2、Windows也可使用pip命令进行安装,执行命令pip install selenium
3、Linux系统可使用apt-get命令进行安装,执行命令 apt-get install python-selenium
4、安装Chrome浏览器或者火狐浏览器,直接使用腾讯管家、360或者其他方式安装均可。
5、浏览器driver安装,安装包下载地址传送门点这里
PS:详细的安装方法可以参考这篇文章。文章传送门点这里
关于selenium的函数及其功能,很多博主已经有完备的总结,我这里就不再做重复的工作。
直接给出博主韩小北的一篇文章链接。文章传送门点这里
1、为什么需要使用selenium来编写爬虫?主要是因为有的网站需要通过JavaScript来获取数据,在Python中要获取该类数据最好的方式就是使用selenium模拟浏览器。
2、下面结合一个爬取前程上数据分析职位的实例来看看selenium的运用方法。
from mylog import MyLog
from selenium import webdriver
from save2excel import SaveDataExcel
#定义一个类,用于定义要爬取的项目。
class Item(object):
positionName = None #职位名称
companyName = None #公司名称
jobLocal = None #工作地点
salary = None #薪水
updateTime = None #职位更新时间
#定义一个类用于爬取数据,并保存数据
class Get51Job(object):
#定义构造函数
def __init__(self):
self.mylog = MyLog()
self.urls = self.getUrls()
self.items = self.spider(self.urls)
self.pipelines(self.items)
self.mylog.info('数据开始写入Excel表')
SDE = SaveDataExcel(self.items)
self.mylog.info('数据写入Excel表完成')
#定义一个函数来获取要爬取数据的网站列表
def getUrls(self):
url = 'https://search.51job.com/list/260200,000000,0000,00,9,99,%25E6%2595%25B0%25E6%258D%25AE%25E5%2588%2586%25E6%259E%2590,2,'
urls = []
for i in range(1, 6):
newUrl = url + str(i) + '.html'
urls.append(newUrl)
self.mylog.info('已经成功获取urls')
return urls
#定义一个函数,从指定网页获取所需的数据
def spider(self, urls):
items = []
#47-51行命令,创建了一个Chrome的无界面浏览器
options = webdriver.ChromeOptions()
options.set_headless()
options.add_argument('--headless')
options.add_argument('--disable-gpu')
browser = webdriver.Chrome(options=options)
for url in urls:
browser.get(url)
browser.set_page_load_timeout(10)
browser.maximize_window()
elements = browser.find_elements_by_xpath('//p[@class="t1 "]')
for element in elements:
item = Item()
item.positionName = element.find_element_by_xpath('./span/a').text
item.companyName = element.find_element_by_xpath('../span[@class="t2"]').text
item.jobLocal = element.find_element_by_xpath('../span[@class="t3"]').text
item.salary = element.find_element_by_xpath('../span[@class="t4"]').text
item.updateTime = element.find_element_by_xpath('../span[@class="t5"]').text
items.append(item)
browser.quit()
return items
#定义一个函数,功能是将数据保存至本地文件
def pipelines(self, items):
fileName = '数据分析.txt'
with open(fileName, 'w') as fp:
for item in items:
fp.write(item.positionName + '\t')
fp.write(item.companyName + '\t')
fp.write(item.jobLocal + '\t')
fp.write(item.salary + '\t')
fp.write(item.updateTime + '\n')
self.mylog.info('%s写入文件%s完成'%(item.positionName, fileName))
if __name__ == '__main__':
GJ = Get51Job()
3、从上面代码可以看出,将selenium模块运用在爬虫中,主要分为两大部分,第一部分是创建浏览器获取要爬取的网页内容;第二部分:利用自带的选择器来获取所需的数据。
3.1、创建浏览器获取要爬取的网页内容见如下代码片段。
options = webdriver.ChromeOptions()
options.set_headless()
options.add_argument('--headless')
options.add_argument('--disable-gpu')
browser = webdriver.Chrome(options=options)
for url in urls:
browser.get(url)
browser.set_page_load_timeout(10)
browser.maximize_window()
3.2、利用自带的选择器来获取所需的数据,见如下代码片段。
elements = browser.find_elements_by_xpath('//p[@class="t1 "]')
for element in elements:
item = Item()
item.positionName = element.find_element_by_xpath('./span/a').text
item.companyName = element.find_element_by_xpath('../span[@class="t2"]').text
item.jobLocal = element.find_element_by_xpath('../span[@class="t3"]').text
item.salary = element.find_element_by_xpath('../span[@class="t4"]').text
item.updateTime = element.find_element_by_xpath('../span[@class="t5"]').text
items.append(item)
本文参考的文档链接如下,如有侵权请联系我(qq:1226143387)进行删除:
1、作者:胖叔blog selenium之使用chrome浏览器测试(附chromedriver与chrome的对应关系表)
2、作者:韩小白 Selenium基于Python 进行 web 自动化测试
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。