Python3.x学习笔记[2]:百度联想词获取

学习内容来自百度贴吧的某培训机构一个名叫黄哥的视频,视频内容讲的是360搜索,经测试国内其他搜索引擎大都适用,
但在谷歌上试的时候发现不容易解析,问题出在URL格式中cp=后面代表的字符串长度还好想,但是gs_id后面就会变了,
比如这么个解析出来的json网址,https://www.google.com.hk/complete/search?client=hp&hl=zh-CN&gs_rn=39&gs_ri=hp&tok=LdwfQgWKHs1U3CunHQbV0A&cp=7&gs_id=5xe&q=sublime&xhr=t,红色部分就是发生变化的,黄色部分是检索词,在群里问过才知道,那些&符号后头都是参数,把这俩变化的参数部分删掉,就可以解析了

言归正传,获取百度联想词的代码如下:

# codeing=utf-8
import urllib.request
import re
#import random

# iplist=['5.98.86.141:8080','24.172.34.114:8181','27.145.145.105:8080']

list1 = ['百度', '清明', '锄禾', '期待', '钓鱼岛', 'django']
for i in list1:
    # ip=random.choice(iplist)

    gjc = urllib.request.quote(i)
    url = 'http://suggestion.baidu.com/su?wd=' + gjc + \
        '&json=1&p=3&sid=&cb=jQuery110205425511478908079_1396251136074&_=1396251136078'
    headers1 = {'GET': url,
                'Host': "suggestion.baidu.com",
                'User-Agent': "Mozilla/5.0 (Windows NT 6.2; rv:28.0) Gecko/20100101 Firefox/28.0",
                'Referer': "http://www.baidu.com/"}

    # proxy_support=urllib.request.ProxyHandler({'http':'http://'+ip})
    # opener=urllib.request.build_opener(proxy_support)
    # urllib.request.install_opener(opener)

    req = urllib.request.Request(url, headers=headers1)
    html = urllib.request.urlopen(req).read().decode('gbk')
    ss = re.findall('\[.*\]', html)
    print(ss[0].strip('[').strip(']').replace('"', '').split(','))
有些部分被注释掉是因为没什么必要模拟浏览器和挂代理,但是视频里讲到了所以也加入进去了

运行结果如下:

['百度翻译', '百度网盘', '百度云', '百度杀毒', '百度卫士', '百度云盘登录', '百度网盘搜索', '百度糯米', '百度影音', '百度影音浏览器']
['清明节放假安排 2014', '清明时节雨纷纷', '清明果', '清明果艾糍', '清明诗会', '清明馃', '清明粑', '清明艾饺', '清明暗月', '清明饼']
['锄禾日当午', '锄禾日当午全诗', '锄禾日当午搞笑', '锄禾日当午 诗名', '锄禾日当午 清明上河图', '锄禾日当午作者', '锄禾日当午 汗滴禾下土', '锄禾日了几个人', '锄禾 古诗', '锄禾日当午 造血干细胞']
['期待恋爱', '期待 girls day', '期待爱', '期待在地下城邂逅有错吗', '期待度', '期待的英文', '期待爱情', '期待舞蹈教学', '期待你的回复 英文', '期待爱歌词']
['钓鱼岛屿最新事件', '钓鱼岛屿最新事件中国军方态度', '钓鱼岛屿最新事件开火', '钓鱼岛屿', '钓鱼岛屿事件中国败', '钓鱼岛屿事件', '钓鱼岛屿最新事件中国态度视频', '钓鱼岛上有什么', '钓鱼岛歌', '钓鱼岛屿最新事件新闻']
['django book', 'django 教程', 'django 安装', 'django cms', 'django 模板', 'django mysql', 'django admin', 'django 下载', 'django ajax', 'django session']
[Finished in 19.9s]

插件使用配置(config)还是很灵活的,当然也是弊端,配置不当,效果就没了。 使用时候,重要的参数如下(此demo参数配置点击右键看源码): url: 'http://suggest.taobao.com/sug?code=utf-8&extras=1', queryName: 'q', //url?queryName=value,默认为输入框的name属性 jsonp: 'callback', //设置此参数名,将开启jsonp跨域功能(我要调淘宝数据,非跨域不可,淘宝的回调参数名就是callback),否则使用json数据结构 item: 'li', //下拉提示项目单位的选择器,默认一个li是一条提示,与processData写法相关。 processData: function(data){ }//自定义处理返回的数据,该方法可以return一个html字符串或jquery对象,将被写入到提示的下拉层中。 右键查看源码,将看到本demo所编写的processData函数是怎样的,所以这个参数是把如何表现交给你来做了,但别忘了配合 item 参数 getCurrItemValue: function($currItem){ }//定义如何去取得当前提示项目的值并返回值,插件根据此函数获取当前提示项目的值,并填入input中,此方法应根据processData参数来定义。 是的,如果你自定义了processData,这个参数恐怕也需要自定义,默认是获取$currItem.html(),你也可以return $currItem.attr('an attrName'); 右键查看源码,将看到本demo所编写的getCurrItemValue函数是怎样的 textchange: function($input){}, //不同于change事件在失去焦点触发,inchange依赖本插件,只要内容有变化,就会触发,并传入input对象 onselect: function($currItem){} //当选择了下拉的当前项目时执行,并传入当前项目。比如选择了某个提示项目,就提交表单。 sequential: 0, //按着方向键不动是否可以持续选择,默认不可以,设置值可以是任何等价的boolean
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值