** ## 基于selenium对谷歌浏览器信息进行自动爬取
代码前提是用对谷歌版本和drive插件,自己配置selenium库
**
要求:进入中国文书网,实现自动登录,并在搜索框中输入“判决书”,进入新界面后,对当前界面的新链接进行点击,进入内容网页,对其html进行爬取,爬取后关闭链接,执行翻页操作,直到到指定页码
记下来是视频演示:
以下是代码展示,还没有将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'<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。
总的来说还是很不错的,用了两天时间,全自主实现了全过程,记录一下。如果对代码有什么问题的可以私信dd我哦
(学会了selenium可以实现用py自动领取一些网游上面的装备哦)