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

2013-07-22 09:12:41 +08:00
 shierji
背景如下:
我老师让我分析近年一些新闻网站上出现的化学名词(有一个文本的词库)和相关的频度。
(人家是学化学的啦 - -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有关系?= =

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

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

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

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

类似的有: http://www.google.com/trends/ 趋势
xunyu
2013-07-24 09:55:00 +08:00
第一个问题python可以的,按行读取正则匹配,
第二个问题多线程,多机器访问试试看行不
shierji
2013-07-24 10:50:38 +08:00
@justfindu 您说的跟我这个关系不是很大呢……
@xunyu 第一个问题我正在学python
第二个问题我已经考虑用付费API了

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/76538

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX