TA的每日心情 | 开心 2020-5-22 23:45 |
---|
签到天数: 126 天 [LV.7]常住居民III
|
本帖最后由 水货姐姐家QD 于 2018-6-22 22:41 编辑
0 I* M- F' K! G4 C/ t/ _( H
) l9 V' A$ N+ B9 ]& s首先,这篇帖子的作者就是我9 `5 ]# F- H }3 ]8 ]
水货姐姐家的QD- a/ ^9 [/ r$ W* S# B% I: ]! t
也叫(QQending/QD)8 _% Q0 H6 \8 `! u( G. s
0 a- U* k, j2 y6 w非小白向,是因为我最近可能考研,但是因为一些原因,还是把这个能获得比较正常抓取结果,但是过程不成熟和规范化的东西发出来了,原因后面补。
2 A9 a" u% ~2 r; F l
( R- m2 R8 N+ h% ?5 x. YPython工作环境:官方3.6.5 + Beautiful Soup4最新版 或 Anonconda最新版(对应的Python应该是3.6.4)都可以。
, q) Z* }* X: N3 |Mac OSX系统注意在文件的抬头添加!\user\bin\env6 R5 m# N& j" d- p
鉴于鄙人没有苹果电脑,工作环境也没有人能提供我苹果系统,自己也没装黑苹果,所以抬头除了强制utf-8,并没写苹果默认的环境配置。9 K& d9 d: e: ?4 ~4 _0 k
其他没有什么特殊要注意的。! ^- ~1 z2 @' e: x. b
) E4 k# @6 A; V5 l9 O2 i: m: h) l) g( l! E" f3 c0 Y
最初我的想法是,直接对每一个想要的单词书进行url记录,并爬取,事实上也这么做过。
9 `3 P9 p5 N1 E% L其主要目的是因为,扇贝网的单词书里面混杂了很多至少自己用不到的单词书。
5 m! [+ @0 [3 e, v0 F& p
7 r2 \* u1 i$ q扇贝网单词书首页:1 A: N* V0 `3 W% s: a
https://www.shanbay.com/wordbook/
/ ?' Z: l) W* m' W1 W$ |
! ]1 e/ o; ~0 q) L0 x其结果就是……看的太累了,毕竟每个词单甚至要一个一个点开进去看简介。
; Q" B& y3 Z3 w( G/ v就算现在是百兆甚至千兆光纤,但是光响应时间,也是个事,对吧。4 q2 P6 B/ u% e* C: Y0 y
7 V. I5 t1 O$ ~* O$ Z Z
所以,在经过多番提取url后……我选择……
; d# R9 G3 ^ X! ?; V+ J+ D首先根据扇贝网的单词书分类; \9 V1 ^4 [# ?3 T
比如7 _9 T8 K* b" K3 A9 _' o, p
考研5 c/ s5 L1 a1 l% H
https://www.shanbay.com/wordbook/category/10/. O. W' c T+ ]- u
category后面是10$ h [- S5 t: i& L
不同单词书分类后面的不同,关于这个,我就干脆手动把分类记录在了一个txt里" u( v9 P7 A7 x$ N* [
6 k, [6 K' s$ B6 I S; s
见附件。抓取也会用到
0 B: d9 M2 D9 y4 M/ J& N4 D7 }) ~ {然后让抓取脚本使用requests函数进行抓取,当然这里你们使用urlib3, urlib2都可以。
$ d3 j) F' Z0 T其实扇贝网对抓取的限制似乎并不严格,只要间歇稍微大一点,至少把这些词单抓完是不会被封号的。3 X- }: J5 N( }$ @# e
但是如果多进程或者多线程抓取间隔太小,那么就会被ban了。7 w q# s4 v5 j, [3 q' y
我代码里面的Proxiey其实真正用到的只有我自己的SS套餐的代理(本地127.0.0.1那个,其他的并不能使用……)我还真不知道有什么适合爬虫的IP池可用。8 m) q3 i9 ^8 F9 L' j$ F
$ J- b1 ]9 b9 I$ |6 z5 [5 M
) ^3 m9 ]1 B% [' ~
以下就是抓取列表和根据列表抓取词单的两份代码了。& i+ ^5 n4 q9 L* A4 @+ l' }
1 _9 y4 _7 W4 h' o% C
这个附件的两个脚本都放在同一个文件夹内。
. o5 v) t3 Q6 L, s% D, K7 F8 k然后在这个文件夹内新建一个input文件夹,将第一个脚本内的txt扔进去…… ^# k) \' ~$ b' t+ d
然后用python运行shanbay_crawl_list.py就可以得到分类的url
+ P; [7 v, K" C" C" V) N8 K注意,这些url将在一个叫做output的文件夹内出现
2 ~0 \. d. B$ W我的这两份代码,都稍微进行了文件夹命名的处理。! P7 i- H/ c ^; g+ U2 x
你可以将这些url完全合并到一个txt里,然后用shanbay_crawl_new.py进行抓取
; N" E3 Z# a" G. o1 y1 n- b( t6 [也可以按需选择性的合并。
1 @1 ? f$ G6 u# H5 W8 U+ Y: o l" j$ k, j9 Q8 c- t
category:** 这个不是每份文件信息前必备的# I' A( I& [! r! [* [ a% @
这个只是用来记录分类的
8 A8 B: j* P0 Y+ S1 i8 `而且你可以自己定义category的名称
w& w% ? O, U/ G! Y但是如果后面的category与前面的不同,那么你就需要重新添加一行category:**了
5 o1 o) s1 c, X4 H: G' F: t% o* g1 z K0 J( s
最后将合并好的文件命名为shanbay_url_list.txt; V" {, o/ y N$ e6 t
放入input文件夹内,运行shanbay_crawl_new_url.py @* n( C/ j' q( F! W2 l
! z% V U8 c$ {- Q, Y z
当然,如果稍微懂一些python的,就知道我说了很多废话1 O2 d1 {% u9 |; m# k& G/ E
代码很简单,除了我个人写的丑和不专业化,其他应该真的不难理解吧。(我是指代码部分)
' f9 l8 \$ V4 y. D& Z/ {; V& ]
4 x" A0 S. b- m( B; g关于多线程和多进程。
. R R0 U1 D1 X. N' f廖雪峰老师简单的说是多线程如果崩溃,那么就完全崩溃了。3 B+ t4 z4 d. c
但是我之前抓过一个论坛,抓了差不多几万个帖子的小说吧,利用try except Exception,反正是没让多线程崩溃。3 {+ u3 O) l! F; r2 p! J
多进程则效率低点,这份代码使用的就是多进程的,讲真……一共也没多少。而且还是建立在我怕单IP被封,多设置了一些延迟的基础上。还有IP被封,估计也就12小时,有IP池的可以测试一下被封的上限是多少,没有的就老老实实的用这个延迟吧。
+ I5 \$ R7 C, R: }+ A6 u
F# R, v4 O) a9 [6 A2 Q0 V/ i* U4 c. s, l9 O
其实我抓扇贝,主要还是为了抓个不同考试的单词范围……8 |" ]$ Y2 _; v5 P" U$ _
结果将各种词单合并后……+ S' ?8 s' {" [2 _+ g7 H
根据单词出现在不同词单中的频率,根据词单关键字(比如大纲,必备,热词,高频之类的)进行二次分析,效果还是一般。
& a5 w4 O, V8 P D9 c; x反正托福,雅思都是能合并出接近2万单词量那种,不过不排除是因为未进行lemmatization(词性还原)将派生词之类的还原回去的缘故。
; R# ^) B8 Q3 j' ~: m这个就比较复杂了。
# |5 w2 Z+ _1 s8 X( f
6 f2 w- Z1 w4 u% e好吧,这个帖子主要还是说抓扇贝的单词的……
. ` f0 V7 k% c: I% |7 o- X2 x1 p5 J我是真的至少将绝大部分词单都抓下来了。
4 |* @9 j1 U7 [0 o4 m9 Q单词加释义,释义使用\n分割的,如果看着不舒服的,可以批量替换了。毕竟\n本身代替的也是换行的意思,只不过我强制使其不发生转义显示出来了。
, v& ]/ M" b, t7 v: E( x9 _3 s' X
& \7 A8 O4 @: u& o0 a
/ @) [- p+ Q) p$ w/ T4 j3 D, _% P
我做url_list抓取的时候,其实还记录了owner(词单拥有者), wordcount(词单单词数), brief(简介)
, E( Z$ W4 s$ { x5 q2 t4 `1 Y# _简介为了快速人工识别所需的url,owner和wordcount,是因为有的词单名称一样,如果直接命名title,那么就会被覆盖……当然,可以多一步检测文件是否存在,并存为filename_n这种操作。& D, w8 r# }/ \. F# V
再有,方便直接看,到底是谁的词单,毕竟shanbay自己的更稳点嘛。
) j( B2 W* @& @% K: t5 e( V( Z4 v$ w D- ]; u0 x) p2 n, D+ s
其实做这个本来的目的也是为了做考试单词的统计,这是我人工筛选后,进行代码合并后的结果,如下图
9 n) f% k0 K& h+ w& f/ ~. ]# J% x
/ G4 A5 Y, z Z5 Z3 h* X
3 p% K8 D2 a7 ?' D A8 L9 J: i9 Q5 z9 F其中分为单独的词单出现频率数对应的单词数,以及加上关键词(大纲,热词,高频这类的)3 l8 v) V) M# r1 ?. Q3 ^. q
然后统计出的词单单词数……3 D, w [4 k* I
这部分也是有脚本的,当然,如果要再进行说明……就要再开贴了。
) ]. G5 Y! @* d4 T! A
5 [9 z1 n! T c& u& ~. E$ X还有……我本来是通过论坛的资源,抓取了四本含有词频的学习型词典的词频,配合COCA BNC iWeb等语料库,想做个合集的mdx, y7 ]5 L/ j! \, q0 N3 b
mdx现在还没做出来。1 m* X2 \( T0 f, d* Y3 P
抓取了挺久的了,其实最早语料库也是抓取的论坛的资源……
0 a6 w) C3 o9 W d. v- J但是发现,如果不考虑有没有Freq(具体词频)的情况下,语料库来源网站的sample好像足以了,而且有2017年等新的资料。1 h) f) G' E' m* d/ \% V
1 }9 q5 |' A+ P$ h1 \8 s3 t5 U
3 u) L6 j6 ~/ u; b1 h也做出了整合,这是合并词性(Part of Speech)的或者叫无词性的版本
- @1 r6 D- D4 N# ] P& m有词性的,其实每份单独的也都抓取出来了,而且大体上的代码也写出来了,稍微改改……! B. R, l S+ _0 ~; ^
就可以去制作mdx了。
, q3 E# o3 z+ t, u2 ]大概这份mdx也主要是以表格的形式体现8 r' A+ q) ]' K+ @0 [4 S
分为有词性和无词性的显示方法。0 w" U+ l$ ?/ E; ] m# Y2 W
具体就需要再开一贴了……- N* w1 |( {. Q$ V* N, s5 z) d# X# \
# p/ I8 m* f- c9 h, R3 R" C
9 P+ s+ ?0 z. X9 l5 R
现在,我做出来了一个另一个作用的东西,就是可以把两个词单分析出差异,到底差异在什么部分……
% u& O2 A, f! T N% V) Q1 x# @词单本身和差异部分用语料库和词典词频进行划分
/ ]1 E' N8 C' X8 O0 y% g/ o3 p2 Z; Y
1 {3 j. ?; v$ ~7 F' x# `( q$ e3 M% v& X) u0 i
# S9 N8 {1 Q: w3 F帖子初版上传的代码有点问题……/ d) R" b" T! S9 L5 h
因为我抓取url_list的格式改了好几个版本,最后的url形式是临时凑活用的,所以从url_list根据正则表达式读取信息的代码略微有点问题,这次更新了。4 B T8 ]. \" }$ ^& s9 D: Y
/ F. @3 f1 F K2 ~( i# E" j _
|
本帖子中包含更多资源
您需要 登录 才可以下载或查看,没有账号?免费注册
x
评分
-
5
查看全部评分
-
|