[python爬虫]selenium模块使用指南

一、selenium模块简介

selenium模块可以模拟浏览器操作,比如输入文本、点击、前进、后退等,可以获取经过渲染之后的网页内容。
目前最新版的selenium模块不支持pantomJS浏览器,所以最好使用Chrome浏览器或者火狐浏览器。

二、如何安装selenium模块

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模块的函数及其功能

关于selenium的函数及其功能,很多博主已经有完备的总结,我这里就不再做重复的工作。
直接给出博主韩小北的一篇文章链接。文章传送门点这里

四、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 自动化测试

你可能感兴趣的:(Python网络爬虫)