python抓取百度结果中的排名和网址 极速版图书馆泡8个小时的成果
标题:python抓取百度结果中的排名和网址 极速版图书馆泡8个小时的成果
——————————————————————————————————————————-
时间:2012/11/18 20:10:59
——————————————————————————————————————————-
内容:
前言
实现方法
python的正则表达式帮了很大 忙
然后走的弯路是要注意匹配的时候.*? 后面加个问号防止贪婪匹配
贪婪匹配
就是匹配43432seoseo 我用(.*)seo 会默认的抓取了 43432seo
因为他会极可能的匹配多点 所以我要使用几个问号就是抓的少点
正则表达式的双引号用转移字符\加双引号 然后多种匹配就是
(a|b)针对2种情况都可以匹配
基本上思路就是
首先用大家都很熟悉的urllib库来抓数据
然后用re的来书写正则表达
然后用findall来找到所有的匹配输入数组
然后用for循环来遍历数组
然后遍历的时候插入
关键是正则表达式耗时
然后就是基本的判断
mysql记得要使用commit才能提交
还要提高的地方
中文字符的支持
以及快照时间的分离
还有真正的着陆页面的活取
定时执行
import re,time,urllib2,MySQLdb
t=time.time()
key=”%E8%B7%B3%E8%88%9E%E6%9C%BA”
html=urllib2.urlopen(“http://www.baidu.com/s?wd=%s&rn=100″ % key).read()
t0=time.time()-t
p3=re.compile(r”id=\”(\d{1,3})\”.*?(mu=\”http://([^\”]*?)\”|<span class=\”g\”>\s*([^<]*)</span>)”)
t1=time.time()-t
conn = MySQLdb.connect(user=’root’,passwd=’111111′,db=’schools’)
cursor = conn.cursor()
m=p3.findall(html)
t2=time.time()-t
for i in m:
k=i[0]
k=int(k)
if i[1].find(“mu=\”http://www.baidu.com”)+1:#在mu中如果有www开头的是百度知道
print “zhidao.baidu.com”
sql = “insert into serp(url,kw, pos) values (‘%s’,’%s’, %d)” % (“zhidao.baidu.com”,key,k)
cursor.execute(sql)
elif i[1].find(“mu=\”http”)+1:#在mu中的就是百度产品了
print i[2]
sql = “insert into serp(url,kw, pos) values (‘%s’,’%s’, %d)” % (i[2],key,k)
cursor.execute(sql)
else:
print i[3]#就是正常产品了
sql = “insert into serp(url,kw, pos) values (‘%s’,’%s’, %d)” % (i[3],key,k)
cursor.execute(sql)
t3=time.time()-t
print “serp open spend %s\ncompile pattern spend %s\nfind all results spend %s\ntotal spend %s” %(t0,t1,t2,t3)
conn.commit()
cursor.close()
前言
实现方法
python的正则表达式帮了很大 忙
然后走的弯路是要注意匹配的时候.*? 后面加个问号防止贪婪匹配
贪婪匹配
就是匹配43432seoseo 我用(.*)seo 会默认的抓取了 43432seo
因为他会极可能的匹配多点 所以我要使用几个问号就是抓的少点
正则表达式的双引号用转移字符\加双引号 然后多种匹配就是
(a|b)针对2种情况都可以匹配
基本上思路就是
首先用大家都很熟悉的urllib库来抓数据
然后用re的来书写正则表达
然后用findall来找到所有的匹配输入数组
然后用for循环来遍历数组
然后遍历的时候插入
关键是正则表达式耗时
然后就是基本的判断
mysql记得要使用commit才能提交
还要提高的地方
中文字符的支持
以及快照时间的分离
还有真正的着陆页面的活取
定时执行
import re,time,urllib2,MySQLdb
t=time.time()
key=”%E8%B7%B3%E8%88%9E%E6%9C%BA”
html=urllib2.urlopen(“http://www.baidu.com/s?wd=%s&rn=100″ % key).read()
t0=time.time()-t
p3=re.compile(r”id=\”(\d{1,3})\”.*?(mu=\”http://([^\”]*?)\”|<span class=\”g\”>\s*([^<]*)</span>)”)
t1=time.time()-t
conn = MySQLdb.connect(user=’root’,passwd=’111111′,db=’schools’)
cursor = conn.cursor()
m=p3.findall(html)
t2=time.time()-t
for i in m:
k=i[0]
k=int(k)
if i[1].find(“mu=\”http://www.baidu.com”)+1:#在mu中如果有www开头的是百度知道
print “zhidao.baidu.com”
sql = “insert into serp(url,kw, pos) values (‘%s’,’%s’, %d)” % (“zhidao.baidu.com”,key,k)
cursor.execute(sql)
elif i[1].find(“mu=\”http”)+1:#在mu中的就是百度产品了
print i[2]
sql = “insert into serp(url,kw, pos) values (‘%s’,’%s’, %d)” % (i[2],key,k)
cursor.execute(sql)
else:
print i[3]#就是正常产品了
sql = “insert into serp(url,kw, pos) values (‘%s’,’%s’, %d)” % (i[3],key,k)
cursor.execute(sql)
t3=time.time()-t
print “serp open spend %s\ncompile pattern spend %s\nfind all results spend %s\ntotal spend %s” %(t0,t1,t2,t3)
conn.commit()
cursor.close()