V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
V2EX 提问指南
shierji
V2EX  ›  问与答

求问,关于网页数据抓取的问题。

  •  
  •   shierji · 2013-07-22 09:12:41 +08:00 · 2978 次点击
    这是一个创建于 4141 天前的主题,其中的信息可能已经有所发展或是发生改变。
    背景如下:
    我老师让我分析近年一些新闻网站上出现的化学名词(有一个文本的词库)和相关的频度。
    (人家是学化学的啦 - -T)

    我现在想到的解决方案是:
    首先如果整站mirror下来再做文本分析。这个不用想,数据量就有点太大了。

    所以我一开始想的是先通过Google搜索,过滤出含有关键词的网页,再抓取相应的网页下来分析。

    URL构造类似下面的:
    https://www.google.com/search?q=site:www.guokr.com+%E5%81%8F%E4%BA%8C%E7%94%B2%E8%82%BC&newwindow=1&safe=off&hl=zh-CN&tbs=qdr:m&num=100

    通过curl抓取下来。然后过滤URL…… 问题来了。

    第一个问题:如何从这么多文本里面过滤出需要的URL,因为我是用guokr来做的,里面的URL类似于:www.guokr.com/post/472922/‎

    第二个问题是:Google似乎对curl有严格限制。我抓过几次以后,就显示禁止访问了。难道是跟我频繁更换模拟的user agent有关系?= =

    或者说各位对这个有其他比较好的实现没有?
    7 条回复    1970-01-01 08:00:00 +08:00
    crazybubble
        1
    crazybubble  
       2013-07-23 10:59:21 +08:00   ❤️ 1
    第一个问题,可以有很多种解决办法,比如用正则表达式来取guokr的url。
    第二个问题的话,google对各种不用api来爬它搜索结果的非法手段都挺严格的,换不换user agent其实影响不大,禁止访问会从多种方面来检验你是不是爬虫的,你可以
    1. 试着用api(免费的search api的rate limit我记得也很少),好处是这是获取搜索结果的合法的手段
    2. 试着找些代理服务器,适时的换ip
    3. 在你的爬虫里随机的休息一段时间,让爬虫不要一直保持高频率的爬取。
    crazybubble
        2
    crazybubble  
       2013-07-23 11:00:45 +08:00   ❤️ 1
    我有一点好奇,如果你把文本都截取下来了,你要在其中找出化学单词的话,是不是还要对文本分词?这样的话你还要训练你自己的分词器把?
    shierji
        3
    shierji  
    OP
       2013-07-23 23:02:17 +08:00
    @crazybubble 直接去匹配现成的词库不行么?。。。有好一点的分词器推荐没有?中文跟英文的都要 T T
    第一个问题我看了,python似乎有现成的模块,所以我现在在看python的语法……

    第二个问题,我试试看Google的搜索API,即使付费我感觉应该也问题不大。导师倒是说了可以出点小钱,我感觉即使有花费应该也不多……

    话说免费的每天限制100次貌似……我先试试吧。
    crazybubble
        4
    crazybubble  
       2013-07-24 02:01:10 +08:00   ❤️ 1
    直接匹配的话,容易发生很多问题,比如有一些化学专有名词可能中文上会有常用的两种写法,我打个比方哦。。我不是很懂化学,二恶英和二噁英,就是2种写法,如果你的词库里只有一种的话,另一种就匹配不到拉,另一个问题就是,比如氯,和氯化钠,其实都属于化学名次,如果在匹配氯的时候,氯化钠出现在文本里,这个氯就会被提取到,这并不是你想要的把?还有一些情况是中文分词的模糊性导致的,比如“这瓶醋酸死我了。。”,那可能你会从这句话里提取到醋酸这个化学名词。。。

    中文分词其实github上也有现成的分词器,https://github.com/fxsjy/jieba, 英文的也很多,你可以搜搜看,但是我不确定你这里因为是化学专有名词,分词的效果可能没有那么好。可能需要自己训练,你可以看看52nlp.com上的中文分词的几篇文章。先试试那个github的分词器把,不好的话再自己搞。
    justfindu
        5
    justfindu  
       2013-07-24 09:27:08 +08:00   ❤️ 1
    记得google有一个关键筛选的工具~ 是为了投放广告或者做SEO用的~ 就是可以查找关键词被搜索次数频率等~

    类似的有: http://www.google.com/trends/ 趋势
    xunyu
        6
    xunyu  
       2013-07-24 09:55:00 +08:00   ❤️ 1
    第一个问题python可以的,按行读取正则匹配,
    第二个问题多线程,多机器访问试试看行不
    shierji
        7
    shierji  
    OP
       2013-07-24 10:50:38 +08:00
    @justfindu 您说的跟我这个关系不是很大呢……
    @xunyu 第一个问题我正在学python
    第二个问题我已经考虑用付费API了
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   5325 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 29ms · UTC 07:43 · PVG 15:43 · LAX 23:43 · JFK 02:43
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.