jjzjj

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

天杨扬小 2023-04-10 原文

目标数据:爬取从2007年到2022年,各地级市中级法院历年关于“环境污染”的裁判文书数量。

由于裁判文书网需要登录,Selenium手动接管爬取可避免频繁登录造成的封号风险。

Selenium如何手动接管Edge浏览器:

1、打开终端,将命令 /Applications/Microsoft\ Edge.app/Contents/MacOS/Microsoft\ Edge --remote-debugging-port=9222 --user-data-dir="/Users/libraf/Documents/Edge"复制到终端里然后enter,其中:

/Applications/Microsoft\ Edge.app/Contents/MacOS/Microsoft\ Edge 表示Edge浏览器驱动路径(Edge浏览器驱动是selenium爬虫所必要的);

--remote-debugging-port=9222 表示一个空闲端口,通常照抄即可;

--user-data-dir="/Users/libraf/Documents/Edge" 表示浏览器配置文件存放路径,防止污染原本的Edge浏览器配置,"/Users/libraf/Documents/Edge" 为一个存在的任意路径即可。

2、打开裁判文书网(https://wenshu.court.gov.cn),登录完成并设定好相关筛选条件后,再用以下代码使selenium接管浏览器。

options = Options()
options.add_experimental_option("debuggerAddress", "127.0.0.1:9222")
browser = webdriver.Edge(executable_path='msedgedriver',options=options)

数据爬取:

如下图所示,选定关键词“环境污染”和法院层级“中级法院”,以2022年为例。图中左侧“地域及法院”为需要的数据。

首先,按F12键打开开发者工具,分析省级数据的xpath位置,右键检查“河北省(4)”,复制“河北省(4)”的xpath路径://*[@id="300_anchor"]/text(),操作如下图:

 通过对其他省份的xpath路径对比发现,其关键在于id的不同,id的规律如下图所示:

 因此自建列表,如下:

list0 = ['1', '2', '3', '4', '5', '6', '7', '8', '9', 'A', 'B', 'C', 'D', 'E', 'F', 'G', 'H', 'I', 'J', 'K', 'L', 'M', 'N', 'O', 'P', 'Q', 'R', 'S', 'T', 'U', 'V', 'X']

接着,我们在断网状态下,点击图中左侧+字符号,发现无法展开地级市数据,说明该网页市级数据是动态加载的,需要展开后才能进行xpath定位,因此复制“河北省(4)”的+字符号的xpath路径://*[@id="300"]/i,发现同样可用id定位。

然后,复制“河北省保定市中级人民法院(2)”的xpath完整路径:/html/body/div/div[4]/div[1]/diy:lawyee[4]/div/div[2]/ul/li[3]/ul/li[1]/a/text(),操作如下图:

其中,

1、经反复调试发现:/html/body/div/div[4]/div[1]/diy:lawyee[4]/div/div[2]/ul/li[3]/ul/li[1]/a/text() 中的 diy:lawyee[4]要删掉,否则无法定位,原因不明;

2、经对比路径发现:/html/body/div/div[4]/div[1]/diy:lawyee[4]/div/div[2]/ul/li[3]/ul/li[1]/a/text() 中的第一个li表示第几个省份,第二个li表示该省的第几个地级市中级人民法院。

完整代码如下:

from selenium import webdriver
import time
from selenium.webdriver.edge.options import Options
import pandas as pd

options = Options()
options.add_experimental_option("debuggerAddress", "127.0.0.1:9222")
browser = webdriver.Edge(executable_path='msedgedriver',options=options)

list0 = ['1', '2', '3', '4', '5', '6', '7', '8', '9', 'A', 'B', 'C', 'D', 'E', 'F', 'G', 'H', 'I', 'J', 'K', 'L', 'M', 'N', 'O', 'P', 'Q', 'R', 'S', 'T', 'U', 'V', 'X']
list1 = []
m = 0
for i in list0:
    try:
        province = browser.find_element_by_xpath('//*[@id="{}00_anchor"]'.format(i)).text
    except:
        continue
    browser.find_element_by_xpath('//*[@id="{}00"]/i'.format(i)).click()
    time.sleep(3)
    
    m +=1
    n = 0
    while(1):
        n+=1
        try:
            city = browser.find_element_by_xpath('/html/body/div/div[4]/div[1]//div/div[2]/ul/li[{}]/ul/li[{}]/a'.format(m, n)).text
            print([province,city])
            list1.append([province,city])
            
        except:
            break
        
    browser.find_element_by_xpath('//*[@id="{}00"]/i'.format(i)).click()
    time.sleep(1)
print(list1)

df = pd.DataFrame(list1)
df.to_excel('2022年中级法院.xlsx',index = False)

运行上述代码即可得到2022年的目标数据,重新手动设定网页裁判年份和代码中的保存文件名,再运行即可得到其他年份的目标数据。数据截图如下:

 

 

 

 

有关Python爬虫Selenium手动接管Edge爬取裁判文书网“环境污染”数据(Mac环境)的更多相关文章

  1. python - 如何使用 Ruby 或 Python 创建一系列高音调和低音调的蜂鸣声? - 2

    关闭。这个问题是opinion-based.它目前不接受答案。想要改进这个问题?更新问题,以便editingthispost可以用事实和引用来回答它.关闭4年前。Improvethisquestion我想在固定时间创建一系列低音和高音调的哔哔声。例如:在150毫秒时发出高音调的蜂鸣声在151毫秒时发出低音调的蜂鸣声200毫秒时发出低音调的蜂鸣声250毫秒的高音调蜂鸣声有没有办法在Ruby或Python中做到这一点?我真的不在乎输出编码是什么(.wav、.mp3、.ogg等等),但我确实想创建一个输出文件。

  2. ruby-on-rails - 在 Rails 开发环境中为 .ogv 文件设置 Mime 类型 - 2

    我正在玩HTML5视频并且在ERB中有以下片段:mp4视频从在我的开发环境中运行的服务器很好地流式传输到chrome。然而firefox显示带有海报图像的视频播放器,但带有一个大X。问题似乎是mongrel不确定ogv扩展的mime类型,并且只返回text/plain,如curl所示:$curl-Ihttp://0.0.0.0:3000/pr6.ogvHTTP/1.1200OKConnection:closeDate:Mon,19Apr201012:33:50GMTLast-Modified:Sun,18Apr201012:46:07GMTContent-Type:text/plain

  3. ruby-on-rails - 如何在 mac os snow leopard 中升级 ruby​​ 和 rails - 2

    我想将我的MacSnowLeopardruby​​从1.8.7升级到1.9.1版本,有人知道轻松且最好的升级方法吗?因为我读了一些论坛/帖子/博客/讨论说覆盖苹果发布的ruby不好将Rails从版本2.2.2升级到2.3.8的最佳方法是什么?因为我找到的所有信息都仅适用于豹/老虎,而且很少有关于雪豹的复杂文章。他们还说覆盖apple提供的rails不好吗。谁能帮帮我?谢谢。 最佳答案 DanBenjamin有一些greatinstructionsforcompilingandinstallingRuby,RubyGemsandRai

  4. ruby - 在不使用 RVM 的情况下在 Mac 上卸载和升级 Ruby - 2

    我最近决定从我的系统中卸载RVM。在thispage提出的一些论点说服我:实际上,我的决定是,我根本不想担心Ruby的多个版本。我只想使用1.9.2-p290版本而不用担心其他任何事情。但是,当我在我的Mac上运行ruby--version时,它告诉我我的版本是1.8.7。我四处寻找如何简单地从我的Mac上卸载这个Ruby,但奇怪的是我没有找到任何东西。似乎唯一想卸载Ruby的人运行linux,而使用Mac的每个人都推荐RVM。如何从我的Mac上卸载Ruby1.8.7?我想升级到1.9.2-p290版本,并且我希望我的系统上只有一个版本。 最佳答案

  5. Python 相当于 Perl/Ruby ||= - 2

    这个问题在这里已经有了答案:关闭10年前。PossibleDuplicate:Pythonconditionalassignmentoperator对于这样一个简单的问题表示歉意,但是谷歌搜索||=并不是很有帮助;)Python中是否有与Ruby和Perl中的||=语句等效的语句?例如:foo="hey"foo||="what"#assignfooifit'sundefined#fooisstill"hey"bar||="yeah"#baris"yeah"另外,类似这样的东西的通用术语是什么?条件分配是我的第一个猜测,但Wikipediapage跟我想的不太一样。

  6. java - 什么相当于 ruby​​ 的 rack 或 python 的 Java wsgi? - 2

    什么是ruby​​的rack或python的Java的wsgi?还有一个路由库。 最佳答案 来自Python标准PEP333:Bycontrast,althoughJavahasjustasmanywebapplicationframeworksavailable,Java's"servlet"APImakesitpossibleforapplicationswrittenwithanyJavawebapplicationframeworktoruninanywebserverthatsupportstheservletAPI.ht

  7. 华为OD机试用Python实现 -【明明的随机数】 2023Q1A - 2

    华为OD机试题本篇题目:明明的随机数题目输入描述输出描述:示例1输入输出说明代码编写思路最近更新的博客华为od2023|什么是华为od,od薪资待遇,od机试题清单华为OD机试真题大全,用Python解华为机试题|机试宝典【华为OD机试】全流程解析+经验分享,题型分享,防作弊指南华为o

  8. Vscode+Cmake配置并运行opencv环境(Windows和Ubuntu大同小异) - 2

    之前在培训新生的时候,windows环境下配置opencv环境一直教的都是网上主流的vsstudio配置属性表,但是这个似乎对新生来说难度略高(虽然个人觉得完全是他们自己的问题),加之暑假之后对cmake实在是爱不释手,且这样配置确实十分简单(其实都不需要配置),故斗胆妄言vscode下配置CV之法。其实极为简单,图比较多所以很长。如果你看此文还配不好,你应该思考一下是不是自己的问题。闲话少说,直接开始。0.CMkae简介有的人到大二了都不知道cmake是什么,我不说是谁。CMake是一个开源免费并且跨平台的构建工具,可以用简单的语句来描述所有平台的编译过程。它能够根据当前所在平台输出对应的m

  9. python - 如何读取 MIDI 文件、更改其乐器并将其写回? - 2

    我想解析一个已经存在的.mid文件,改变它的乐器,例如从“acousticgrandpiano”到“violin”,然后将它保存回去或作为另一个.mid文件。根据我在文档中看到的内容,该乐器通过program_change或patch_change指令进行了更改,但我找不到任何在已经存在的MIDI文件中执行此操作的库.他们似乎都只支持从头开始创建的MIDI文件。 最佳答案 MIDIpackage会为您完成此操作,但具体方法取决于midi文件的原始内容。一个MIDI文件由一个或多个音轨组成,每个音轨是十六个channel中任何一个上的

  10. 「Python|Selenium|场景案例」如何定位iframe中的元素? - 2

    本文主要介绍在使用Selenium进行自动化测试或者任务时,对于使用了iframe的页面,如何定位iframe中的元素文章目录场景描述解决方案具体代码场景描述当我们在使用Selenium进行自动化测试的时候,可能会遇到一些界面或者窗体是使用HTML的iframe标签进行承载的。对于iframe中的标签,如果直接查找是无法找到的,会抛出没有找到元素的异常。比如近在咫尺的例子就是,CSDN的登录窗体就是使用的iframe,大家可以尝试通过F12开发者模式查看到的tag_name,class_name,id或者xpath来定位中的页面元素,会抛出NoSuchElementException异常。解决

随机推荐