查看: 744|回复: 32
打印 上一主题 下一主题

[工具] 和大家分享一段简单的爬虫代码

[复制链接]

该用户从未签到

95

主题

554

回帖

2万

积分

翰林院编修

终身学习者

Rank: 11Rank: 11Rank: 11Rank: 11

积分
24557

翰林院专用章灌水大神章笑傲江湖章小蜜蜂章管理组专用章

跳转到指定楼层
1
发表于 2016-11-3 14:10:48 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
本帖最后由 henices 于 2016-11-14 23:12 编辑

请大家参考百度大的代码,谢谢!

本帖被以下淘专辑推荐:

该用户从未签到

59

主题

960

回帖

8774

积分

翰林院编修

Rank: 11Rank: 11Rank: 11Rank: 11

积分
8774

灌水大神章小蜜蜂章笑傲江湖章翰林院专用章管理组专用章

推荐
发表于 2016-11-5 21:28:16 | 只看该作者
首先,不应该用数据库,这玩艺系统开销太大;key-value型数据用字典类型即可:{}或OrderedDict
其次,不应该用queue,多线程可以用pool.map,简单且可以自由控制并发线程数
第三,不应该用urllib2访问网页,这个库没有连接池,频繁连接网站系统开销大,且可能会被封IP;你已经引入requests,为何却不用?
第四,似乎有些库import了却没有使用,这属于冗余垃圾代码,应该清除
。。。太多了,不一一列举了,代码整体上缺乏足够的工程强度,实际运行的时候会到处掉链子

本人的代码全都公开了,拿过来稍微改改就能用,楼主没必要从头发明车轮

今天纯属闲得无聊,话多见笑

该用户从未签到

95

主题

554

回帖

2万

积分

翰林院编修

终身学习者

Rank: 11Rank: 11Rank: 11Rank: 11

积分
24557

翰林院专用章灌水大神章笑傲江湖章小蜜蜂章管理组专用章

推荐
 楼主| 发表于 2016-11-5 22:03:19 | 只看该作者
bt4baidu 发表于 2016-11-5 21:28
首先,不应该用数据库,这玩艺系统开销太大;key-value型数据用字典类型即可:{}或OrderedDict
其次,不应 ...

感谢百度大的指导。

bdb 是单文件数据库,数据库本身为存储数据设计,bdb 更是为海量数据设计,个人认为说系统开销大,
不敢苟同。字典存储会带来额外的内存消耗,数据越大程序越慢。

还有您说的围绕数据,爬虫程序只做数据抓取和存储,不做数据分析处理,应该没必要围着数据转吧?

2,3 说的有道理,这几个库我没仔细研究,回头看一下。4 只是做个提示,给大家看看。

这段代码确实简陋,达不到工程强度,但是降低了大家入门的难度。不知百度大有没有
算过您写的代码有多少行,1000行以上吧?加上各种正则,我估计一半以上人都怕了。

感觉今天也是话多了,我这就删除程序,请大家参考百度大的代码。抱歉,浪费大家时间了。




该用户从未签到

59

主题

960

回帖

8774

积分

翰林院编修

Rank: 11Rank: 11Rank: 11Rank: 11

积分
8774

灌水大神章小蜜蜂章笑傲江湖章翰林院专用章管理组专用章

推荐
发表于 2016-11-6 14:24:49 | 只看该作者
henices 发表于 2016-11-5 22:03
感谢百度大的指导。

bdb 是单文件数据库,数据库本身为存储数据设计,bdb 更是为海量数据设计,个人认 ...

再简单的数据库,需要的系统开销也会大于哈希表字典:
要支持SQL查询、要满足数据库三范式、内存磁盘间的数据交换机制不可控。。。这些都是额外的开销,用来抓数据是浪费系统资源
字典存储需要的内存是可控的,根据自己的硬件配置可以分批、分块,灵活分配内存、写入硬盘
数据库的内存消耗因为不可控,要么可能会造成吃光所有内存的情况,要么就是数据在内存-磁盘间不停的倒腾来倒腾去

