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的Tkinter实现一个简易计算器
Dec 31 Python
python爬虫框架scrapy实战之爬取京东商城进阶篇
Apr 24 Python
Python标准库之collections包的使用教程
Apr 27 Python
python操作xlsx文件的包openpyxl实例
May 03 Python
利用Python如何批量修改数据库执行Sql文件
Jul 29 Python
Python 从subprocess运行的子进程中实时获取输出的例子
Aug 14 Python
基于Python实现船舶的MMSI的获取(推荐)
Oct 21 Python
Tensorflow tf.dynamic_partition矩阵拆分示例(Python3)
Feb 07 Python
python读取多层嵌套文件夹中的文件实例
Feb 27 Python
详细分析Python collections工具库
Jul 16 Python
如何用python清洗文件中的数据
Jun 18 Python
浅谈Python数学建模之固定费用问题
Jun 23 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中实现Javascript的escape()函数代码
2010/08/08 PHP
浅谈web上存漏洞及原理分析、防范方法(安全文件上存方法)
2013/06/29 PHP
PHP多文件上传类实例
2015/03/07 PHP
Yii2 queue的队列使用详解
2019/07/19 PHP
PHP使用POP3读取邮箱接收邮件的示例代码
2020/07/08 PHP
Javascript document.referrer判断访客来源网址
2020/05/15 Javascript
juqery 学习之三 选择器 简单 内容
2010/11/25 Javascript
扩展Jquery插件处理mouseover时内部有子元素时发生样式闪烁
2011/12/08 Javascript
javascript使用shift+click实现选择和反选checkbox的方法
2015/05/04 Javascript
javascript生成大小写字母
2015/07/03 Javascript
JS判断页面是否出现滚动条的方法
2015/07/17 Javascript
js实现固定显示区域内自动缩放图片的方法
2015/07/18 Javascript
jQuery实现可展开折叠的导航效果示例
2016/09/12 Javascript
Angular2学习笔记——详解NgModule模块
2016/12/02 Javascript
React-router中结合webpack实现按需加载实例
2017/05/25 Javascript
详解AngularJS2 Http服务
2017/06/26 Javascript
JS原生数据双向绑定实现代码
2017/08/14 Javascript
JS加密插件CryptoJS实现的DES加密示例
2018/08/16 Javascript
jQuery 获取除某指定对象外的其他对象 ( :not() 与.not())
2018/10/10 jQuery
小程序rich-text组件如何改变内部img图片样式的方法
2019/05/22 Javascript
使用react context 实现vue插槽slot功能
2019/07/18 Javascript
跟老齐学Python之有容乃大的list(1)
2014/09/14 Python
浅析python3字符串格式化format()函数的简单用法
2018/12/07 Python
Python设计模式之备忘录模式原理与用法详解
2019/01/15 Python
python模拟鼠标点击和键盘输入的操作
2019/08/04 Python
树莓派4B+opencv4+python 打开摄像头的实现方法
2019/10/18 Python
浅谈python 中的 type(), dtype(), astype()的区别
2020/04/09 Python
Python xlrd模块导入过程及常用操作
2020/06/10 Python
巧克力领导品牌瑞士莲美国官网:Lindt Chocolate美国
2016/08/25 全球购物
介绍一下.NET构架下remoting和webservice
2014/05/08 面试题
家教广告词
2014/03/19 职场文书
建筑投标担保书
2014/05/20 职场文书
激励口号大全
2014/06/17 职场文书
2015年学校医务室工作总结
2015/07/20 职场文书
写作指导:怎么书写竞聘演讲稿?
2019/07/04 职场文书
java泛型通配符详解
2021/07/25 Java/Android