selenium爬虫

2022年05月11日 阅读数:2
这篇文章主要向大家介绍selenium爬虫,主要内容包括基础应用、实用技巧、原理机制等方面,希望对大家有所帮助。

** ## 基于selenium对谷歌浏览器信息进行自动爬取

代码前提是用对谷歌版本和drive插件,本身配置selenium库
**html

要求:进入中国文书网,实现自动登陆,并在搜索框中输入“判决书”,进入新界面后,对当前界面的新连接进行点击,进入内容网页,对其html进行爬取,爬取后关闭连接,执行翻页操做,直到到指定页码web

记下来是视频演示:浏览器

b站视频演示bash

如下是代码展现,尚未将html中的信息转为word格式
(其中自动登陆的帐号密码信息也已经更改)app

# -*- codeing=utf-8 -*-
# @Time :2021/3/713:36
#导入库
'''
从中国文书网上获取100份判决书
1.实现自动登陆(已经实现)
2.搜索判决书,获取每一篇判决书的连接
已经能够自动搜索,还须要实现自动翻页和获取连接
3.根据url获取源码,而且存为pdf格式
方法:根据url获取源码,并转pdf格式
'''
from selenium import webdriver
from selenium.webdriver.common.keys import Keys
from selenium.webdriver import ActionChains
import time
def main():
    baseurl='https://wenshu.court.gov.cn/'
    data=[]
    #1.建立浏览器对象,而且实现自动登陆
    d=login(baseurl)
    #2.对“判决书”进行搜索,而且获取前一百个判决书获得html信息
    search(d,data)
    #3.将html文档中的文本信息提出并存入word
    #switch(data)

def login(url):
    d = webdriver.Chrome()  # 能够看到浏览器界面
    d.implicitly_wait(10)  # 隐性等待10秒若是10秒内该窗口完成渲染渲染完毕就再也不等待,10秒还未渲染成功就再也不等待
    d.maximize_window()  # 窗口最大化
    url = 'https://wenshu.court.gov.cn/'
    d.get(url)  # 发送请求获取界面

    login = d.find_element_by_xpath('//*[@id="loginLi"]/a')  # 获取到按钮对象(xpath语言)
    su = login.click()  # 模拟点击登陆按钮
    # print(d.window_handles)  # 输出打开的窗口

    d.switch_to.frame(d.find_element_by_id("contentIframe"))
    # 找到登陆所在的iframe,否则找不到帐号密码的位置信息
    zhanghao = d.find_element_by_xpath('//*[@id="root"]/div/form/div[1]/div[1]/div/div/div/input').send_keys(
        '秘密')
    # 找到并输入帐号
    password = d.find_element_by_xpath('//*[@id="root"]/div/form/div[1]/div[2]/div/div/div/input').send_keys(
        '秘密')
    # 找到并输入密码
    relogin = d.find_element_by_xpath('//*[@id="root"]/div/form/div[3]/span').click()
    # 点击登陆
    d.switch_to.window(d.window_handles[0])  # 跳转`窗口
    # 跳转至搜索界面
    time.sleep(5)
    return d
    # 为何不执行sleep就没法继续?
    # 先让程序两秒,保证页面全部内容均可以加载出来?
def search(d,data):
    content = d.find_element_by_xpath('//*[@id="_view_1540966814000"]/div/div[1]/div[2]/input').send_keys('判决书')
    # 输入判决书//*[@id="_view_1540966814000"]/div/div[1]/div[2]/input
    butten = d.find_element_by_xpath('//*[@id="_view_1540966814000"]/div/div[1]/div[3]').click()  # 获取到按钮对象
    # 点击搜索
    page = 1
    #page表示须要访问多少页
    # findlink=re.compile(r'<a href="(.*?)">')
    while page <= 2:
        #d.refresh()#刷新界面
        for i in range(3,7):
            d.find_element_by_xpath('//*[@id="_view_1545184311000"]/div[%d]/div[2]/h4/a'%i).click()  # 找到连接并点击进入
            time.sleep(2)
        handles = d.window_handles
        index_handle = d.current_window_handle  # 这里的current_window_handle仍是主窗口
        time.sleep(1)
        for handle in handles:
            if handle != index_handle:  # 若是不是主窗口
                d.switch_to.window(handle)  # 切换到新窗口
                html = d.page_source
                data.append(html)
                #print(html)
                d.close()
            else:
                continue  # 继续循环
        d.switch_to_window(index_handle)
        d.find_element_by_xpath('//*[@id="_view_1545184311000"]/div[8]/a[8]').click()  # 执行翻页操做
        page=page+1
        time.sleep(2)  # 2秒让网页加载出内容再继续爬取
    d.quit()
#def switch(data):

if __name__ == "__main__":          #当程序执行时
#调用函数
    main()
    print("爬取完毕!")

这是我第一次用selenium进行爬虫,
优势:
能够经过send_keys(),click()这种方法来对页面上的信息进行填写与点击,好比在搜索框中输入一些信息,从而实现自动爬取。我以前用过beautifulsoup,必须是指定网页,并且还须要知道一些网页信息。个人感受是没法执行这种搜索和翻页的操做的,只能获取你输入的url对应的html。ide

总的来讲仍是很不错的,用了两天时间,全自主实现了全过程,记录一下。若是对代码有什么问题的能够私信dd我哦
(学会了selenium能够实现用py自动领取一些网游上面的装备哦)svg