TA的每日心情 | 开心 2020-5-22 23:45 |
---|
签到天数: 126 天 [LV.7]常住居民III
|
本帖最后由 水货姐姐家QD 于 2018-6-22 22:41 编辑
# k0 `7 S) I0 j. p( D' G2 F9 q7 J' q! k/ S* u: F' N% Y, B
首先,这篇帖子的作者就是我
0 R1 P# `9 N6 }2 _) F* V( F+ s水货姐姐家的QD7 b0 x- ^- f3 N) U
也叫(QQending/QD)3 _5 m. C, d. p0 Q! j2 m
+ [+ D5 W: X. [非小白向,是因为我最近可能考研,但是因为一些原因,还是把这个能获得比较正常抓取结果,但是过程不成熟和规范化的东西发出来了,原因后面补。
& [2 h( Y9 l% R* o; l9 n/ V& U7 G' ?# c9 u. b2 I7 s& u2 J
Python工作环境:官方3.6.5 + Beautiful Soup4最新版 或 Anonconda最新版(对应的Python应该是3.6.4)都可以。
1 R7 `7 P' N3 C9 Q0 a( ?! }Mac OSX系统注意在文件的抬头添加!\user\bin\env- `4 a5 b. Z: {* e
鉴于鄙人没有苹果电脑,工作环境也没有人能提供我苹果系统,自己也没装黑苹果,所以抬头除了强制utf-8,并没写苹果默认的环境配置。
5 f6 Z4 E( s" U' d其他没有什么特殊要注意的。% J% a: S1 K( f) [) y
5 n! d! k T( o1 q3 }
( ~0 J& |- x% L, t, f& o$ s2 E最初我的想法是,直接对每一个想要的单词书进行url记录,并爬取,事实上也这么做过。2 W5 n9 ?' u$ R, G& }) N, @
其主要目的是因为,扇贝网的单词书里面混杂了很多至少自己用不到的单词书。
* m) G$ ^& ~ T; u% ]6 \2 b+ U" J! B7 i/ F A% n ^5 \
扇贝网单词书首页:& r1 a( `9 F$ ~
https://www.shanbay.com/wordbook/
) L' `2 ~) k# u" H! `' v
/ I' O; s: }0 O# E4 E其结果就是……看的太累了,毕竟每个词单甚至要一个一个点开进去看简介。
" h# j) g. j7 p9 b; i, R就算现在是百兆甚至千兆光纤,但是光响应时间,也是个事,对吧。
* A) C7 I1 N& s' k- S
/ l5 ?$ N8 }; `0 R所以,在经过多番提取url后……我选择……
' H V1 M$ y2 ?. K5 |首先根据扇贝网的单词书分类1 [* L- N* k5 F4 y+ |# w, X+ N
比如
$ h9 l1 u9 b( ~/ A. m" Z V9 b; a考研' C: T! N: ^9 ?; w; }
https://www.shanbay.com/wordbook/category/10/0 [% @% f( a0 M$ K
category后面是10
1 ?" d" K( W3 G+ O+ `4 z不同单词书分类后面的不同,关于这个,我就干脆手动把分类记录在了一个txt里5 D) i- m9 v; x) v
+ X0 _& S) [% f( [; H
见附件。抓取也会用到
% N5 r L x4 ~3 v: G3 m然后让抓取脚本使用requests函数进行抓取,当然这里你们使用urlib3, urlib2都可以。% z7 g( f, `& k3 ^$ |5 ^8 t8 J
其实扇贝网对抓取的限制似乎并不严格,只要间歇稍微大一点,至少把这些词单抓完是不会被封号的。
2 S5 K% h, n5 D7 M4 ^5 y但是如果多进程或者多线程抓取间隔太小,那么就会被ban了。. A/ n2 U# |- u! n7 W8 f E
我代码里面的Proxiey其实真正用到的只有我自己的SS套餐的代理(本地127.0.0.1那个,其他的并不能使用……)我还真不知道有什么适合爬虫的IP池可用。" d9 @# ?7 x$ Z/ ]. I# |$ D3 m7 n$ w
. W, n1 j3 l- K( U( a; V9 a4 x) l; M- T0 `( ^; x+ f
以下就是抓取列表和根据列表抓取词单的两份代码了。. _: r0 A& h% d: L
6 |, a c" M* {/ @) g# ]这个附件的两个脚本都放在同一个文件夹内。
$ D' Y' E ?0 C! ~) b然后在这个文件夹内新建一个input文件夹,将第一个脚本内的txt扔进去……
6 d" g! ^! L" E$ K然后用python运行shanbay_crawl_list.py就可以得到分类的url
! t8 J1 a+ }0 ~6 {# Z注意,这些url将在一个叫做output的文件夹内出现
1 }* ~* @8 R y& T9 ?# y我的这两份代码,都稍微进行了文件夹命名的处理。
' S0 j/ Z/ L4 A0 P) k你可以将这些url完全合并到一个txt里,然后用shanbay_crawl_new.py进行抓取
3 c- D. _: b( D/ _) ^也可以按需选择性的合并。
. L" L; A$ P' K" y; ]( n
6 n7 n; z5 h2 G" u+ S' N# Gcategory:** 这个不是每份文件信息前必备的
$ x4 g6 {1 o- Y, e5 S这个只是用来记录分类的
" Q3 c: k! n8 T' M; N: b2 t而且你可以自己定义category的名称6 S' j7 G# J5 y! K' T( a. H
但是如果后面的category与前面的不同,那么你就需要重新添加一行category:**了1 s/ p5 ^1 G+ ?: P2 J/ ?! K6 h
6 t( e& ]- y7 F- W) [3 Q; v- p
最后将合并好的文件命名为shanbay_url_list.txt0 Q3 W4 Q# _! o. s
放入input文件夹内,运行shanbay_crawl_new_url.py
. l- X7 q+ X6 e, f X6 q. f/ c# O1 M1 q; w, [* E) x; m
当然,如果稍微懂一些python的,就知道我说了很多废话3 d2 i9 n" z' \9 N) |: J
代码很简单,除了我个人写的丑和不专业化,其他应该真的不难理解吧。(我是指代码部分)
6 G6 s# `/ h. _, M5 J! K# g' U& K1 y& ~" h. d
关于多线程和多进程。
b# Z: Q- o! j6 E+ k' J7 J% @廖雪峰老师简单的说是多线程如果崩溃,那么就完全崩溃了。
4 D; h. q6 M! A但是我之前抓过一个论坛,抓了差不多几万个帖子的小说吧,利用try except Exception,反正是没让多线程崩溃。' @3 e/ e/ |5 {" y
多进程则效率低点,这份代码使用的就是多进程的,讲真……一共也没多少。而且还是建立在我怕单IP被封,多设置了一些延迟的基础上。还有IP被封,估计也就12小时,有IP池的可以测试一下被封的上限是多少,没有的就老老实实的用这个延迟吧。3 O( Z F' t! F3 Q6 U
! Q- m6 T0 @8 Y7 r/ z- c$ O
& S! H1 b1 J" X; _8 p
其实我抓扇贝,主要还是为了抓个不同考试的单词范围……
" i1 W8 i$ ?3 m% j) y7 U' }9 e6 s结果将各种词单合并后……
7 F. H/ T0 ^; D1 Q1 q2 o/ c, \3 }根据单词出现在不同词单中的频率,根据词单关键字(比如大纲,必备,热词,高频之类的)进行二次分析,效果还是一般。
1 e/ Q5 E; b2 {' a: j1 }! x反正托福,雅思都是能合并出接近2万单词量那种,不过不排除是因为未进行lemmatization(词性还原)将派生词之类的还原回去的缘故。
+ P: a D5 P+ v这个就比较复杂了。% _% k G6 h3 ^: d$ s! D
/ |0 M8 b2 U9 V# B0 W6 B) e# X好吧,这个帖子主要还是说抓扇贝的单词的……, e1 c, g' O" V3 Q
我是真的至少将绝大部分词单都抓下来了。
1 N' q& [# V5 R& t" i+ L单词加释义,释义使用\n分割的,如果看着不舒服的,可以批量替换了。毕竟\n本身代替的也是换行的意思,只不过我强制使其不发生转义显示出来了。
7 ]4 ], b6 @8 b) N9 X, b+ I/ j+ Z% x2 @
# ~! g) \1 K' M- L* d4 v
4 x* |- X& a9 m+ U* N( s1 Z我做url_list抓取的时候,其实还记录了owner(词单拥有者), wordcount(词单单词数), brief(简介); k+ d( a8 l7 Z- ^0 ~# o- `; x
简介为了快速人工识别所需的url,owner和wordcount,是因为有的词单名称一样,如果直接命名title,那么就会被覆盖……当然,可以多一步检测文件是否存在,并存为filename_n这种操作。3 E" G3 N* k; Y" l5 o
再有,方便直接看,到底是谁的词单,毕竟shanbay自己的更稳点嘛。: V! ~5 o5 A2 X6 }" f
% M- G! S0 N y9 O, D, d R; \5 k3 f其实做这个本来的目的也是为了做考试单词的统计,这是我人工筛选后,进行代码合并后的结果,如下图) P) K* t' N# `5 Q0 k) Y
8 |; L! B& X6 A- E2 H+ c" g4 ?
8 W$ C% Z/ X4 S4 _9 x4 I$ R2 a5 G
4 k9 s/ R! O" N [7 U其中分为单独的词单出现频率数对应的单词数,以及加上关键词(大纲,热词,高频这类的)
, |/ f) ^+ |* ^- B& j8 c然后统计出的词单单词数……& X7 W' M7 n9 o- J/ W; d' a
这部分也是有脚本的,当然,如果要再进行说明……就要再开贴了。) y1 O5 F& `- F- {* c; D( S
6 [" R' k2 F! F9 G" T4 ]还有……我本来是通过论坛的资源,抓取了四本含有词频的学习型词典的词频,配合COCA BNC iWeb等语料库,想做个合集的mdx
8 k, g7 T% z% [( }3 F$ w6 gmdx现在还没做出来。0 H7 \/ w; q/ M4 F
抓取了挺久的了,其实最早语料库也是抓取的论坛的资源……
$ B0 J6 [9 M5 K但是发现,如果不考虑有没有Freq(具体词频)的情况下,语料库来源网站的sample好像足以了,而且有2017年等新的资料。' V' p V6 [) ?
7 |( D' ?6 r: s/ R( k) P' F9 j" [9 |) v; f$ X+ k. @
也做出了整合,这是合并词性(Part of Speech)的或者叫无词性的版本6 b* d9 c- v; w, B3 B
有词性的,其实每份单独的也都抓取出来了,而且大体上的代码也写出来了,稍微改改……* S5 T9 J V7 C8 H9 f. \0 {) B4 O
就可以去制作mdx了。$ T0 c3 L1 f+ L" p3 k
大概这份mdx也主要是以表格的形式体现+ n6 d. z( u' n4 `
分为有词性和无词性的显示方法。* @( {8 N7 M. M: l3 V) U
具体就需要再开一贴了……
i; S( U4 D3 V: }* G
5 b! X4 F" d! a; ^( p0 P. C4 p& d0 A9 G$ P' V. S9 x1 z$ T
现在,我做出来了一个另一个作用的东西,就是可以把两个词单分析出差异,到底差异在什么部分……) L' X1 e5 [+ R9 @, N5 t
词单本身和差异部分用语料库和词典词频进行划分
M# S! y% B& U- Z8 |5 F( P# v! y
: t5 o0 M* ]& U& Y- O O
( K( b7 h1 A" _) j
6 O0 s3 @/ r; k帖子初版上传的代码有点问题……
) V* x6 R- R3 v3 w4 }) m% w* ]因为我抓取url_list的格式改了好几个版本,最后的url形式是临时凑活用的,所以从url_list根据正则表达式读取信息的代码略微有点问题,这次更新了。% m/ ~0 O; R; d- Y! q# V+ j( U9 }
3 U" e X- S6 k! G- ~8 c$ L |
本帖子中包含更多资源
您需要 登录 才可以下载或查看,没有账号?免费注册
x
评分
-
5
查看全部评分
-
|