Mathematica字符串处理之-mywife.cc

  • MD DocUmEnt:3/6/2016 3:51:12 PM by Jimbowhy
  • CSDN PuBlISheD: http://blog.csdn.net/WinsenJiansbomber/article/details/50814225
  • mathematica_mywife.cc.zip http://download.csdn.net/detail/winsenjiansbomber/9453956

自上一篇和mywife.cc有关的文章《mywife.cc 神一样的存在!》后,mywife.cc 就好像访问不了,这今天又打开来看了一下,发现改版好像。

对于mywife.cc这样的神奇网站,我感兴趣的不仅有那点图片和视频,更感兴趣的还的背后的数据处理。字符串处理就是一个方面。

最近在用Mathematica做图像处理,刚好字符串处理也一并过了一遍。这家伙虽然运行速度慢了点,但是功能却算是强大的。就当前来讲,需要将 mywife.cc 网站上的图片和视频链接地址收集整理。来看看网页上的代码内容 (view-source:http://mywife.cc/index?p=1),我感觉兴趣的有<title>舞ワイフ セレブクラブ</title>,和内容列表:

<div class="col-md-4 wifecon"><a title="中山 成美" href="teigaku/model/no/1019" rel="bookmark"><img src='http://p02.mywife.cc/girl/01019/thumb.jpg'"  width="99%"></a><p><a title="中山 成美" href="teigaku/model/no/1019" rel="bookmark"><b><br>中山 成美</b></a></p><p>「専業主婦として平凡な毎日を過ごし、オバサンになっていくのかと思うとじっと…</p><p><a class="btn btn-default" href="teigaku/model/no/1019" role="button">続きを読む &raquo;</a></p><div class="clear"></div>
</div>
...
<div class="col-md-4 wifecon"><a title="西田 春菜" href="teigaku/model/no/1014" rel="bookmark"><img src='http://p02.mywife.cc/girl/01014/thumb.jpg'"  width="99%"></a><p><a title="西田 春菜" href="teigaku/model/no/1014" rel="bookmark"><b><br>西田 春菜</b></a></p><p>ご主人の浮気がキッカケで不倫サイトにアクセスした西田さん。「一ヶ月前に主人に…</p><p><a class="btn btn-default" href="teigaku/model/no/1014" role="button">続きを読む &raquo;</a></p><div class="clear"></div>
</div>

每个列表包含指向某个视频的页面地址,还有预览图片、角色信息等等。进入视频链接页面后,主要的数据有视频地址和预览图片,当然还有标题,它含有视频编号信息,这个编号和视频的文件名相关:

<title>No.603 西田 春菜|セレブクラブ舞ワイフ</title>
<video id="video" src="http://free2.mywife.cc//sample/603.mp4"poster="http://p02.mywife.cc/girl/01014/topview.jpg"width="100%" preload="none" onmousedown="this.play()" controls>
</video>

为了抓取到这些数据,需要用到 Mathematica 的一个方法 URLFetch,它可以用来在页面间传送数据,当然也可以提交页面表单。先来小试牛刀吧,写一个函数来读取页面标题:

GapGet[url_String] := Module[{}, {hml = StringTake[URLFetch[url], {1, 1024}],pos = StringPosition[hml, #] & /@ {"<title>", "</title>"},range = Pick[Flatten[pos], {1, 0, 0, 1}, 0] + {1, -1},StringTake[hml, range]}[[-1]]]title = GapGet["http://mywife.cc/index?p=2"]
GapGet["http://mywife.cc/teigaku/model/no/1000"]舞ワイフ セレブクラブ
No.595 沢村 歩|セレブクラブ舞ワイフ

只需要 URL,通过上面的 GapGet 函数就就可以返回页面的标题“舞ワイフ セレブクラブ”,“舞”字日文的假名写作“まい”,即英文 my 的读音。セレブ (せれぶ selebu)则是日本俚语,有上流、优雅的含义。而 クラブ (kuubu) 即是英英单词 Club 的音译。整个中文的译法应该就是“人妻名人堂”。

好吧,是时候把名人堂搬到你家仓库了。首先,需要将主页的目录列表取下来处理,先通过 SetDirectory 设置工作目录,一会导出数据时较方便。榨取列表时,使用关键字符 wifecon 等等来进行分割:

SetDirectory["C:\\mywife.cc"];
url = "http://mywife.cc/index?p=1";
hml = URLFetch[url];
pos = StringPosition[hml, {"<div class=\"col-md-4 wifecon\">"}];
pos = Flatten[Transpose[pos][[1]]] - 1;
pos = Join[pos, {pos[[-1]] + 2 256}];
pos = Partition[pos, 2, 1];
list = StringTake[hml, pos];(* clip item *)

分割时使用 StringPosition,它会返回分割标记的两端的位置,通过 StringTake 提取列表时,只需要使用想邻两个分割点的内侧两个位置就可以了,提取得到的数据就会类似这样:

<div class="col-md-4 wifecon"><a title="小野 杏奈" href="teigaku/model/no/1006" rel="bookmark"><img src='http://p02.mywife.cc/girl/01006/thumb.jpg'"  width="99% "></a><p><a title="小野 杏奈 " href="teigaku/model/no/1006" rel="bookmark "><b><br>小野 杏奈</b></a></p><p>まるでアニメのキャラクターのような素晴らしい神がかったスタイルを持つ人妻がやって来ました\[Ellipsis]</p><p><a class="btn btn-default " href="teigaku/model/no/1006" role="button ">続きを読む &raquo;</a></p><div class="clear "></div>
</div>

得到这个列表项后,还不能直接使用,需要再进一步的分解,比如说需要 thumb.jpg 和 teigaku 链接信息,取得链接后,还要需要第二层的页面数据。进行下一步的数据分解,这时可以使用换行符作为分割关键字。

pos = StringPosition[#, "\n"][[2 ;; 3]] & /@ list;
pos = Partition[Flatten[pos], 4];
pos = Transpose[{pos[[ ;; , 1]] + 1, pos[[ ;; , 3]] - 1}];
len = Length[list];
For[{i = 1, li = {}}, i < len, i++,li = Join[li, {StringTake[ list[[i]], pos[[i]] ]} ]];
imglist = StringReplace[#, "thumb" -> "topview"] & /@ li;(* retrive topview <img> *)
pos = StringPosition[#, {"<img src='", "'\""}] & /@ imglist
Export["topviews.txt", imglist];

由于视频预览图片 topview 和列表预览图片 thumb 存在同一个目录的,所以直接替换就可以了。这里使用到集合部分重组的功能 Part,即[[x]]这样的表达式,它可以有以下这几种功能,规则比较复杂,如下表达,Rc、Hc 表示选择行数、列数,Rn、Cn 表示从第几行、列开始选择:

[[Rh,Ch]]           表示选择 Rh 行的 第 Ch 列
[[Rh;; ]]           表示选择 Rh 行之后的所有行
[[  ;;Rh]]          表示选择从开始行到 Rh 为止的行
[[  ;;,j]]          表示选择所有行的第 j 列
[[Rh,Ch ;;]]        表示从第 Rh 行的 第 Ch 列开始选择,本行内选择
[[ ;; Rc,Ch ]]      表示选择 Rc 行的 第 Ch 列,本行内选择
[[m1;;n1, m2;;n2]]  子矩阵

接下来再取视频链接,并生成生成页面ID和视频编号关系的数据集合:

pos = StringPosition[#, "\n"][[1 ;; 2]] & /@ list;
pos = Partition[Flatten[pos], 4];
pos = Transpose[{pos[[ ;; , 1]] + 1, pos[[ ;; , 3]] - 1}];
len = Length[list];
For[{i = 1, pgs = {}}, i < len, i++,pgs = Join[pgs, {StringTake[ list[[i]], pos[[i]] ]} ]];
(*Import["links.txt","Lines"];*)
pos = StringPosition[#, {"href=\"", "\" rel"}] & /@ pgs;
pos = Partition[Flatten[pos], 4];
pos = Transpose[{pos[[ ;; , 2]] + 1, pos[[ ;; , 3]] - 1}];
For[{i = 1, links={}}, i<len, i++, links=Join[links, {StringTake[ pgs[[i]], pos[[i]] ]} ]];
inks = ("http://mywife.cc/" <> #) & /@ links;
ts = GapGet[ # ] & /@ links;
MatrixForm[ts = Transpose[{links, ts}]]
Export["titles.txt", ts]

上面使用 MatrixForm 来将数据以矩阵的方式陈列来出:

("http://mywife.cc/teigaku/model/no/1029"   "No.618 矢吹 千尋|セレブクラブ舞ワイフ"
"http://mywife.cc/teigaku/model/no/1028"    "No.617 上重 友里|セレブクラブ舞ワイフ"
"http://mywife.cc/teigaku/model/no/1027"    "No.616 福山 涼子|セレブクラブ舞ワイフ"
"http://mywife.cc/teigaku/model/no/1026"    "No.615 南 麻央|セレブクラブ舞ワイフ"
"http://mywife.cc/teigaku/model/no/1025"    "No.614 今井 沙月|セレブクラブ舞ワイフ"
"http://mywife.cc/teigaku/model/no/1024"    "No.613 前田 里奈|セレブクラブ舞ワイフ"
"http://mywife.cc/teigaku/model/no/1023"    "No.612 佐々木 貴子|セレブクラブ舞ワイフ"
"http://mywife.cc/teigaku/model/no/1022"    "No.611 桜井 菜々美|セレブクラブ舞ワイフ"
"http://mywife.cc/teigaku/model/no/1021"    "No.610 斉藤 美鈴|セレブクラブ舞ワイフ"
"http://mywife.cc/teigaku/model/no/1020"    "No.609 竹内 美羽|セレブクラブ舞ワイフ"
"http://mywife.cc/teigaku/model/no/1019"    "No.608 中山 成美|セレブクラブ舞ワイフ"
"http://mywife.cc/teigaku/model/no/1018"    "No.607 堀 美幸|セレブクラブ舞ワイフ"
"http://mywife.cc/teigaku/model/no/1017"    "No.606 杉本 綾香|セレブクラブ舞ワイフ"
"http://mywife.cc/teigaku/model/no/1016"    "No.605 三上 千里|セレブクラブ舞ワイフ"
"http://mywife.cc/teigaku/model/no/1015"    "No.604 中沢 蘭|セレブクラブ舞ワイフ"
"http://mywife.cc/teigaku/model/no/1014"    "No.603 西田 春菜|セレブクラブ舞ワイフ"
"http://mywife.cc/teigaku/model/no/1013"    "No.602 千葉 美月|セレブクラブ舞ワイフ"
"http://mywife.cc/teigaku/model/no/1012"    "No.601 藤原 梨紗|セレブクラブ舞ワイフ"
"http://mywife.cc/teigaku/model/no/1011"    "No.600 遠藤 佳恵|セレブクラブ舞ワイフ"
"http://mywife.cc/teigaku/model/no/1009"    "No.599 白石 茜|セレブクラブ舞ワイフ")

有了这些数据后,就可以按排下载器般文件数据了,我试着用之前开发的 DDA(DOC88_Cracker_Jimbowhy) 下载了 topview 预览图,并在本地生成了页面来关联所有这些数据,看起来是这样的,gif文件由 Mathematica 导出,使用了选项 “DisplayDurations” -> 0.6 来设置延时。文件打包上传可以下载查看 mathematica_mywife.cc.zip:

导出的 views.txt、titles.txt 数据格式文件如下:

<img src='http://p02.mywife.cc/girl/01006/topview.jpg'"  width="99%"></a>
<img src='http://p02.mywife.cc/girl/01003/topview.jpg'"  width="99%"></a>
<img src='http://p02.mywife.cc/girl/01000/topview.jpg'"  width="99%"></a>
<img src='http://p02.mywife.cc/girl/00998/topview.jpg'"  width="99%"></a>
<img src='http://p02.mywife.cc/girl/00996/topview.jpg'"  width="99%"></a>
<img src='http://p02.mywife.cc/girl/00993/topview.jpg'"  width="99%"></a>
<img src='http://p02.mywife.cc/girl/00991/topview.jpg'"  width="99%"></a>
<img src='http://p02.mywife.cc/girl/00989/topview.jpg'"  width="99%"></a>
<img src='http://p02.mywife.cc/girl/00987/topview.jpg'"  width="99%"></a>
<img src='http://p02.mywife.cc/girl/00984/topview.jpg'"  width="99%"></a>
<img src='http://p02.mywife.cc/girl/00983/topview.jpg'"  width="99%"></a>
<img src='http://p02.mywife.cc/girl/00981/topview.jpg'"  width="99%"></a>
<img src='http://p02.mywife.cc/girl/00979/topview.jpg'"  width="99%"></a>
<img src='http://p02.mywife.cc/girl/00977/topview.jpg'"  width="99%"></a>
<img src='http://p02.mywife.cc/girl/00975/topview.jpg'"  width="99%"></a>
<img src='http://p02.mywife.cc/girl/00973/topview.jpg'"  width="99%"></a>
<img src='http://p02.mywife.cc/girl/00972/topview.jpg'"  width="99%"></a>
<img src='http://p02.mywife.cc/girl/00969/topview.jpg'"  width="99%"></a>
<img src='http://p02.mywife.cc/girl/00967/topview.jpg'"  width="99%"></a>
<img src='http://p02.mywife.cc/girl/00964/topview.jpg'"  width="99%"></a>{"http://mywife.cc/teigaku/model/no/1029", "No.618 矢吹 千尋|セレブクラブ舞ワイフ"}
{"http://mywife.cc/teigaku/model/no/1028", "No.617 上重 友里|セレブクラブ舞ワイフ"}
{"http://mywife.cc/teigaku/model/no/1027", "No.616 福山 涼子|セレブクラブ舞ワイフ"}
{"http://mywife.cc/teigaku/model/no/1026", "No.615 南 麻央|セレブクラブ舞ワイフ"}
{"http://mywife.cc/teigaku/model/no/1025", "No.614 今井 沙月|セレブクラブ舞ワイフ"}
{"http://mywife.cc/teigaku/model/no/1024", "No.613 前田 里奈|セレブクラブ舞ワイフ"}
{"http://mywife.cc/teigaku/model/no/1023", "No.612 佐々木 貴子|セレブクラブ舞ワイフ"}
{"http://mywife.cc/teigaku/model/no/1022", "No.611 桜井 菜々美|セレブクラブ舞ワイフ"}
{"http://mywife.cc/teigaku/model/no/1021", "No.610 斉藤 美鈴|セレブクラブ舞ワイフ"}
{"http://mywife.cc/teigaku/model/no/1020", "No.609 竹内 美羽|セレブクラブ舞ワイフ"}
{"http://mywife.cc/teigaku/model/no/1019", "No.608 中山 成美|セレブクラブ舞ワイフ"}
{"http://mywife.cc/teigaku/model/no/1018", "No.607 堀 美幸|セレブクラブ舞ワイフ"}
{"http://mywife.cc/teigaku/model/no/1017", "No.606 杉本 綾香|セレブクラブ舞ワイフ"}
{"http://mywife.cc/teigaku/model/no/1016", "No.605 三上 千里|セレブクラブ舞ワイフ"}
{"http://mywife.cc/teigaku/model/no/1015", "No.604 中沢 蘭|セレブクラブ舞ワイフ"}
{"http://mywife.cc/teigaku/model/no/1014", "No.603 西田 春菜|セレブクラブ舞ワイフ"}
{"http://mywife.cc/teigaku/model/no/1013", "No.602 千葉 美月|セレブクラブ舞ワイフ"}
{"http://mywife.cc/teigaku/model/no/1012", "No.601 藤原 梨紗|セレブクラブ舞ワイフ"}
{"http://mywife.cc/teigaku/model/no/1011", "No.600 遠藤 佳恵|セレブクラブ舞ワイフ"}
{"http://mywife.cc/teigaku/model/no/1009", "No.599 白石 茜|セレブクラブ舞ワイフ"}

Mathematica字符串处理之-mywife.cc相关推荐

  1. mywife.cc 神一样的存在!

    机缘巧合,这周末竟然发现了一个神一般存在的网站:mywife.cc!初看到这个域名会想到什么呢?自己探索去吧! 网上已经开始流行此网站发布的H情节图片了,警告:末满18岁小DD请自觉! 下载到H图后, ...

  2. C# 中字符串string和字节数组byte[]的转换,16 进制字符串转 int的方法

    string和byte[]互转 string转byte[] byte[] byteArray = System.Text.Encoding.Default.GetBytes(str); byte[] ...

  3. python判断字符串在元祖_Python基础(2)——字典、元祖、字符串方法、非空即真、文件...

    目录: 一.字典 二.元祖 三.字符串方法.切片 四.非空即真,非0即真 五.文件 正文 一.字典 字典 d = { 'username':'xiaohei', 'id':1, 'grand':'天马 ...

  4. python中格式化字符串_Python中所有字符串格式化的指南

    python中格式化字符串 Strings are one of the most essential and used datatypes in programming. It allows the ...

  5. [转载] python字符串数组字典_Python:字符串、列表、元组、字典

    参考链接: Python字符串| ascii_uppercase 字符串: 所有方法都修改不了字符串的值,字符串还是原值:但可以重新赋值:使用字符串方法有返回值 循环字符串的用法: 字符串方法: Na ...

  6. node-addon-api 的简单使用,c++数值、字符串、对象、数组转化为js可用数据。

    环境 1,node-gyp:9.0.0 2,node:16.0.0 3,python:3.10.5 4,node-addon-api:5.0.0 如果你没有配置好node-gyp的环境,需要先配一下, ...

  7. 字符串的定义与赋值及初始化

    字符串的定义与赋值及初始化 C语言的运算符根本无法操作字符串.在C语言中把字符串当作数组来处理,因此,对字符串的限制方式和对数组的一样,特别是,它们都不能用C语言的运算符进行复制和比较操作. 怎么给这 ...

  8. c++ 按分割符(忽略多次出现)切割string字符串

    最近在做各家公司的笔试题,每次花在数据输入上时间很多,尤其是遇到字符串问题,总是卡壳.而其中最麻烦的就是输入一串字符串,以分隔符进行分隔,比如逗号,忽略出现多次的情况.因为C++不像python和Ja ...

  9. Java将16进制字符串,转换成字符串

    Java将16进制字符串,转换成字符串 前段时间遇到同事给了我一串16进制的字符串,让我把它给转成正常的字符串. 16进制字符串: c8:ed:cc:bd:d5:eb 转换后正常的字符串: 软探针 解 ...

最新文章

  1. document.getElementById与getElementByName的区别
  2. X86汇编——简易通讯录
  3. 重磅合集 | 31 篇技术文章,带你从零入门 K8s (留言赠书)
  4. 1MySQL是面向对象型数据库_数据库及MySQL基础(1)
  5. JS的instanceof
  6. PAT甲级 -- 1002 A+B for Polynomials (25 分)
  7. Shell脚本多行换行报错:- unrecognized arguments- \
  8. 湖北职业技术学院计算机协会,湖北职业技术学院2019年教师教学能力大赛顺利举行...
  9. Matlab 散点 拟合 曲率,有数据点,希望得到一条拟合曲线,再求出这条曲线的曲率,求助!...
  10. SQL 基础面试题(四)
  11. 不怕面试再问HashMap,一次彻底地梳理(原理+手写实现)
  12. python构建关键词共现矩阵
  13. F检验 matlab
  14. 【python】day07 pygame的几款游戏练习(简单版)找不同、消灭单词、汤姆猫、看图猜名
  15. 【opencv-python不规则多边形 ROI提取】
  16. QEMU 简介(一)
  17. python爬虫 京东关键词搜索商品及具体参数和评论
  18. Java动态追踪技术
  19. 祝CSDN2021牛气冲天祝我也拨云散雾
  20. 通过Value获取JSON中对应的KEY

热门文章

  1. 编程小白一个月开发一套WEB进销存系统
  2. Mysql高手系列 - 第8篇:详解排序和分页(order by limit),及存在的坑
  3. 学会这个神器和技巧,低代码开发高端可视化大屏
  4. Fortran77-90-95
  5. 沟通的艺术II:看入人里 之自我
  6. VMware NSX原理与实践----NSX-MH解决方案
  7. 如何下载全球航拍影像地图
  8. Linux 上如何让任意普通用户执行拥有root权限的特定脚本或者程序
  9. php实现待办事项功能,PHP倒计时和待办事项
  10. Ta-lib学习笔记01--成交量指标