您的位置:首页 > 编程语言 > Python开发

使用python解析百度搜索结果

2011-10-29 04:14 615 查看
想与大家分享一个网页解析的方法。

我尝试过多种方法来解析百度搜索结果,比如pyquery, lxml, beautifulsoup等,今天发现,这些方法都不太好, 如果baidu把页面结构变化一下,可能就不起作用了。 这些页面解析库使用起来也挺麻烦。

我今天借鉴了网上的写法,觉得这个idea很不错。 我们可以用正则先把所有的链接找出来,
然后筛选掉不合乎标准的链接。下面是我的代码,可以提取前100个或者前10个百度搜索结果。 您也可以在下面的链接中下载源代码。

http://www.ueseo.org/download/python/BaiduResult.py

#!/usr/bin/env python

# -*- coding: utf-8 -*-

'''

百度关键词排名

By Jibo He @ ueseo.org

hejibo@ueseo.org

26 Oct, 2011

http://www.ueseo.org/download/python/BaiduResult.py

'''

import sys

import urllib ,urllib2

import re

def getNakedDomain(url):

'''

return the naked domain based on url

'''

if url.startswith('http://'):

url=url[7:]

if url.startswith('www.'):

url=url[4:]

if "/" in url:

url =url[0:url.find('/')]

return url

def baidu100(w):

url= "http://www.baidu.com/s?"

values = {

"w":w.encode('gbk','ignore')

}

data = urllib.urlencode(values)

newurl = url + data+"&rn=100"

response = urllib2.urlopen(newurl)

the_page = response.read().decode('gbk','ignore')

return the_page

def baidu10(w):

url= "http://www.baidu.com/s?"

values = {

"w":w.encode('gbk','ignore')

}

data = urllib.urlencode(values)

newurl = url + data

response = urllib2.urlopen(newurl)

the_page = response.read().decode('gbk','ignore')

return the_page

def ResultLinksFilter(data,mysite):

o = re.compile('''href="(.+?)"''')

f = o.findall(data)

line = 1

isInFirst100 = False

for ff in f:

if not re.search("baidu",ff) and not re.search("bing",ff) and ff.startswith('http://'):

if getNakedDomain(mysite) in ff:

isInFirst100 = True

break

#print "******* " ,line ,ff

#print line ,ff

line += 1

if isInFirst100:

return isInFirst100,line,ff

else:

return isInFirst100,-1,'-1'

if __name__ == "__main__":

mysite = 'pconline.com.cn'

keyword='手机'

mysite = 'http://www.ueseo.org'

mysite = 'http://ueseo.org'

mysite = 'http://blog.ueseo.org'

#mysite = 'http://bbs.ueseo.org'

keyword='ueseo'

keyword='优异搜索'

data = baidu100(keyword.decode('utf-8'))

isInFirst100,line,link =ResultLinksFilter(data,mysite)

print line,link

---------------------------

He Jibo

Department of Psychology,

Beckman Institute for Advanced Science and Technology

University of Illinois, Urbana Champaign,

603 East Daniel St.,

Champaign, IL 61820

website: www.hejibo.info
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: