欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  IT编程

python selenium 抓包代码封装

程序员文章站 2023-11-29 11:37:16
# 导入selenium模块中的web引擎from selenium import webdriverfrom selenium.webdriver.chrome.options import Optionsimport timeclass Network(object): def __init__(self, url,seconds=20): # 这个是一个用来控制chrome以*面模式打开的浏览器 # 创建一个参数对象,用来控制chrome以*面....
# 导入selenium模块中的web引擎
from selenium import webdriver
from selenium.webdriver.chrome.options import Options
from pyquery import PyQuery as pq
# 时间 下载工具包
import time, wget, os


class Network(object):
    def __init__(self, url, seconds=10):
        # 这个是一个用来控制chrome以*面模式打开的浏览器
        # 创建一个参数对象,用来控制chrome以*面的方式打开
        options = Options()
        options.add_experimental_option('excludeSwitches', ['enable-automation'])
        options.add_argument('--headless')  # 设置Chrome为无头模式
        options.add_argument('--no-sandbox')
        options.add_argument('--disable-dev-shm-usage')
        options.add_argument('blink-settings=imagesEnabled=false')
        options.add_argument('--disable-gpu')
        # 建立浏览器对象 ,通过Phantomjs
        self.browser = webdriver.Chrome(options=options)
        self.url = url
        # 发起请求
        self.browser.get(url)
        time.sleep(3)  # 等待3s
        # 等待一定时间,让js脚本加载完毕
        self.browser.implicitly_wait(seconds)  # seconds 隐式等待

        # 静态文件,图片地址
        cur_dir = os.path.split(os.path.realpath(__file__))[0]
        self.static_src = os.path.abspath(cur_dir + '/./../static/')

        # 常用变量 页面源码,挂载在jq上
        self.JQuery = pq(self.browser.page_source)

    # 浏览器器对象
    def bom(self):
        return self.browser

    # 关闭浏览器
    def close_browser(self):
        self.browser.quit()

    # 模拟浏览器抓取数据主业务 重构 返回浏览器对象
    def main(self, url='', seconds=20):
        # 访问url
        if url == '':
            url = self.url

        self.browser.get(url)
        time.sleep(3)  # 等待3s
        # 等待一定时间,让js脚本加载完毕
        self.browser.implicitly_wait(seconds)  # seconds 隐式等待
        #页面源码 页面源码,挂载在jq上
        self.JQuery = pq(self.browser.page_source)
        return self.browser

    # 如果列表的长度为1强制转换为字典
    def list_or_dict(self, arr):
        if len(arr) == 1:
            return arr[0]
        else:
            return arr

    # 通过tagName获取对象
    def tag_name(self, tag_name):
        return self.list_or_dict(self.browser.find_elements_by_tag_name(tag_name))

    # 通过id获取对象
    def id(self, id):
        return self.browser.find_element_by_id(id)

    # 通过className 获取对象
    def class_name(self, class_name):
        return self.list_or_dict(self.browser.find_elements_by_class_name(class_name))

    # 通过a标签href属性获取对象 用链接文本定位超链接
    def href_name(self, href_name):
        return self.list_or_dict(self.browser.find_elements_by_partial_link_text(href_name))

    # css选择器定位
    def css_selector(self, css_selector):
        return self.list_or_dict(self.browser.find_elements_by_css_selector(css_selector))

    # find 定位选择
    def find(self, element, name):
        if element.find_elements_by_css_selector(name):
            return element.find_elements_by_css_selector(name)

    # 获取元素的属性
    def attr(self, element, attr_name):
        if isinstance(element, list):
            arr = []
            for e in element:
                arr.append(e.get_attribute(attr_name))
            return arr
        else:
            return element.get_attribute(attr_name)

    # 获取元素的文本
    def text(self, element):
        if isinstance(element, list):
            arr = []
            for e in element:
                arr.append(e.text)
            return arr
        else:
            return element.text

    # 获取页面body数据
    def get_body(self):
        # 返回body对象
        return self.tag_name('body')[0]

    # 下载文件,图片等
    def download(self, urls, dir=''):
        # 判断url的数据属性
        if isinstance(urls, list):
            for url in urls:
                # 下载文件参数 文件url 保存的地址
                f_name = url.split('/')[-1]
                if dir != '':
                    wget.download(url, os.path.abspath(dir + '/' + f_name))
                else:
                    wget.download(url, os.path.abspath(self.static_src + '/' + f_name))
        else:
            # 下载文件参数 文件url 保存的地址
            f_name = urls.split('/')[-1]
            if dir != '':
                wget.download(urls, os.path.abspath(dir + '/' + f_name))
            else:
                wget.download(urls, os.path.abspath(self.static_src + '/' + f_name))
        return True

# 调用

 

# 设置访问的url
url = "https://www.runoob.com/python3/python3-namespace-scope.html"
# 初始化实例
net = Network(url)

ths=net.JQuery.find('.table_wrapper-table thead th').items()
trs=net.JQuery.find('.table_wrapper-table tbody tr')
trs_len=trs.length
# 临时变量 存储 key名称

本文地址:https://blog.csdn.net/qq_24745557/article/details/107077075