一、设定搜索条件

from selenium import webdriver
import timeoptions = webdriver.ChromeOptions()
"""
使用IP代理跳过反爬策略频繁爬取会触发验证码机制,ip:port为指定的IP及端口号
"""
options.add_argument('--proxy-server=http://ip:port')options.add_argument("--headless")
options.add_argument('--disable-gpu')
driver = webdriver.Chrome(options=options)
browser = webdriver.Chrome()
try:browser.get("http://wenshu.court.gov.cn/list/list")time.sleep(2)# 获取搜索框inputs = browser.find_element_by_id("gover_search_key")# 获取搜索按钮submit = browser.find_element_by_id("btnSearch")# 清空搜索框inputs.clear()# 搜索框输入“债权债务”inputs.send_keys('债权债务')time.sleep(5)# 点击搜索submit.click()
finally:#关闭浏览器browser.quit()

二、爬取列表页信息及详情页信息

from selenium import webdriver
from fake_useragent import UserAgent
from bs4 import BeautifulSoup
from selenium.webdriver.support.wait import WebDriverWait
import timeoptions = webdriver.ChromeOptions()
# 隐藏"Chrome正在受到自动软件的控制"
options.add_argument('disable-infobars')
# 使用IP代理跳过反爬策略,频繁爬取会触发验证码机制,下面只是示范格式
options.add_argument('--proxy-server=http://127.0.0.1:80')
# 设置selenium不加载图片,提高爬取效率
prefs = {"profile.managed_default_content_settings.images": 2}
options.add_experimental_option("prefs", prefs)
# 修改请求头,伪装浏览器型号
options.add_argument('user-agent='+UserAgent().random)
# 无浏览器模式,无浏览器模式无法定位元素
# options.add_argument("--headless")
# options.add_argument('--disable-gpu')
# 采用上述配置
browser = webdriver.Chrome(options=options)
# 将浏览器窗口最大化
# browser.maximize_window()
# 指定浏览器窗口大小
browser.set_window_size(560, 400)
try:browser.get("http://wenshu.court.gov.cn/list/list/?sorttype=1&number=QTRAA7GV&""guid=1db11f43-6b7a-ea82131d-ae7a449e89d2&conditions=""searchWord+QWJS+++%E5%85%A8%E6%96%87%E6%A3%80%E7%B4%A2:%E5%80%BA%E6%9D%83%E5%80%BA%E5%8A%A1")# 获取当前列表页index_windows = browser.current_window_handlefor i in range(20):# 给浏览器足够时间加载页面,也是为了防止触发反爬策略time.sleep(30)# 每0.5秒检测一次列表页是否加载出数据,加载完成,点击进入详情页WebDriverWait(browser, 50, poll_frequency=0.5).until(lambda browser: browser.find_element_by_id("dataItem1"))# 获取列表页每个子项信息,并点开链接for j in range(1, 11):# 获取每个列表子项item = browser.find_element_by_css_selector('#dataItem'+str(j)+' a')# 文书标签types = browser.find_element_by_css_selector('#dataItem'+str(j)+' .label').text# 文书标题title = item.text# 文书副标题sub_title = browser.find_element_by_css_selector('#dataItem'+str(j)+' .fymc').text# 裁判理由reason = browser.find_element_by_css_selector('#dataItem'+str(j)+' .wszy').textdoc = {'types': types, 'title': title, 'sub_title': sub_title, 'reason': reason}print(doc)time.sleep(10)# 模拟点击,进入详情页item.click()# 删除所有的cookiebrowser.delete_all_cookies()all_handles = browser.window_handlesbrowser.switch_to.window(index_windows)# 遍历所有浏览器窗口,关闭详情页,仅保留列表页,再进行下一页操作for handle in all_handles:if handle != index_windows:# 切换至详情页browser.switch_to.window(handle)soup = BeautifulSoup(browser.page_source, 'html.parser')# 获取文书内容Content = soup.find('div', id='Content').get_text()print(Content)# 获取隐藏信息hidCaseInfo = soup.find('input', {'id': 'hidCaseInfo'}).get('value')print(hidCaseInfo)# 获取“下一页”元素,点击进入下一页WebDriverWait(browser, 50, poll_frequency=0.5).until(lambda browser:browser.find_element_by_css_selector(".next"))browser.find_element_by_css_selector(".next").click()finally:now = time.strftime('%Y-%m-%d %H:%M:%S', time.localtime(time.time()))filename = now+'.png'# 浏览器截屏browser.get_screenshot_as_file(filename)browser.quit()

三、总结

相较于之前用过的phpquerylist爬取网页,python+selenium可以用来爬取js渲染的数据,而phpquerylist只能用于爬取网页dom元素,也就是说如果数据是页面加载后,采用js请求接口返回的数据渲染的,那就无能为力了。但是针对这种请求,我们也可以直接分析接口地址,直接请求。

裁判文书网也是这种js请求接口返回的数据,但不同的是它的参数都是经过加密的,同一个详情页,链接地址可能是不一样的。这种情况下,必须暴力破解它的加密方式才能通过接口请求到数据。