其实抓取和存储只占10%左右的工作量,90%的工作正是数据分析处理:排版格式化、清理冗余数据、交叉索引、合并词头、修复文本瑕疵,实际做一次就知道了,很辛苦的,并不是抓下来直接就能打包使用
匿名
5
匿名  发表于 2016-11-3 15:27:12
默默地顶一下。
匿名
6
匿名  发表于 2016-11-3 15:51:16
本帖最后由 匿名 于 2016-11-3 16:11 编辑


你这种水帖方式不对吧?
  • TA的每日心情
    奋斗
    2019-11-16 20:51
  • 签到天数: 178 天

    [LV.7]常住居民III

    7

    主题

    714

    回帖

    3887

    积分

    禁止发言

    积分
    3887

    灌水大神章笑傲江湖章QQ 章

    7
    发表于 2016-11-3 16:22:17 | 只看该作者
    需要这个!请教oxforddictionaries在线词典怎么抓取?

    该用户从未签到

    95

    主题

    554

    回帖

    2万

    积分

    翰林院编修

    终身学习者

    Rank: 11Rank: 11Rank: 11Rank: 11

    积分
    24557

    翰林院专用章灌水大神章笑傲江湖章小蜜蜂章管理组专用章

    8
     楼主| 发表于 2016-11-3 16:42:11 | 只看该作者
    本帖最后由 henices 于 2016-11-3 16:47 编辑
    shakahenryqht 发表于 2016-11-3 16:22
    需要这个!请教oxforddictionaries在线词典怎么抓取?


    首先要有一个wordlist, 一个单词一行。 然后需要修改这个

    DL.target('http://youdao.com/w/')

    不同网站在细节处理方面可能有所不同。

    url = self.url + quote(word.replace('/', '/'))

    这个是处理单词中有 / 的情况,这个要具体分析了。


    下面是查询链接  https://en.oxforddictionaries.com/definition/apple
  • TA的每日心情
    开心
    2023-1-18 23:24
  • 签到天数: 211 天

    [LV.7]常住居民III

    427

    主题

    4539

    回帖

    9万

    积分

    超级版主

    Rank: 12Rank: 12Rank: 12

    积分
    92011

    灌水大神章小蜜蜂章笑傲江湖章翰林院专用章管理组专用章城管大队长

    9
    发表于 2016-11-3 16:57:47 | 只看该作者
    henices 发表于 2016-11-3 16:42
    首先要有一个wordlist, 一个单词一行。 然后需要修改这个

    DL.target('http://youdao.com/w/')

    http://www.thesaurus.com/browse/abide
    这个有多页的不好弄

    该用户从未签到

    58

    主题

    933

    回帖

    3897

    积分

    被盗用户

    积分
    3897

    灌水大神章小蜜蜂章笑傲江湖章

    10
    发表于 2016-11-4 04:05:49 | 只看该作者
    谢谢 能否发个打包的文档  复制代码加入了很多乱码

    该用户从未签到

    95

    主题

    554

    回帖

    2万

    积分

    翰林院编修

    终身学习者

    Rank: 11Rank: 11Rank: 11Rank: 11

    积分
    24557

    翰林院专用章灌水大神章笑傲江湖章小蜜蜂章管理组专用章

    11
     楼主| 发表于 2016-11-4 09:13:15 | 只看该作者
    lxchen2001 发表于 2016-11-4 04:05
    谢谢 能否发个打包的文档  复制代码加入了很多乱码

    已添加下载地址,回复可见。
  • TA的每日心情
    奋斗
    2021-9-21 18:07
  • 签到天数: 167 天

    [LV.7]常住居民III

    4

    主题

    375

    回帖

    5080

    积分

    会元

    Rank: 7Rank: 7Rank: 7

    积分
    5080

    灌水大神章

    12
    发表于 2016-11-4 11:06:45 | 只看该作者
    也来学习一下

    该用户从未签到

    58

    主题

    933

    回帖

    3897

    积分

    被盗用户

    积分
    3897

    灌水大神章小蜜蜂章笑傲江湖章

    13
    发表于 2016-11-4 15:27:30 | 只看该作者
    henices 发表于 2016-11-4 09:13
    已添加下载地址,回复可见。

    谢谢  学习了

    该用户从未签到

    58

    主题

    933

    回帖

    3897

    积分

    被盗用户

    积分
    3897

    灌水大神章小蜜蜂章笑傲江湖章

    14
    发表于 2016-11-4 16:52:23 | 只看该作者
    请教一下:

    Berkeley DB哪里可以下载? Oralce的网站无法注册登入
    BDB有哪些好处?

    该用户从未签到

    95

    主题

    554

    回帖

    2万

    积分

    翰林院编修

    终身学习者

    Rank: 11Rank: 11Rank: 11Rank: 11

    积分
    24557

    翰林院专用章灌水大神章笑傲江湖章小蜜蜂章管理组专用章

    15
     楼主| 发表于 2016-11-5 15:40:54 | 只看该作者
    本帖最后由 henices 于 2016-11-5 15:48 编辑
    lxchen2001 发表于 2016-11-4 16:52
    请教一下:

    Berkeley DB哪里可以下载? Oralce的网站无法注册登入


    BDB  是 K -V 文件数据库,不用设计表结构。Key 为词头,Value 为词头对应的内容,使用起来非常自然。

    给你找了篇百度百科 http://baike.baidu.com/view/1281930.htm, BDB 提供多种语言编程接口,c,python,perl 都有,使用起来也很方便,而且在并发处理上优势很大,对于多进程,多线程的爬虫程序来说很合适。

    最后使用bdb 并不需要安装庞大的数据库软件,只要安装相关的运行库即可。

  • TA的每日心情
    开心
    2023-1-18 23:24
  • 签到天数: 211 天

    [LV.7]常住居民III

    427

    主题

    4539

    回帖

    9万

    积分

    超级版主

    Rank: 12Rank: 12Rank: 12

    积分
    92011

    灌水大神章小蜜蜂章笑傲江湖章翰林院专用章管理组专用章城管大队长

    16
    发表于 2016-11-5 15:52:42 | 只看该作者
    henices 发表于 2016-11-5 15:40
    BDB  是 K -V 文件数据库,不用设计表结构。Key 为词头,Value 为词头对应的内容,使用起来非常自然。
    ...


    mdx下载: perl手札,chm手动转mdx版 的mdx版

    该用户从未签到

    59

    主题

    960

    回帖

    8774

    积分

    翰林院编修

    Rank: 11Rank: 11Rank: 11Rank: 11

    积分
    8774

    灌水大神章小蜜蜂章笑傲江湖章翰林院专用章管理组专用章

    17
    发表于 2016-11-5 16:34:01 | 只看该作者
    这代码写得太啰嗦了。。。开销大,而且不够健壮
    代码一定要围绕数据,尽量简洁,尽量不要用各种复杂的组件/库

    该用户从未签到

    58

    主题

    933

    回帖

    3897

    积分

    被盗用户

    积分
    3897

    灌水大神章小蜜蜂章笑傲江湖章

    18
    发表于 2016-11-5 16:40:32 | 只看该作者
    henices 发表于 2016-11-5 15:40
    BDB  是 K -V 文件数据库,不用设计表结构。Key 为词头,Value 为词头对应的内容,使用起来非常自然。
    ...

    谢谢!!

    该用户从未签到

    95

    主题

    554

    回帖

    2万

    积分

    翰林院编修

    终身学习者

    Rank: 11Rank: 11Rank: 11Rank: 11

    积分
    24557

    翰林院专用章灌水大神章笑傲江湖章小蜜蜂章管理组专用章

    19
     楼主| 发表于 2016-11-5 18:53:30 | 只看该作者
    bt4baidu 发表于 2016-11-5 16:34
    这代码写得太啰嗦了。。。开销大,而且不够健壮
    代码一定要围绕数据,尽量简洁,尽量不要用各种复杂的组件 ...

    请百度大示范一段不罗嗦的代码
  • TA的每日心情
    开心
    2023-1-18 23:24
  • 签到天数: 211 天

    [LV.7]常住居民III

    427

    主题

    4539

    回帖

    9万

    积分

    超级版主

    Rank: 12Rank: 12Rank: 12

    积分
    92011

    灌水大神章小蜜蜂章笑傲江湖章翰林院专用章管理组专用章城管大队长

    20
    发表于 2016-11-5 22:16:46 | 只看该作者
    henices 发表于 2016-11-5 22:03
    感谢百度大的指导。

    bdb 是单文件数据库,数据库本身为存储数据设计,bdb 更是为海量数据设计,个人认 ...

    不要删,请您继续保留,做入门用,谢谢!

    该用户从未签到

    58

    主题

    933

    回帖

    3897

    积分

    被盗用户

    积分
    3897

    灌水大神章小蜜蜂章笑傲江湖章

    21
    发表于 2016-11-6 07:02:20 | 只看该作者
    写入数据库有它的灵活性,抓取到的数据并非一定要在MDX中使用。我现在抓取的网上内容都尽可能写到mongodb中。

    该用户从未签到

    59

    主题

    960

    回帖

    8774

    积分

    翰林院编修

    Rank: 11Rank: 11Rank: 11Rank: 11

    积分
    8774

    灌水大神章小蜜蜂章笑傲江湖章翰林院专用章管理组专用章

    22
    发表于 2016-11-6 14:34:40 | 只看该作者
    学编程不要去学那些奇技淫巧,搞一堆库啊、组件啊,那就完全变成了代码模块装配工(虽然目前IT业有往那个方向发展的趋势,不过一旦沦为装配工也就没前途了,普通的产业工人而已)
    应该在基础的、本质的东西上多下功夫
    从你的代码里可以看出基础还是不扎实,搞不清串行任务和并行任务的区别,对数据库的使用场景也不清楚,假如打算端这碗饭的话,还要继续努力啊
    匿名
    23
    匿名  发表于 2016-11-6 15:10:02
    bt4baidu 发表于 2016-11-6 14:24
    再简单的数据库,需要的系统开销也会大于哈希表字典:
    要支持SQL查询、要满足数据库三范式、内存磁盘间 ...

    后期处理确实很费精力 ,现有的比较知名的在线词典我都抓过,往往都是数据抓好后却懒得进行后期处理。

    该用户从未签到

    95

    主题

    554

    回帖

    2万

    积分

    翰林院编修

    终身学习者

    Rank: 11Rank: 11Rank: 11Rank: 11

    积分
    24557

    翰林院专用章灌水大神章笑傲江湖章小蜜蜂章管理组专用章

    24
     楼主| 发表于 2016-11-6 22:12:05 | 只看该作者
    bt4baidu 发表于 2016-11-6 14:24
    再简单的数据库,需要的系统开销也会大于哈希表字典:
    要支持SQL查询、要满足数据库三范式、内存磁盘间 ...

    再次感谢百度大的指导。

    哈希表当然比数据库开销小,但是是不是数据库就不能用了?
    早期的bdb都不支持SQL, 不需要满足数据库三范式吧?

    另外,您看到了我用bdb时用的是HASH算法吗?

    弄个字典而已,到不了要精确计算内存的地步。

    至于您说的抓取和存储只占10%,我同意,我也是做过mdx的人。

    该用户从未签到

    95

    主题

    554

    回帖

    2万

    积分

    翰林院编修

    终身学习者

    Rank: 11Rank: 11Rank: 11Rank: 11

    积分
    24557

    翰林院专用章灌水大神章笑傲江湖章小蜜蜂章管理组专用章

    25
     楼主| 发表于 2016-11-6 22:17:20 | 只看该作者
    本帖最后由 henices 于 2016-11-14 23:13 编辑

    重新打开此帖。