python实现提取百度搜索结果的方法


Posted in Python onMay 19, 2015

本文实例讲述了python实现提取百度搜索结果的方法。分享给大家供大家参考。具体实现方法如下:

# coding=utf8
import urllib2
import string
import urllib
import re
import random
#设置多个user_agents,防止百度限制IP
user_agents = ['Mozilla/5.0 (Windows NT 6.1; WOW64; rv:23.0) Gecko/20130406 Firefox/23.0', \
    'Mozilla/5.0 (Windows NT 6.1; WOW64; rv:18.0) Gecko/20100101 Firefox/18.0', \
    'Mozilla/5.0 (Windows; U; Windows NT 6.1; en-US) AppleWebKit/533+ \
    (KHTML, like Gecko) Element Browser 5.0', \
    'IBM WebExplorer /v0.94', 'Galaxy/1.0 [en] (Mac OS X 10.5.6; U; en)', \
    'Mozilla/5.0 (compatible; MSIE 10.0; Windows NT 6.1; WOW64; Trident/6.0)', \
    'Opera/9.80 (Windows NT 6.0) Presto/2.12.388 Version/12.14', \
    'Mozilla/5.0 (iPad; CPU OS 6_0 like Mac OS X) AppleWebKit/536.26 (KHTML, like Gecko) \
    Version/6.0 Mobile/10A5355d Safari/8536.25', \
    'Mozilla/5.0 (Windows NT 6.1) AppleWebKit/537.36 (KHTML, like Gecko) \
    Chrome/28.0.1468.0 Safari/537.36', \
    'Mozilla/5.0 (compatible; MSIE 9.0; Windows NT 6.0; Trident/5.0; TheWorld)']
def baidu_search(keyword,pn):
  p= {'wd': keyword} 
  res=urllib2.urlopen(("http://www.baidu.com/s?"+urllib.urlencode(p)+"&pn={0}&cl=3&rn=100").format(pn))
  html=res.read()
  return html
def getList(regex,text):
  arr = []
  res = re.findall(regex, text)
  if res:
    for r in res:
      arr.append(r)
  return arr
def getMatch(regex,text):
  res = re.findall(regex, text)
  if res:
    return res[0]
  return ""
def clearTag(text):
  p = re.compile(u'<[^>]+>')
  retval = p.sub("",text)
  return retval
def geturl(keyword):
  for page in range(10):
    pn=page*100+1
    html = baidu_search(keyword,pn)
    content = unicode(html, 'utf-8','ignore')
    arrList = getList(u"<table.*?class=\"result\".*?>.*?<\/a>", content)
    for item in arrList:
      regex = u"<h3.*?class=\"t\".*?><a.*?href=\"(.*?)\".*?>(.*?)<\/a>"
      link = getMatch(regex,item)
      url = link[0]
      #获取标题
      #title = clearTag(link[1]).encode('utf8')
      try:
        domain=urllib2.Request(url)
        r=random.randint(0,11)
        domain.add_header('User-agent', user_agents[r])
        domain.add_header('connection','keep-alive')
        response=urllib2.urlopen(domain)
        uri=response.geturl()
        print uri
      except:
        continue
if __name__=='__main__':
  geturl('python')

希望本文所述对大家的Python程序设计有所帮助。

Python 相关文章推荐
对于Python异常处理慎用“except:pass”建议
Apr 02 Python
pygame播放音乐的方法
May 19 Python
用tensorflow搭建CNN的方法
Mar 05 Python
Python操作Sql Server 2008数据库的方法详解
May 17 Python
Python基于pyCUDA实现GPU加速并行计算功能入门教程
Jun 19 Python
python logging重复记录日志问题的解决方法
Jul 12 Python
在cmder下安装ipython以及环境的搭建
Oct 19 Python
Python JSON编解码方式原理详解
Jan 20 Python
5行Python代码实现图像分割的步骤详解
May 25 Python
小结Python的反射机制
Sep 28 Python
C++和python实现阿姆斯特朗数字查找实例代码
Dec 07 Python
Python 中 Shutil 模块详情
Nov 11 Python
在Python中操作字符串之rstrip()方法的使用
May 19 #Python
Python映射拆分操作符用法实例
May 19 #Python
Python中的rjust()方法使用详解
May 19 #Python
python抓取百度首页的方法
May 19 #Python
Python递归遍历列表及输出的实现方法
May 19 #Python
Python中random模块用法实例分析
May 19 #Python
用Python操作字符串之rindex()方法的使用
May 19 #Python
You might like
php foreach 使用&amp;(与运算符)引用赋值要注意的问题
2010/02/16 PHP
php+ajax实现的点击浏览量加1
2015/04/16 PHP
TinyMCE 新增本地图片上传功能
2010/11/05 Javascript
jQuery学习笔记[1] jQuery中的DOM操作
2010/12/03 Javascript
jquery实现简单的无缝滚动
2015/04/15 Javascript
AngularJS的一些基本样式初窥
2015/07/27 Javascript
jQuery基于ajax实现带动画效果无刷新柱状图投票代码
2015/08/10 Javascript
JS模拟实现Select效果代码
2015/09/24 Javascript
jQuery插件EasyUI校验规则 validatebox验证框
2015/11/29 Javascript
你不需要jQuery(三) 新AJAX方法fetch()
2016/06/14 Javascript
微信小程序 Storage API实例详解
2016/10/02 Javascript
vue学习笔记之vue1.0和vue2.0的区别介绍
2017/05/17 Javascript
微信小程序自定义底部弹出框
2020/11/16 Javascript
自定义Vue组件打包、发布到npm及使用教程
2019/05/22 Javascript
vue实现户籍管理系统
2020/05/29 Javascript
jQuery实现简单飞机大战
2020/07/05 jQuery
python基础教程之lambda表达式使用方法
2014/02/12 Python
利用Python中的pandas库对cdn日志进行分析详解
2017/03/07 Python
python web基础之加载静态文件实例
2018/03/20 Python
python 随机森林算法及其优化详解
2019/07/11 Python
关于Python Tkinter Button控件command传参问题的解决方式
2020/03/04 Python
Python使用pickle进行序列化和反序列化的示例代码
2020/09/22 Python
Python plt 利用subplot 实现在一张画布同时画多张图
2021/02/26 Python
使用CSS3实现SVG路径描边动画效果入门教程
2019/10/21 HTML / CSS
巴西购物网站:Submarino
2020/01/19 全球购物
在对linux系统分区进行格式化时需要对磁盘簇(或i节点密度)的大小进行选择,请说明选择的原则
2012/11/24 面试题
计算机工程学院个人求职信
2013/10/05 职场文书
学习新党章思想汇报
2014/01/09 职场文书
建筑安全员岗位职责
2014/03/13 职场文书
十周年庆典策划方案
2014/06/03 职场文书
群众路线对照检查材料思想汇报怎么写
2014/09/18 职场文书
党员四风自我剖析材料
2014/10/07 职场文书
大明湖导游词
2015/02/03 职场文书
公司员工体检通知
2015/04/21 职场文书
色戒观后感
2015/06/12 职场文书
军训新闻稿范文
2015/07/17 职场文书