在对加密方式无能为力的情况下,对数据量要求也不高的时候,python+selenium是一个折中的选择吧,这种爬虫方式,即使对方网站修改了加密方式,也可以继续爬取,因为它是完全模拟人的行为在访问网页。但是如果页面元素发生了变动,也需要同步地更新爬虫代码。

破解加密后,可以通过request模块请求接口地址,获取数据的效率可以得到极大的提升。

关于爬虫效率问题,多线程、分布式是两个很好的方向,有待继续学习,在2018年的最后一天,对自己说一声,加油,对诸君道一声,共勉!

selenium爬取裁判文书网相关推荐

  1. Python爬虫Selenium手动接管Edge爬取裁判文书网“环境污染”数据(Mac环境)

    目标数据:爬取从2007年到2022年,各地级市中级法院历年关于"环境污染"的裁判文书数量. 由于裁判文书网需要登录,Selenium手动接管爬取可避免频繁登录造成的封号风险. S ...

  2. 爬取裁判文书网(一)

    1.裁判文书网地址 http://wenshu.court.gov.cn/ 2.网站分析 (1)网站类型是动态网站. (2)网页源代码中并没有我们想要的页面内容,且引用许多js代码. (3)查看列表页 ...

  3. 2021年10月最新使用selenium爬取裁判文书数据(本文仅供技术交流使用)

    作为一个java菜鸡,想了解一下python的爬虫,据说文书网反爬很厉害,遍去试试 好嘛 我去,啥啊,不讲武德 这个网站的特点首先符合了政府网站响应慢的特点,7百亿的访问量...,再加上时时刻刻的小机 ...

  4. 记录用web scraper爬取裁判文书网的文书列表信息以及批量下载word文书

    这个是一位网友在B站交流的一个问题,这里记录一下. 需求 1.爬取的网站地址:http://wenshu.court.gov.cn/website/wenshu/181217BMTKHNT2W0/in ...

  5. python 爬取裁判文书网

    19年4月版完整代码github地址:https://github.com/Monster2848/caipanwenshu 目标网站 发现这个请求中有返回数据 先带齐所有参数模拟浏览器发起一次请求 ...

  6. python爬取裁判文书并分析_裁判文书网爬虫攻克

    最近因为公司需要爬取裁判文书网的某一类别文章数据,于是简单研究了一下,发现网站数据全是js加载的,于是想都没想直接用selenium尝试爬取,没想到竟然有selenium都抓取不到的js(刚毕业的py ...

  7. python selenium爬取去哪儿网的酒店信息——详细步骤及代码实现

    目录 准备工作 一.webdriver部分 二.定位到新页面 三.提取酒店信息 ??这里要注意?? 四.输出结果 五.全部代码 准备工作 1.pip install selenium 2.配置浏览器驱 ...

  8. 爬虫实战(二)—利用requests、selenium爬取王者官网、王者营地APP数据及pymongo详解

    概述 可关注微信订阅号 loak 查看实际效果. 代码已托管github,地址为:https://github.com/luozhengszj/LOLGokSpider ,包括了项目的所有代码. 本文 ...

  9. selenium爬取煎蛋网

    selenium爬取煎蛋网 直接上代码 from selenium import webdriver from selenium.webdriver.support.ui import WebDriv ...

  10. python selenium 爬取去哪儿网的数据

    python selenium 爬取去哪儿网的数据 完整代码下载:https://github.com/tanjunchen/SpiderProject/tree/master/selenium+qu ...

最新文章

  1. 微软无解!Win10用户突然减少:装回Win7
  2. Spark学习之概念了解
  3. 中科院计算机跨专业考研,2015考研复试:往届生和跨专业考生
  4. SSH Secure Shell显示GCC编译错误信息乱码解决方法
  5. 细数开源历史上的九个重大事件
  6. PHP的pm、pm.max_requests、memory_limit
  7. jquery图片预加载+自动等比例缩放插件
  8. 土地利用转移矩阵简易计算方法
  9. eXosip中Event事件学习笔记
  10. python发送以太网报文_python之分解以太帧
  11. C#抖音无水印视频地址解析
  12. axi_ddr_top
  13. sd卡分区工具PM9.0汉化版
  14. 库房--库存信息增加导出Excel表格功能
  15. 100 bugs in Open Source C/C++ projects
  16. mac php pear pecl,MacOSX安装pecl - 米扑博客
  17. android app后台收不到消息,不打开智能关怀App收不到手表发的消息
  18. Ant Design Icon图标使用
  19. 生活当中调整时钟时间背后发生的事情
  20. 【python逆向一把梭】pyinstaller打包的exe逆向一把梭

热门文章

  1. 牛客网小白月赛22计算A+B(题解)
  2. 南航计算机学院考博难么,考研专硕真的不能考博吗?看看过来人是咋说的
  3. IntelliJ Idea 向上/下插入空行快捷键
  4. 谷歌浏览器误删临时用户恢复书签
  5. 详谈AI芯片架构、分类和关键技术
  6. css文字跑马灯,css3实现文字跑马灯(css3跑马灯demo) - 全文
  7. html英语单词不换行,css如何设置英文单词不换行?
  8. 钟控RS,D,JK,T触发器
  9. 设计灵感|App登录注册页面设计方式
  10. matlab求解一元函数积分,matlab实现一元函数积分