Python爬虫:对selenium的webdriver进行简单封装

简介: Python爬虫:对selenium的webdriver进行简单封装

在使用selenium过程中,发现经常需要使用的两个参数user-agent请求头 和 proxy代理,设置需要一大堆代码


requests就比较简单,于是乎 Browser类 就被封装成了类似requests库的一个模块,便于平时爬虫使用


项目说明: PHANTOMJS 和 Chrome 浏览器,获取网页使用


代码示例

# -*- coding: utf-8 -*-
# @File    : browsers.py
# @Date    : 2018-05-30
from selenium import webdriver
from selenium.webdriver.common.desired_capabilities import DesiredCapabilities
from selenium.webdriver.common.proxy import ProxyType
USER_AGENT = "Mozilla/5.0 (Windows NT 6.1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/41.0.2228.0 Safari/537.36"
class Browser(object):
    """PHANTOMJS 和 Chrome 浏览器,获取网页使用"""
    def __init__(self, browser):
        """
        :param
            browser: 浏览器对象,通过静态方法from_phantomJS 或 from_chrome获取
        """
        self.browser = browser
    @staticmethod
    def from_phantomJS(user_agent=USER_AGENT, proxy=None):
        """获取PhantomJS
        :param user_agent: {str} 请求头
        :param proxy: {str} 代理地址, 如:127.0.0.0:8080
        :return:  browser浏览器对象
        """
        dcap = dict(DesiredCapabilities.PHANTOMJS)
        # 设置user-agent请求头
        dcap["phantomjs.page.settings.userAgent"] = user_agent
        # 禁止加载图片
        dcap["phantomjs.page.settings.loadImages"] = False
        phantomJS = webdriver.PhantomJS(desired_capabilities=dcap)
        # 设置代理
        if proxy != None:
            _proxy = webdriver.Proxy()
            _proxy.proxy_type = ProxyType.MANUAL
            _proxy.http_proxy = proxy
            # 将代理设置添加到webdriver.DesiredCapabilities.PHANTOMJS中
            _proxy.add_to_capabilities(webdriver.DesiredCapabilities.PHANTOMJS)
            phantomJS.start_session(webdriver.DesiredCapabilities.PHANTOMJS)
        return Browser(phantomJS)
    @staticmethod
    def from_chrome(user_agent=USER_AGENT, proxy=None):
        """获取Chrome
        :param user_agent: {str} 请求头
        :param proxy: {str} 代理地址, 如:127.0.0.0:8080
        :return:  browser浏览器对象
        """
        options = webdriver.ChromeOptions()
        options.add_argument('lang=zh_CN.UTF-8')
        # 设置user-agent请求头
        options.add_argument('user-agent=%s' % user_agent)
        # 设置代理
        if proxy != None:
            options.add_argument('--proxy-server= %s' % proxy)
            # http://www.baidu.com
        # 图片不加载
        prefs = {
            'profile.default_content_setting_values': {
                'images': 2
            }
        }
        options.add_experimental_option('prefs', prefs)
        chrome = webdriver.Chrome(chrome_options=options)
        return Browser(chrome)
    def get_html(self, url):
        """获取网页文件
        :param url: {str} 网页链接
        :return:  {str} 网页文本
        """
        self.browser.get(url)
        return self.browser.page_source
    @property
    def title(self):
        """获取标题
        :return {str} 网页标题
        """
        return self.browser.title
    def save_screenshot(self, name=None):
        """截图保存
        :param name: {str} 图片名称, 如: "abc.png"
        :return None
        """
        if name == None:
            name = "%s.png" % self.browser.title
        self.browser.save_screenshot(name)
    def close(self):
        """关闭浏览器
        :return None
        """
        self.browser.close()
        self.browser.quit()
if __name__ == '__main__':
    # 这是我自己写的代理ip获取方法
    import proxy_helper
    proxy = proxy_helper.get_ip()
    url = "https://httpbin.org/get?show_env=1"
    # 实例化浏览器
    browser = Browser.from_phantomJS(proxy=proxy)
    html = browser.get_html(url)  # 获取网页
    title = browser.title  # 获取标题
    browser.save_screenshot()  # 截图
    browser.close()  # 关闭浏览器
    # 打印输出
    print(html)
    print(title)
相关文章
|
1天前
|
数据采集 XML API
Python 爬虫数据抓取(10):LXML
Python 爬虫数据抓取(10):LXML
9 1
|
3天前
|
数据采集 Python
半小时速通Python爬虫!GitHub开源的Python爬虫入门教程
今天给小伙伴们带来了一篇详细介绍 Python 爬虫入门的教程,从实战出发,适合初学者。 小伙伴们只需在阅读过程紧跟文章思路,理清相应的实现代码,30 分钟即可学会编写简单的 Python 爬虫。
|
3天前
|
数据采集 Python
半小时速通Python爬虫!GitHub开源的Python爬虫入门教程
今天给小伙伴们带来了一篇详细介绍 Python 爬虫入门的教程,从实战出发,适合初学者。 小伙伴们只需在阅读过程紧跟文章思路,理清相应的实现代码,30 分钟即可学会编写简单的 Python 爬虫。
|
3天前
|
数据采集 前端开发 Java
Python简单爬虫案例
用pyhton从网页中爬取数据,是比较常用的爬虫方式。网页一般由html编写,里面包含大量的标签,我们所需的内容都包含在这些标签之中,除了对python的基础语法有了解之外,还要对html的结构以及标签选择有简单的认知,下面就用爬取fl小说网的案例带大家进入爬虫的世界。
|
4天前
|
数据采集 XML 存储
基于Selenium+Python实现自动解数独,秒变最强大脑
基于Selenium+Python实现自动解数独,秒变最强大脑
|
4天前
|
数据采集 前端开发 Java
Python简单爬虫案例
用pyhton从网页中爬取数据,是比较常用的爬虫方式。网页一般由html编写,里面包含大量的标签,我们所需的内容都包含在这些标签之中,除了对python的基础语法有了解之外,还要对html的结构以及标签选择有简单的认知,下面就用爬取fl小说网的案例带大家进入爬虫的世界。
|
5天前
|
数据采集 JavaScript 数据安全/隐私保护
经验大分享:python爬虫
经验大分享:python爬虫
|
5天前
|
数据采集 JavaScript 数据安全/隐私保护
经验大分享:python爬虫
经验大分享:python爬虫
|
5天前
|
数据采集 Web App开发 前端开发
Python有哪些好用的爬虫框架
在Python中,Scrapy是一个强大的网络爬虫框架,专为数据采集设计,具有高度可定制的爬取流程、内置的数据提取工具、自动请求调度、分布式爬取支持和中间件扩展。它允许开发者轻松构建和管理爬虫,高效抓取和处理网页数据。 Beautiful Soup和Requests库组合则提供了简单的HTML解析和请求功能。Requests库用于发送HTTP请求,而Beautiful Soup则用于解析HTML内容,两者结合便于数据提取。Requests-HTML库进一步简化了这一过程,集成了Requests的功能并内置HTML解析,支持CSS选择器和XPATH。
|
6天前
|
数据采集 存储 Web App开发
python爬虫编写实例分享
python爬虫编写实例分享