python抓取百度结果中的排名和网址 极速版图书馆泡8个小时的成果

2019年12月12日 | 标签:

标题: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()

目前还没有任何评论.