selenium爬虫

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

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

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

记下来是视频演示:

b站视频演示

以下是代码展示,还没有将html中的信息转为word格式
(其中自动登录的账号密码信息也已经更改)

# -*- 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'')
    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。

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

你可能感兴趣的:(笔记,python,selenium)