TA的每日心情 | 开心 2020-5-22 23:45 |
---|
签到天数: 126 天 [LV.7]常住居民III
|
本帖最后由 水货姐姐家QD 于 2018-6-22 22:41 编辑 : {7 z- T) Y& X) {
2 \4 B8 X5 ?" c9 B首先,这篇帖子的作者就是我2 Q$ F5 B; t9 B7 s+ v
水货姐姐家的QD
- f x$ K& d2 E8 { j6 r也叫(QQending/QD)
! M1 ^! g/ L/ ]! g. D {: f9 i% z0 g) w$ s
非小白向,是因为我最近可能考研,但是因为一些原因,还是把这个能获得比较正常抓取结果,但是过程不成熟和规范化的东西发出来了,原因后面补。
[4 \5 ]1 ^) K u8 C+ N" R" P- N9 v, s2 v
2 N9 n; e0 [/ w1 i2 a, |- CPython工作环境:官方3.6.5 + Beautiful Soup4最新版 或 Anonconda最新版(对应的Python应该是3.6.4)都可以。9 r+ B) o, z3 V9 ]+ k f
Mac OSX系统注意在文件的抬头添加!\user\bin\env( h3 K$ m6 f5 ?
鉴于鄙人没有苹果电脑,工作环境也没有人能提供我苹果系统,自己也没装黑苹果,所以抬头除了强制utf-8,并没写苹果默认的环境配置。! ]/ T- e" @# ]" B% ?7 @, z
其他没有什么特殊要注意的。
. i* M3 J/ P0 a1 c; m7 D) z
5 V% Y! f) l* J' H2 K' [% A$ B; x9 ]0 r/ q7 D0 H# B6 B
最初我的想法是,直接对每一个想要的单词书进行url记录,并爬取,事实上也这么做过。
! B" ? n# ]. w* j: x其主要目的是因为,扇贝网的单词书里面混杂了很多至少自己用不到的单词书。8 z# G L0 H @4 c% F
4 n$ s5 g; a# ?: I8 A6 r扇贝网单词书首页:! l0 r- s% P/ e
https://www.shanbay.com/wordbook/& m3 E: R" D0 |4 s( G
! c% v, L, e" B4 O+ L+ {其结果就是……看的太累了,毕竟每个词单甚至要一个一个点开进去看简介。
5 [6 `/ f' l3 E( z* }就算现在是百兆甚至千兆光纤,但是光响应时间,也是个事,对吧。# l. p4 O) ?- E1 g V
8 E5 ^: g: [9 T6 s, n4 |/ k$ z所以,在经过多番提取url后……我选择……& }) K) \+ _4 j9 w& f+ b* @
首先根据扇贝网的单词书分类
* Q, B7 W0 e% P* `9 `2 q比如
1 ^, w6 D8 G6 s* D. r" a! q考研4 B' I! g3 ^: M1 S
https://www.shanbay.com/wordbook/category/10/
; f" {& e5 T- ?0 i) T) fcategory后面是10- @9 W. H6 v% t0 L5 {
不同单词书分类后面的不同,关于这个,我就干脆手动把分类记录在了一个txt里
4 o2 t3 z( j6 X1 ?. R, I9 s! p& ~7 f" u. H4 i7 j
见附件。抓取也会用到$ j; o4 o$ E) P( A# z
然后让抓取脚本使用requests函数进行抓取,当然这里你们使用urlib3, urlib2都可以。4 N4 K2 \' B8 H% o/ T1 a9 t4 p3 I+ [
其实扇贝网对抓取的限制似乎并不严格,只要间歇稍微大一点,至少把这些词单抓完是不会被封号的。
* G; s$ Z0 t. ^3 {- T8 I O' U) C但是如果多进程或者多线程抓取间隔太小,那么就会被ban了。5 C; o1 r: L! }6 _ ~
我代码里面的Proxiey其实真正用到的只有我自己的SS套餐的代理(本地127.0.0.1那个,其他的并不能使用……)我还真不知道有什么适合爬虫的IP池可用。
8 c1 |1 e5 j- h: Q9 g m" ^6 h% S0 \# q: s. H' @
8 G; f a e9 p- _; {" V% {以下就是抓取列表和根据列表抓取词单的两份代码了。
6 T- `1 N6 {6 V' u: c
4 Y$ O" h6 |+ n2 Y) k8 \这个附件的两个脚本都放在同一个文件夹内。4 m- ^: Z5 x$ d" o* R
然后在这个文件夹内新建一个input文件夹,将第一个脚本内的txt扔进去……# i1 m/ l) }1 j1 g7 G9 g" {( d
然后用python运行shanbay_crawl_list.py就可以得到分类的url0 P9 @& a* b9 _. O* v3 c
注意,这些url将在一个叫做output的文件夹内出现5 r- u) `5 ]: i; N1 k
我的这两份代码,都稍微进行了文件夹命名的处理。
+ g: \" o0 y# T6 t你可以将这些url完全合并到一个txt里,然后用shanbay_crawl_new.py进行抓取
. U7 i8 U$ o. u也可以按需选择性的合并。
' d% R* R! b" x s9 w, F1 E) I" q* m, ^4 G
category:** 这个不是每份文件信息前必备的. j# W. S" S7 R0 g6 K4 h
这个只是用来记录分类的: f4 }9 w1 z: q8 W. F% ?
而且你可以自己定义category的名称, e9 u' Q% _9 ]- o6 W2 g5 j& {0 p: {
但是如果后面的category与前面的不同,那么你就需要重新添加一行category:**了! W8 W5 q! f+ L# y
5 T# z3 t* I W( t/ u+ N$ x* c最后将合并好的文件命名为shanbay_url_list.txt* e- C3 N' M3 z3 e3 v5 J' A0 [& d
放入input文件夹内,运行shanbay_crawl_new_url.py$ s% Z! \( u$ H4 i, q$ _3 M0 `
7 S, x+ v; Y) S( Y当然,如果稍微懂一些python的,就知道我说了很多废话
! R- D/ Q! q! C A( X代码很简单,除了我个人写的丑和不专业化,其他应该真的不难理解吧。(我是指代码部分), u; z9 u% b1 O! y. P( P
- Q+ R( U' f E$ \8 G z! y关于多线程和多进程。+ {0 a7 E& E3 }
廖雪峰老师简单的说是多线程如果崩溃,那么就完全崩溃了。% s! d" \8 n- H
但是我之前抓过一个论坛,抓了差不多几万个帖子的小说吧,利用try except Exception,反正是没让多线程崩溃。; O: N0 N4 H4 X! g
多进程则效率低点,这份代码使用的就是多进程的,讲真……一共也没多少。而且还是建立在我怕单IP被封,多设置了一些延迟的基础上。还有IP被封,估计也就12小时,有IP池的可以测试一下被封的上限是多少,没有的就老老实实的用这个延迟吧。# G' E. t8 e" J) H. T* `
9 J9 R2 G6 X/ \1 h
6 A+ k, x: n( `& f, q0 E其实我抓扇贝,主要还是为了抓个不同考试的单词范围……# j2 b; @; G5 f
结果将各种词单合并后……! d# k/ Y, m2 ~9 L# s( D6 i
根据单词出现在不同词单中的频率,根据词单关键字(比如大纲,必备,热词,高频之类的)进行二次分析,效果还是一般。3 A0 p/ _* y# y; Z' \
反正托福,雅思都是能合并出接近2万单词量那种,不过不排除是因为未进行lemmatization(词性还原)将派生词之类的还原回去的缘故。; c# D. ^* H, ?
这个就比较复杂了。
3 `$ V- W( L5 n: m4 u7 r$ i, l5 r' W
好吧,这个帖子主要还是说抓扇贝的单词的……
! @5 z6 Q* p6 d( {我是真的至少将绝大部分词单都抓下来了。
3 A5 r# b" }8 `% x9 ]& N4 o3 I% R单词加释义,释义使用\n分割的,如果看着不舒服的,可以批量替换了。毕竟\n本身代替的也是换行的意思,只不过我强制使其不发生转义显示出来了。
+ V, j) k$ X# t0 Y/ F0 x4 _1 W0 |( P1 k9 W
& o6 s2 C' i" p6 x3 k- R6 d
* \; L0 j+ W, B/ ` m3 u6 c
我做url_list抓取的时候,其实还记录了owner(词单拥有者), wordcount(词单单词数), brief(简介), ?+ J$ r, W' U5 }0 S" A
简介为了快速人工识别所需的url,owner和wordcount,是因为有的词单名称一样,如果直接命名title,那么就会被覆盖……当然,可以多一步检测文件是否存在,并存为filename_n这种操作。
. p/ T0 H3 ~$ {; H再有,方便直接看,到底是谁的词单,毕竟shanbay自己的更稳点嘛。; V# v+ e1 J5 s/ t" Z3 g1 O
% }8 ~5 G% ?: W/ L! N7 h% I! `0 f
其实做这个本来的目的也是为了做考试单词的统计,这是我人工筛选后,进行代码合并后的结果,如下图
/ x6 N c. [9 H* R* z
9 b7 T' R$ [8 a/ T0 G6 A0 N/ c1 J
' S+ J% L" V" D' S M. A4 t: L# v! ^2 i: I' S% U
其中分为单独的词单出现频率数对应的单词数,以及加上关键词(大纲,热词,高频这类的)
6 O. i, C9 T, `- M/ g然后统计出的词单单词数……
& K5 |1 l) `+ |5 X0 |' B这部分也是有脚本的,当然,如果要再进行说明……就要再开贴了。
1 {; e7 _% L. |. O( a; |( J b; o, f$ p+ o! }
还有……我本来是通过论坛的资源,抓取了四本含有词频的学习型词典的词频,配合COCA BNC iWeb等语料库,想做个合集的mdx+ j/ N# s0 C3 b; s+ B5 ~
mdx现在还没做出来。3 q* O: D& Z3 I" Q4 N! c
抓取了挺久的了,其实最早语料库也是抓取的论坛的资源……
0 H4 n1 [( D! ?: `% i% z2 L8 N但是发现,如果不考虑有没有Freq(具体词频)的情况下,语料库来源网站的sample好像足以了,而且有2017年等新的资料。
# D9 I$ Q7 ?1 z! j2 `" f( L9 j2 [2 m0 s) `2 x) X d
, L- T9 I9 } K r
也做出了整合,这是合并词性(Part of Speech)的或者叫无词性的版本, E! @# L# W. `* y! g9 ]
有词性的,其实每份单独的也都抓取出来了,而且大体上的代码也写出来了,稍微改改……* u7 ]4 y3 A3 A
就可以去制作mdx了。
6 L. l) }" o5 R1 o( J大概这份mdx也主要是以表格的形式体现
' R- S- v2 W$ |; n分为有词性和无词性的显示方法。
' O8 h1 z1 P. v3 J& I+ l具体就需要再开一贴了……
" R) ^; u% t4 g# F" m9 q* p( v( p6 T' h3 U/ }
3 `+ L- ?- D) g* S0 G* u0 e现在,我做出来了一个另一个作用的东西,就是可以把两个词单分析出差异,到底差异在什么部分……
* T2 z- ~9 _* w' [' f' r9 X词单本身和差异部分用语料库和词典词频进行划分) H% @7 T8 e$ U1 g
0 _ v( j# B2 `$ `. n$ o" ^
1 ]* b/ E4 B* k3 B4 r0 `/ o. e
" c* B( c6 \; S帖子初版上传的代码有点问题……2 z. s0 X( k1 [
因为我抓取url_list的格式改了好几个版本,最后的url形式是临时凑活用的,所以从url_list根据正则表达式读取信息的代码略微有点问题,这次更新了。
% N( [, m: V( |9 E/ h! P J( J6 \7 h1 D" t4 @, [0 S
|
本帖子中包含更多资源
您需要 登录 才可以下载或查看,没有账号?免费注册
x
评分
-
5
查看全部评分
-
|