凹3网页链接(ao3网页链接)

时间:2023-11-23 18:22:41 来源:网友上传 编辑:一夜奈良山

AO3到底是什么网站

我不关心AO3的下场

转载于 豆瓣 金老汉不推车 圆首金老汉

这几天AO3的事情出来以后,一开始我是不太关心的,毕竟在我看来,这件事本应该是一群看耽美剧而饭主演耽美剧的爱豆的腐女和另一群在境外同人站看黄油文的腐女之间无聊的争斗。

但这两天我开始有点出离的愤怒了,不是因为这件事本身,而是因为这件事展现出了一大堆人的“不正常”。所谓“不正常”,就是和“正常”是相对的。什么是正常呢?正常就是在一个符合道德规范、公序良俗和法律法规的基础下,一个普通人的普通行为。什么叫“不正常”,就是当没有任何特殊理由,出现“违背正常”的现象出现的时候,这种状态没有被意识到被指出被修正,这就是不正常。

在大马路上走路穿裤子/裙子是正常,在大马路上走路光腚是不正常。明知道在大马路上光腚不正常但还是忍不住去做,那就是彻头彻尾的变态。为了明确这种行为是不正常的,且制止明知不正常还去做的变态,国家出台相关的法律法规来保护守法公民不被这种行为伤害。

按照《中华人民共和国治安管理处罚法》第四十四条:他人的,或者在公共场所故意裸露身体,情节恶劣的,处五日以上十日以下拘留;智力残疾人、精神病人、不满十四周岁的人或者有其他严重情节的,处十日以上十五日以下拘留。

这叫维护正义,维护正常的秩序,这让我们大多数人,可以生活在一个正常的世界里,而不用整天面对变态的骚扰。让一部分有这样变态想法的人在开始侵害行为之前,有所畏惧,从而放弃侵害行为。

但是在肖战粉丝举报AO3这件事发展到现在的过程里,我意识到事情开始“不正常”了。

1/ AO3到底是不是黄站,该不该被封

