经常使用百度搜索一些资料,故用Python模拟发送请求。

!/usr/bin/env python

# coding=utf8

#####################

name : bd.py

author: jaysonzhang

date : 2013-08-04

#####################

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)']

#组装url,搜索后返回结果

def baidu_search(keyword,pn):

p= {'wd': keyword}

#wd 代表关键字 pn 代表页码 cl=3 代表网页搜索

access_url=("http://www.baidu.com/s?"+urllib.urlencode(p)+"&pn={0}&cl=3&rn=10").format(pn)

#res=urllib2.urlopen(("http://www.baidu.com/s?"+urllib.urlencode(p)+"&pn={0}&cl=3&rn=10").format(pn))

res=urllib2.urlopen(access_url)

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 ""

#清除搜索结果中标题多余的html标签

def clearTag(text):

p = re.compile(u'<[^>]+>')

retval = p.sub("",text)

return retval

#清除百度搜索后结果列表里存在的换行符和TAB符,以便下面正则表达式不用处理这些字符

def subContent(content):

content=re.sub('\n','',content)

content=re.sub('\t','',content)

return content

#开始搜索

def geturl(keyword,totalpage):

for page in range(totalpage):

print 'Now Page %d Result:' %(page+1)

pn=page*10+1

#开始搜索,从第一页开始

html = baidu_search(keyword,pn)

content = unicode(html, 'utf-8','ignore')

#clean \n \t

content = subContent(content)

#得到左侧搜索结果列表

arrList = getList(u"

.*?<\/a>", content)

#遍历左侧搜索结果列表

for item in arrList:

regex = u"

(.*?)<\/a>"

link = getMatch(regex,item)

#获取百度返回带加密串的url

url = link[0]

#获取标题

title = clearTag(link[1]).encode('utf8')

#获取搜索结果的URL真实地址

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 "[%s]---->[%s]" %(title,uri)

except:

continue

if __name__=='__main__':

#输入要显示的总页数

totalpage=int( raw_input('input totalpage :') )

#输入关键字

key=u'%s' %( raw_input('input key word:') )

geturl(key,totalpage)

python调用百度查询关键字_Python模拟搜索百度关键字相关推荐

  1. Python调用API打造一个语音合成系统(百度智能云)

    Python调用API打造一个语音合成系统(百度智能云) 将文字转换成各种不同味道(大叔型,萝莉音,精神小伙型等)的语音. 申请一个百度智能云账号 使用Python开发一款智能语音合成系统,所以需要P ...

  2. 数据库关键字搜索查询html,js实现搜索框关键字智能匹配代码

    只要使用搜索引擎的朋友应该都有这样的体会,就是当在搜索框输入关键字的时候,会出现自能匹配现象,这绝对是非常好的用户体验,下面就是一段类似的代码,当然这里只是掩饰,所以只能匹配的数据都是本地固定好的,在 ...

  3. python调用带参函数_Python | 带有示例的函数调用类型

    python调用带参函数 There are following types of function calls in python: python中有以下类型的函数调用: Call by value ...

  4. python调用opencv处理视频_Python调用OpenCV读写视频

    最近因为经常对视频进行操作,所以记录下Python用opencv来读写视频的方法. 一.opencv读视频 python调用opencv来读视频比较简单,可以直接调用cv2.VideoCapture来 ...

  5. python 调用 c 生成数组_python调用c++传递数组的实例

    如下所示: input = c_int * 4 # 实例化一个长度为2的整型数组 input = input() # 为数组赋值(input这个数组是不支持迭代的) input[0] = 11 inp ...

  6. python实现火车票查询工具_Python 实现一个火车票查询的工具

    原标题:Python 实现一个火车票查询的工具 作者 sexycoder 本文转载自简书,转载需授权 使用 python 实现一个查询火车票的小工具 主要功能: 输入出发车站,到达车站,时间,然后返回 ...

  7. python调用c++动态库_Python调用C/C++动态链接库的方法

    本文以实例讲解了Python调用C/C++ DLL动态链接库的方法,具体示例如下: 示例一: 首先,在创建一个DLL工程(本例创建环境为VS 2005),头文件: //hello.h #ifdef E ...

  8. python调用c的配置文件_python调用c

    python一个非常的大的优点就是开发效率高,非常不好的缺点就是执行效率低:然而c语言有个则刚好相反.还有一点python的对源码的保护做不到,即使你用py2exe,pyinstaller这样的方法也 ...

  9. python调用cmd执行命令_python调用命令行,其中包含“echo”和“|”

    参见英文答案 > piping in shell via Python subprocess module 4个 我试着用python调用命令行执行一些文件.但是,当有一个包含"ech ...

  10. python 调用外部程序 终端异常_python调用外部命令

    python调用外部命令 os.system: 输出在终端上,捕捉不到 os.popen: 只能捕捉到标准输出,捕捉不到标准错误输出 os.popen2: 返回2个对象,一个是标准输入,一个是标准输出 ...

最新文章

  1. Python中的模块和包:模块的(动态)导入、__future__模块使用
  2. JVM——类加载机制
  3. U-Boot启动流程详解
  4. codeforces 677A-C语言解题报告
  5. block的使用(六)
  6. I帧、P帧和B帧的特点
  7. npm私服搭建与应用
  8. python检查exe运行是否报错_python打包成exe格式后,在部分机子上没法运行
  9. 常用元器件的识别与使用(电阻、电容、电感)
  10. c语言中char* 代表什么
  11. 数据清洗第六章—课后操作题
  12. 阿里云操作系统——飞天(Apsaras)
  13. Linux安装mysql 开启bingo日志
  14. 社会学转计算机博士,科学网—记我国社会计算学科第一位博士 - 王帅的博文
  15. HTTP协议入门 状态码大全
  16. 豆瓣高分JAVA书籍,值得收藏
  17. 如何去掉网格线及网格区域颜色
  18. python文件写入后,但文件还是空白
  19. 如何向icloud上传文件_怎么把文件放进苹果icloud
  20. 2.2.1 Nginx高性能负载均衡器

热门文章

  1. 华为交换机专用堆叠电缆连线指导
  2. 全面剖析《自己动手写操作系统》第五章---makefile文件
  3. 计算机组成原理 精选习题集
  4. Grasshopper GHPython 报错: Solution exception:找不到方法: “Void Microsoft.Scripting.Utils
  5. CentOS7 安装 oracle 10g
  6. 微电网逆变器VF控制simulink仿真模型。 采用解耦的电压电流双闭环控制, 输出电压电流波形质量良好
  7. Silverlight常见问题解决方法
  8. VB脚本:快速入门教程
  9. 古体字与简体字对照表_简体字繁体字对照表?
  10. 定制自己的Unity场景编辑工具界面(一)