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实现的简单万年历例子分享
Apr 25 Python
Win10下Python环境搭建与配置教程
Nov 18 Python
Python写的一个定时重跑获取数据库数据
Dec 28 Python
神经网络python源码分享
Dec 15 Python
Python实现获取nginx服务器ip及流量统计信息功能示例
May 18 Python
在python环境下运用kafka对数据进行实时传输的方法
Dec 27 Python
python 实现矩阵上下/左右翻转,转置的示例
Jan 23 Python
三步实现Django Paginator分页的方法
Jun 11 Python
Python高级特性之闭包与装饰器实例详解
Nov 19 Python
如何通过Django使用本地css/js文件
Jan 20 Python
python主要用于哪些方向
Jul 05 Python
彻底弄懂Python中的回调函数(callback)
Jun 25 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
VB中的RasEnumConnections函数返回632错误解决方法
2014/07/29 PHP
微信公众号点击菜单即可打开并登录微站的实现方法
2014/11/14 PHP
PHP将数据导出Excel表中的实例(投机型)
2017/07/31 PHP
ThinkPHP5.0多个文件上传后找不到临时文件的修改方法
2018/07/30 PHP
改写一个简单的菜单 弹性大小
2010/12/02 Javascript
jQuery树形下拉菜单特效代码分享
2015/08/15 Javascript
js实现对ajax请求面向对象的封装
2016/01/08 Javascript
深入理解JavaScript内置函数
2016/06/03 Javascript
JS ES6中setTimeout函数的执行上下文示例
2017/04/27 Javascript
vue loadmore 组件滑动加载更多源码解析
2017/07/19 Javascript
AngularJs 最新验证手机号码的实例,成功测试通过
2017/11/26 Javascript
基于vue循环列表时点击跳转页面的方法
2018/08/31 Javascript
vue实现歌手列表字母排序下拉滚动条侧栏排序实时更新
2019/05/14 Javascript
layui动态渲染生成select的option值方法
2019/09/23 Javascript
jQuery实现购物车全功能
2021/01/11 jQuery
Python多线程编程(八):使用Event实现线程间通信
2015/04/05 Python
Python 编码处理-str与Unicode的区别
2016/09/06 Python
Django rest framework基本介绍与代码示例
2018/01/26 Python
python使用turtle库绘制树
2018/06/25 Python
在python中获取div的文本内容并和想定结果进行对比详解
2019/01/02 Python
Python实战购物车项目的实现参考
2019/02/20 Python
Python实现将蓝底照片转化为白底照片功能完整实例
2019/12/13 Python
Python使用Matlab命令过程解析
2020/06/04 Python
DataFrame.groupby()所见的各种用法详解
2020/06/14 Python
CSS3制作酷炫的条纹背景
2017/11/09 HTML / CSS
高级Java程序员面试要点
2013/08/02 面试题
高中数学教师求职信
2013/10/30 职场文书
学校司机岗位职责
2013/11/14 职场文书
外贸业务员求职信
2014/06/16 职场文书
二手车交易协议书标准版
2014/11/16 职场文书
2015年度党风廉政建设工作情况汇报
2015/01/02 职场文书
鼋头渚导游词
2015/02/05 职场文书
医务人员岗前培训心得体会
2016/01/08 职场文书
《平行四边形的面积》教学反思
2016/02/16 职场文书
Golang全局变量加锁的问题解决
2021/05/08 Golang
总结Python连接CS2000的详细步骤
2021/06/23 Python