首先我们先确认一下,AO3(https://archiveofourown/,本文所有的AO3指的都是该域名以及相关域名的镜像网站)上到底有没有的内容。要做到这点不算难,我拜托我在海外的朋友帮我看了一下AO3,并且截图取证,该网站上到底是否有违反中国法律的内容。取证方法也很简单,我的朋友不会注册任何AO3的账号,也就不会填写自己的年龄信息,所以AO3网站应该是默认不知道我的朋友是否属于有被成人内容侵害的未成年人。

那么实际情况是什么样的呢?如果你在AO3上搜索“肖战”这两个字。你会得到这样的结果:

我们可以很简单的找到这样一些内容,我朋友随便点了几个连接看一下里面的内容:

哟呵,上来就是个成人内容警告,也对,下面有Rape()的标签,看来里面很可能有不合适未成年人的内容,在未登录的状况下,我的朋友点击了继续,看看这篇有将近25000次点击的内容里到底是什么样的。

以上内容仅供取证曝光AO3是否涉黄

下滑几页就能看到这样的内容...我让我朋友截图的时候务必保证域名也被截入,否则达不到取证的效果。我想看到这种文字,大家应该不会有什么异议。如果这样的文字能算艺术创作,那看来TokyoHot是世界上最伟大的艺术工作室之一了。

那么这也有可能是个偶然,我们再看看其他的内容:

以上内容仅供取证曝光AO3是否涉黄

读到这篇,我已经开始担心披露这样的证据,我的这篇公号文章会不会也涉黄了。然后我让我朋友把大多数有成人内容警告的含有“肖战”内容的文章读了一下,这些少则数千,多则数万点击量的文章,全部和截图中的内容情况类似,可以说是不堪入目。

我相信,任何认知能力正常的人,在读到这些内容之后,应该已经可以做出准确的判断,AO3上一定存在大量的内容。

《中华人民共和国刑法》中对物品的定义:

第三百六十七条 物品的范围:本法所称物品,是指具体描绘性行为或者露骨宣扬的诲淫性的书刊、影片、录像带、录音带、图片及其他物品。有关人体生理、医学知识的科学著作不是物品。包含有内容的有艺术价值的文学、艺术作品不视为物品。

如果AO3的用户要辩解以上内容不是物品的话,只可能宣称这样的内容是医学知识或者有艺术价值的文学。不过讲真的,如果有人真的认为以上内容具备“艺术价值”,我仅代表我个人,表示一下对持有这样价值观的朋友的鄙视,真的low。有孩子的朋友可以扪心自问一下,你愿意给你的孩子看这样的内容吗?

就目前搜集的信息来看,我们判定AO3上有大量的内容,且之前已经大量传播过,这个判断应该问题不大。那么按照我国相关法律,对于这样的内容我们应该怎么处理呢?

《中华人民共和国刑法》第三百六十四条

传播的书刊、影片、音像、图片或者其他物品,情节严重的,处二年以下有期徒刑、拘役或者管制。组织播放的电影、录像等音像制品的,处三年以下有期徒刑、拘役或者管制,并处罚金;情节严重的,处三年以上十年以下有期徒刑,并处罚金。制作、复制的电影、录像等音像制品组织播放的,依照第二款的规定从重处罚。向不满十八周岁的未成年人传播物品的,从重处罚。

《中华人民共和国网络安全法》第十二条

国家保护公民、法人和其他组织依法使用网络的权利,促进网络接入普及,提升网络服务水平,为社会提供安全、便利的网络服务,保障网络信息依法有序自由流动。任何个人和组织使用网络应当遵守宪法法律,遵守公共秩序,尊重社会公德,不得危害网络安全,不得利用网络从事危害国家安全、荣誉和利益,煽动颠覆国家、推翻社会主义制度,煽动国家、破坏国家统一,宣扬恐怖主义、极端主义,宣扬民族仇恨、民族歧视,传播暴力、信息,编造、传播虚假信息扰乱经济秩序和社会秩序,以及侵害他人名誉、隐私、知识产权和其他合法权益等活动。

《中华人民共和国网络安全法》第十三条

国家支持研究开发有利于未成年人健康成长的网络产品和服务,依法惩治利用网络从事危害未成年人身心健康的活动,为未成年人提供安全、健康的网络环境。

所以按照以上的法律来看,目前我国依法对AO3网站进行的停止接入的服务是合法的,保护未成年人健康的,维护社会正义与公序良俗的。与一些人号称的所谓“创作自由”是毫无关系的。毕竟我相信任何的“创作自由”的基础都是不违反当地国家的法律,不违背当地社会的公序良俗。

当然,如果对以上法条内容或者对处理方式有意见的朋友,我建议可以通过向全国人大常委会递送公民法律意见书的方式,提请全国人大讨论是否能对法条进行修改。任何私下或公开场合,对法条的意见仅仅只能作为意见,并不能改变我们作为一个中华人民共和国公民需要遵守法律的基本要求。

2/ AO3应不应该被举报

既然我们已经认定清楚,AO3上确实存在大量的的的内容,那么AO3是否应该被举报呢?我们国家对相关问题是有明确立法的。

《中华人民共和国网络安全法》第十四条

任何个人和组织有权对危害网络安全的行为向网信、电信、公安等部门举报。收到举报的部门应当及时依法作出处理;不属于本部门职责的,应当及时移送有权处理的部门。有关部门应当对举报人的相关信息予以保密,保护举报人的合法权益。

也就是说,举报行为完全合法,而且举报人的合法权益不应该被侵害。

那么是不是我们只有举报这一种途径来处理这个问题呢?显然不是,我们可以采用的途径有很多,比如我们可以向AO3的管理者投诉,虽然AO3是一个非营利组织,但既然该网站向中国用户开放使用,理应配合中国政府制定符合中国法律规定的网站管理规范。但实际情况是,AO3只是在登录首页贴了一个警告,连用户账户管理都可以没有,就能够随意浏览可能不适合未成年人阅读的信息,这显然是缺乏管理的。

AO3的登录确认

既然AO3长期存在大量的内容,这些内容也能非常轻易的被未成年人获取。对于本次AO3事件的举报者,我们可以希望他优先联系AO3,但是这并不是他必须做的事情,实际上他是先联系AO3还是先去举报,完全是他的自由,两种行为都是合法范畴。

所以我们可以说,有人举报AO3和我国有关部门停止中国用户访问AO3,都是没有任何问题的正确结果。

3/ 关于举报动机的合理性

关于举报者的动机,有人认为,举报者的动机是出于对其崇拜的偶像肖战的名誉维护,从而采用“公报私仇”的方式,来打击异己。

首先,我们需要明确一点,AO3上这些作品是否侵犯了肖战的名誉权,仅仅就我委托硼朋友截图取证的这些内容,如果目前没有额外的证据能够证明,以上这些内容是获得了肖战授权的话,最后被认定为侵犯肖战个人的肖像权与名誉权的概率是比较大的(实际上还包括另一位偶像艺人王一博的名誉权和肖像权应该也大量涉及被侵犯)。

《中华人民共和国民法通则》第一百零一条

公民、法人享有名誉权,公民的人格尊严受法律保护,禁止用侮辱、诽谤等方式损害公民、法人的名誉。

《中华人民共和国民法通则》第一百二十条

公民的姓名权、肖像权、名誉权、荣誉权受到侵害的,有权要求停止侵害,恢复名誉,消除影响,赔礼道歉,并可以要求赔偿损失。

当然了,这里有个核心问题是,使用肖战姓名、职业、人物背景创作的同人作品,是否就涉及侵犯肖战的名誉权与肖像权(涉事的《下坠》一文是有配图的)。根据中华人民共和国最高人民法院发布的《最高人民法院关于审理名誉权案件若干问题的解答》第九条:因文学作品引起的名誉权纠纷,应如何认定是否构成侵权?

撰写、发表文学作品,不是以生活定的人为描写对象,仅是作品的情节与生活中某人的情况相似,不应认定为侵害他人名誉权。描写真人真事的文学作品,对特定人进行侮辱、诽谤或者披露隐私损害其名誉的;或者虽未写明真实姓名和住址,但事实是以特定人或者特定人的特定事实为描写对象,文中有侮辱、诽谤或者披露隐私的内容,致其名誉受到损害的,应认定为侵害他人名誉权。编辑出版单位在作品已被认定为侵害他人名誉权或者被告知明显属于侵害他人名誉权后,应刊登声明消除影响或者采取其他补救措施;拒不刊登声明,不采取其他补救措施,或者继续刊登、出版侵权作品的,应认定为侵权。

根据目前AO3上搜索“肖战”二字所反映出来的内容情况看,包括网络上对《下坠》一文的一些截图材料看,我们应该都不难看出,相关作品确实大量涉及对肖战的名誉权的侵犯的可能。

在这样的前提下,我认为没有任何理由怀疑,肖战的部分粉丝确实有理由愤怒。当然,这里有人会立刻说,肖战的粉丝团体中,对于采用肖战的人设进行“同人创作”是一件被默许的事情。那么关于此类“默许”情况,我认为需要有几个基本判断:

1.肖战本人是否有公开承认默许这样的行为?

2.肖战本人对之前发生的此类行为没有追究是否就可以认为肖战默认侵权可以继续?

目前根据我的调查,还没有发现相关的肖战本人有公开默认侵权行为可以进行的证据;同时也不存在肖战之前没有追究侵权就可以默认肖战接受侵权的说法。在中国的法律框架内,只要肖战没有公开授权过他的肖像、姓名被使用于某个文学作品,所有的使用行为都构成侵权,只有肖战选择追究或者暂时不选择追究的差异。

所以就肖战本人而言,这次他依旧有权对相关文章作者提起诉讼,追究他们可能涉及的侵权责任。

而就肖战的粉丝而言,他们不具备直接诉讼相关可能侵权者的权利。但这些肖战的粉丝,本着为了维护肖战的名誉权为动机,举报了AO3上存在涉及传播物品的事实,本身是没有问题的。我们最多说,动机与事实经过不完全一致,但这个动机事实上也不能归为基于恶意。即便有所谓“证据”能把举报的动机归为“恶意”,那也依旧不改变举报的事实结果是正确的,对社会是有益的。

是否存在“公器私用”?如果说AO3网站上涉及传播物品的事实认定不清,举报者基于私人恩怨,采用伪造、捏造、篡改的方式恶意制造证据,导致符合中华人民共和国相关法律法规规定合法经营的AO3网站被停止了中国用户登录,或者举报者通过贿赂的方式让有关部门进行了不公正的执法。那么我认为,这些粉丝存在所谓的“公器私用”。

但就事发以后,我委托境外的朋友登录AO3所采集到的证据来看,我的判断是,有关部门对AO3网站涉及传播物品的处理方案,事实是明确的,处理也是合理的,这就不存在所谓一些人说的“公器私用”。

站在法律的角度,举报行为的动机也是没有问题的。

当然如果有人依旧非要说,即便站在法律的角度上,举报者的动机没有问题,但举报者的动机就是掺杂了大量的私人目的,那么我只能说,平时生活中的行为,又有是不掺杂“私人目的”的呢?

既然公权力赋予了公民举报的权利,举报者也合法合理的使用了举报的权利,那么他就不应该受到谴责。

4/ 关于肖战是否应该为本次粉丝举报的行为负责

就本次事件而言,肖战的粉丝的举报行为完全合理合法,行使了一个公民的合法权利。所以站在这个角度,我甚至不知道肖战应该为他粉丝的行为到底负什么责?

肖战作为一个公众人物,他有义务传播和引导他的粉丝遵守中华人民共和国法律,以身作则,多做对社会有益的事情。

而退一万步讲,即便肖战的粉丝中有人有什么违法犯罪行为,只要没有任何证据能够证明肖战本人有参与、授意、煽动、组织相关的违法行为,那么肖战无需对此承担法律上的责任和义务。

这一点甚至和肖战的粉丝群体的组织方式都无关,只要肖战的粉丝群体组织运作方式符合中华人民共和国相关法律的规定,那么同样的,粉丝组织相关人员没有参与、授意、煽动、组织相关的违法行为,那么整个粉丝组织或者肖战本人都无需承担法律上的责任和义务。

这个基本逻辑也构建在不论肖战本人之前是否有通过合法的方式从粉丝那里获取过商业利益的前提上。

所以在我看来,AO3的一些用户以及外界的一些人高唱所谓的“粉丝行为偶像担责”这句话,就本次时间本身是没有任何道理的。肖战的粉丝在这次举报事件之初没有任何证据能看出法律上的不当行为,而肖战本人也没有参与到举报行为中,所以把所谓“责任”归咎到肖战头上,这种行为在我看来,甚至可能存在“网络暴力”的嫌疑。

5/ AO3的用户以及其他人是否可以抵制肖战

是否要“抵制”一个艺人,完全是一个公民的自由,即便没有任何理由。

如果是基于AO3遭到有关部门的停止访问一事,向公众披露相关举报人的个人信息,甚至包括隐私信息,这一点已经明确侵害举报人个人信息安全了。

《中华人民共和国刑法》第二百五十三条之一 侵犯公民个人信息罪

违有关规定,向他人出售或者提供公民个人信息,情节严重的,处三年以下有期徒刑或者拘役,并处或者单处罚金;情节特别严重的,处三年以上七年以下有期徒刑,并处罚金。违有关规定,将在履行职责或者提供服务过程中获得的公民个人信息,出售或者提供给他人的,依照前款的规定从重处罚。窃取或者以其他方法非法获取公民个人信息的,依照第一款的规定处罚。 单位犯前三款罪的,对单位判处罚金,并对其直接负责的主管人员和其他直接责任人员,依照各该款的规定处罚。

同时,通过曝光举报人信息来达到打击报复举报人的行为,可能涉及违反了:

《中华人民共和国刑法》第三百零八条 打击报复证人罪

对证人进行打击报复的,处三年以下有期徒刑或者拘役;情节严重的,处三年以上七年以下有期徒刑。

当然,具体这里要看“报复”行为造成的后果和情节的严重性。

所以AO3用户和其他任何中华人民共和国公民,对实施举报的肖战粉丝,不应该采用任何形式上的网络暴力,应该立刻马上停止侵权违法行为。

而对于本次事件根本毫无“责任”可言的肖战本人,他实际上自然也无需有任何正当的理由应该遭到“抵制”。我们最多认为这是一次部分AO3用户以及其他一些可能本来就不喜欢肖战的人,在利用这次事件,报复肖战的粉丝和打击肖战本人。

那么出于自私的目的,把因自己不能访问违法网站的怒火,迁怒一个无辜的艺人,在公众媒体上大量散布呼吁“抵制”言论,这种行为本身虽然可能并不违法,但在我看来肯定也算不得什么高尚的行为。

在整个抵制的行为中,出现了一些人在境内外制造关于肖战的谣言,倒是很可能侵犯了肖战的名誉权,这种行为不仅不高尚,而且还非常可耻。肖战本人是保留追究这类侵权行为的权力的。

至于有关人员,在迁怒肖战以外,还迁怒于发布支持肖战的言论的Olay品牌。一些用户向Olay品牌索要曾经购物的,引起有关税务部门的重视,这件事情,本质上也是出于“自私的目的”去行使合法的权益。当然Olay品牌不论请了谁代言,都应该严格遵守我国税务相关的法律法规的规定,依法纳税。这也不能算携私怨报复。

6/ 法律和事实之外的部分

在和大家掰扯了半天的法律和事实之后,我相信能读到这里的人,已经对整个事件有了个基本认知:

1.AO3网站涉及传播物品,违反了我国法律,理应被停止访问;

2.举报网站的肖战粉丝,不论出于什么目的都是合法的,他们的权益必须得到保护;

3.以目前的证据来说,肖战本人对本次粉丝的行为没有责任,即便后续有证据证明肖战参与了举报,那么他最多也是举报人之一,他的权益更加应该被保护;

4.肖战代言的品牌,是完全的无辜者,收到风波牵连,属于因为一些人的不当行为导致的无妄之灾。当然,关于税务规范的部分,还应是品牌自己的责任;

5.是否“抵制”肖战是每个人的自由,但本次“抵制”行为本身并无任何高尚可言;

那么为什么我会愤怒呢?因为一些人利用舆论,歪曲事实,颠倒黑白。一个被侵权的艺人,几个没有过错的粉丝,一个毫无瓜葛的品牌,这次却受到了实实在在的损失。

这个结果正常吗?这个结果显然不正常。

守法的人不应该被不守法的人欺负,这是一个基本常识。现在有一些不守法的人,好像有了什么道理,反倒要守法的人出来道歉,要守法的人出来负责,这朗朗乾坤底下怎么会有这么王八蛋的理?

还言之凿凿的说什么狗屁的“创作自由”!如果像AO3上面那些乌七八糟的鬼东西算创作自由,那我去PornHub看数学考研复习视频又有什么错?

截图素材来自境外友人

我想了半天,想来想去,最后只能得出一个原因。那就是所有抵制肖战的人,基本上都认为在AO3上看黄油文就不是个错的事儿。这才是这件事不正常的根源。

任何正常的人都应该明白一个朴素的道理,如果我们做一件不正确的事情,虽然暂时可能没有付出代价,甚至我们可以天天都做,但是这并不改变这件事本身不正确的性质。并不会因为我们每天都做这件不正确的事情,这件事就变正确了,而忽然有一天有人出来不让我们做了,阻止我们的人就是错的。

责难阻止你做错误事情的人,本质上是巨婴。

至于因为看不惯肖战,看不惯肖战的粉丝群体,乃至从头至尾就看不惯饭圈存在的人,举着各种“主义”的大旗,拿肖战大做文章的人,除了逻辑上根本站不住脚,而且内心也极其丑恶。他们甚至连因为上不去AO3而愤怒的AO3用户都不如,因为他们只有丑恶而自私的目的罢了。这才是真正意义上的“党同伐异”。

这世道究竟是怎么变坏的?就是被不正常的人搞坏的。

我希望这件事能够让所有正常的人明白,我们的社会正在被“不正常”侵害。如果正常的人不能站出来,为无辜的人发声,保护无辜的人不被侵害,那么事情会越变越糟。我也希望参与这次事件的所有人,都能够恢复一个基本的理性,恢复一个最基本的正常状态里去,好好想明白这个事情到底有什么对错。

最后,我个人向所有会担心我这篇文章发出来以后,会否危害我个人安危的朋友表达一下感谢。但是我金老汉信一个老理儿:平生不做亏心事,半夜不怕鬼敲门。我自己养浩然正气,不会怕什么妖魔鬼怪。如果有什么宵小之徒想要对我开展网络暴力,尽管放马过来,我倒还想和这些社会败类,斗个三百回合。

以上,感谢各位。

我是怎样得到AO3内容的

和大家之前说过,相关代码我会放出来,现在代码已经上传了去Github搜索 czw90130/AO3_DataAnalyze,我也和大家讲解一下实现方法,希望能激发大家学习编程兴趣。

这里先讲解爬虫是怎么实现的,至于文本分析器。下周有空再写吧,实在是肝不动了!

先说一下我的配置环境:

操作系统:Ubuntu 18.04Python环境:conda 4.8.2 Python 3.7.6编辑器使用的是 Jupyter Notebook 代码也是ipynb格式。想学python或者数据分析的可以用这个,适合组织文章。

使用到的 Python 库有:

sys os time 不解释了re 正则表达式解析tqdm 进度条selenuim 自动化测试/爬虫BeautifulSoup html 标签解析器

文章分析器使用的库也在这里说一下:

jieba 结巴中文分词,就是吧文章拆分成一个个词语wordcloud 词云生成器matplotlib 图表绘制库numpy python数学运算库(这个其实就是做了个计数器~)

都是非常常用的库,对 Python 和数据分析有兴趣的朋友可以照着这个表看看。(操作系统不熟Windows也可以) 对AO3的爬取并不复杂,但还是有一些难度的。经过我一系列的测试发现,Request并不能有效的爬取AO3的信息,因此就选择了selenium。对于Selenium的介绍,我就过多不多描述了,有很多技术文介绍。大家可以自行搜索。我这里给大家一些关键词,方便大家搜索。

selenium配置chromedriverselenium元素定位方法

首先加载要用到的库

import sysimport reimport osimport timefrom tqdm import tqdmfrom selenium import webdriverfrom bs4 import BeautifulSoupimport random

爬取AO3的中文文章其实并不复杂:

1、我们进入AO3首页,点击 “Search” 然后点击 “Edit Your Search” 进入高级搜索模式

2、在Language里选择中文,点击“Search”

3、把滚动条拉倒最下面,点第二页

4、把浏览起里面的地址复制下来

我们仔细查看这个url请求,发现这个请求的参数还是非常清晰的,让我们来看看works/后面的参数:

search?commit=Search&page=后面跟着一个数字2,我们点击其第三页,这个数字也变成了3。所以可以断定这个参数指的是页码&work_search%5Blanguage_id%5D= 后面跟着zh字样,可以判这个参数是控制语言的。

同理&work_search%5Brating_ids%5D=控制的是分级

其他字段也是类似的,大家有兴趣可以自己试验,我就不再叙述了,值得一提的是,我在爬取时并没有用到分级标签功能,只是在搜索里面翻文章。通过多次搜索我发现AO3的搜索结果有一定的随机性,并没有主动干预搜索结果,这一点还是很良心的。

其他字段也是类似的,大家有兴趣可以自己试验,我就不再叙述了,值得一提的是,我在爬取时并没有用到分级标签功能,只是在搜索里面翻文章。通过多次搜索我发现AO3的搜索结果有一定的随机性,并没有主动干预搜索结果,这一点还是很良心的。

#获取搜索页面def make_search_url(page=1, langu="zh", rating_key=""): rating = { "": "", "Not_Rated": 9, "General_Audiences": 10, #一般观众 "Teen_And_Up_Audiences": 11, #青少年及以上观众 "Mature": 12, #成熟 "Explicit": 13, #明确的 } base_loc = 'https://xxx/works/' #网站地址大家自己查这里我用 xxx 替代了 base_loc += "search?commit=Search&page="+str(page)+"&utf8=%E2%9C%93" #搜索页 base_loc += "&work_search%5Bbookmarks_count%5D=" base_loc += "&work_search%5Bcharacter_names%5D=" base_loc += "&work_search%5Bcomments_count%5D=" base_loc += "&work_search%5Bcomplete%5D=" base_loc += "&work_search%5Bcreators%5D=" base_loc += "&work_search%5Bcrossover%5D=" base_loc += "&work_search%5Bfandom_names%5D=" base_loc += "&work_search%5Bfreeform_names%5D=" base_loc += "&work_search%5Bhits%5D=" base_loc += "&work_search%5Bkudos_count%5D=" base_loc += "&work_search%5Blanguage_id%5D=" + langu #语言 base_loc += "&work_search%5Bquery%5D=" base_loc += "&work_search%5Brating_ids%5D=" + rating[rating_key] #分级 base_loc += "&work_search%5Brelationship_names%5D=" base_loc += "&work_search%5Brevised_at%5D=" base_loc += "&work_search%5Bsingle_chapter%5D=0" base_loc += "&work_search%5Bsort_column%5D=_score" base_loc += "&work_search%5Bsort_direction%5D=desc" base_loc += "&work_search%5Btitle%5D=" base_loc += "&work_search%5Bword_count%5D=" return base_loc

下面我们看看搜索页面的html,在Chrome中可以按F12打开开发者工具。 Ctrl+Shift+C 使用元素选择工具点击一下文章标题,查看后发现所有的搜索结果都在 <ol class=work index group>标签下,并且在li标签的id中记录了文章的id。

我们点击进入一篇文章,查看文章的url发现文章url与上面的id是一一对应的。这样,我们就可以通过分析搜索页得到文章的地址。

这样,通过BeautifulSoup抓取相应标签获得li标签的id,就可以得到该搜索页下面所有的文章地址了。

#获取文章链接def get_work_id_from_search(html): old_list = [] soup = BeautifulSoup(html, 'html.parser') ol = soup.find('ol', attrs={'class': 'work index group'}) work_blurb_groups = ol.findAll('li', attrs={'class': 'work blurb group'}) for wbg in work_blurb_groups: if wbg["id"] not in old_list: old_listend(wbg["id"]) return old_list

做好这些准备工作下面我们就开始正式爬取数据

save_path = "fulltext/" #存储文章的文件夹#5000页中文内容,这里可以先取较小的数字做测试start_p = 1end_p = 5000pbar = tqdm(range(start_p, end_p))

具体思路是这样的:

打开一个浏览器,需要注意的我这里使用了代理,否则无法浏览到AO3;通过selenium find_element_by_id 功能找到相应按钮自动点击,同意网站条款;进入循环,通过make_search_url函数组合出搜索页的链接,遍历页码;将搜索页的html传入函数get_work_id_from_search提取出所有文章id;遍历文章id通过文章id组合出文章地址并访问,最后保存文章页面的html。

这其中有两个注意事项:

当进入限制级文章时,网站会提示再次同意浏览条款,当检测到条款关键字时,使用find_element_by_link_text('Proceed')()点击确认即可;频繁访问后,网站会拒绝访问请求出现‘Retry later’页面,当检测到这种情况后,进行异常处理,关闭当前的浏览器,等待一分钟后重新访问。(这也是爬取文章速度比较慢的原因,有大神知道怎么解决的请赐教)

c_service = webdriver.chrome.service.Service('/usr/bin/chromedriver')c_servicemand_line_args()c_service.start()chrome_options = webdriver.ChromeOptions()chrome_options.add_argument('--proxy-server=socks5://localhost:1080')browser = webdriver.Chrome(chrome_options=chrome_options) # 调用Chrome浏览器browser.get("https://xxx/") # 网址用xxx替代time.sleep(3)browser.find_element_by_id('tos_agree')()time.sleep(1)browser.find_element_by_id('accept_tos')()time.sleep(1)for page in pbar: search_url = make_search_url(page) #生成搜寻页面链接 browser.get(search_url) # 请求页面,打开一个浏览器 html_text = browser.page_source # 获得页面代码 try: work_list = get_work_id_from_search(html_text) #获得文章的id for work in work_list: work_path = os.path.join(save_path, work+".html") if os.path.exists(work_path): continue work_url = "https://xxx/works/" + work.split("_")[1] #创建文章URL 网址用xxx替代 browser.get(work_url) html_text = browser.page_source #获得页面代码 if "If you accept cookies from our site and you choose \"Proceed\"" in html_text: #无法获取正文则点击Proceed browser.find_element_by_link_text('Proceed')() time.sleep(1) browser.get(work_url) html_text = browser.page_source if "Retry later" in html_text: raise AttributeError if "<!--chapter content-->" in html_text: pbar.set_description("saving: " + work) fh = open(work_path, 'w') #保存页面 fh.write(html_text) #写入内容 fh.close() #关闭 time.sleep(float(random.randint(10,50))/10) #随机延时 except AttributeError as e: print(e) time.sleep(3) browser.get("http://www.toutiao") time.sleep(3) browser.quit() c_service.stop() time.sleep(60) c_service.start() browser = webdriver.Chrome(chrome_options=chrome_options) #调用Chrome浏览器 browser.get("https://xxx/") # 网址用xxx替代 time.sleep(5) browser.find_element_by_id('tos_agree')() time.sleep(2) browser.find_element_by_id('accept_tos')() time.sleep(3) time.sleep(float(random.randint(10,50))/10) #随机延时

以上就是AO3爬虫的所有代码,爬虫会将文章都保存在 fulltext 文件夹下等待分析,这里的内容都在 AO3_spider.ipynb 中,都是开源的,大家可以自行 clone 拿去修改玩耍。

再次说明一下,因为是利用周末时间写的东西,语法格式也是比较飘逸,我自己也并不是爬虫和数据分析方面的专家。所以很多地方还是有些笨拙的。希望大神们也能帮忙指点。

声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送至邮件举报,一经查实,本站将立刻删除。转载务必注明出处:http://www.hixs.net/article/20231123/1696258273103787.html