这是一个我在业余时间学习python的一个小练习,纯属新手,有不对的地方,还恳朋友们留言指出。
1. Google搜索
当我们在google搜索引擎中输入关键字的时候,会实时弹出一些联想提示短语的列表。这篇文章想通过python做这样一个数据采集的工作。我们使用 Chrome 浏览器来分析下。(Google服务被GFW禁掉,我采用了VPN。)



2. 代码思路 Github
这里随便选择了三个关键字,分别是love
,like
,hate
。
# A demo to show how to collect the suggestion words when we search with search engine
import urllib
import urllib2
import re
import time
from random import choice
wordsSearchingList = ['love', 'like', 'hate']
for item in wordsSearchingList:
keyWord = urllib.quote(item)
url = 'https://www.google.co.jp/complete/search?client=hp&hl=zh-CN&gs_rn=48&gs_ri=hp&tok=9rRotU-cEDUkHKHgOoZAZw&cp=4&gs_id=je&q=%s&xhr=t' % (keyWord)
# 填写Request Headers,防止被ban掉
headers = {
"GET": url,
"Host": "www.google.co.jp",
"Referer": "https://www.google.co.jp/",
"User-Agent": "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_9_3) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/35.0.1916.114 Safari/537.36",
}
req = urllib2.Request(url)
for key in headers:
req.add_header(key, headers[key])
html = urllib2.urlopen(req).read()
# 正则匹配
pattern = re.compile(r'"({searchWord}.*?)"'.format(searchWord = keyWord))
results = pattern.findall(html)
for item in results:
print item
time.sleep(1)
print '-------------------------------------'
love
love tv show
love
love story
love the way you lie
love is an open door
love moschino
love never felt so good
loveq
love live 第二季
love actually
-------------------------------------
like
likert scale
likelihood ratio test
-------------------------------------
hate
hater snapback
hater帽子
hateoas
hater snapback uk
hate crime
hate speech
hateship loveship
haters gonna hate
hate什么意思
hater uk
-------------------------------------
[Finished in 5.0s]
3. 存在问题
正则匹配我用的是pattern = re.compile(r'"({searchWord}.*?)"'.format(searchWord = keyWord))
,会匹配出类似"love story"
,"love live 第二季"
这样以love
开头,并被双引号包围的短语。但这样会导致下面这个问题:
这个仍然有待改进。