一个栏目下的内容达到10万条,但百度站长工具显示该栏目只收录了四五千条,意味着大量的内容被百度视为重复或垃圾内容,这种内容要么就是网站做改造,做专题,吸引蜘蛛,争取让这些内容被收录,或者把他们删除掉。
如果要把这些未被收录的删除掉,同时保留那些已经被收录的,就需要批量查询这10万网址哪些已收录,哪些未收录。
python批量查询网址是否被百度收录代码如下:
.
#coding=utf-8
import urllib,time
import StringIO
import pycurl
def get_baidu_html(url):
html = StringIO.StringIO()
c = pycurl.Curl()
myurl="http://www.baidu.com/s?word=%s"%url
c.setopt(pycurl.URL, myurl)
c.setopt(pycurl.WRITEFUNCTION, html.write)
c.setopt(pycurl.FOLLOWLOCATION, 1)
c.setopt(pycurl.MAXREDIRS, 5)
c.setopt(pycurl.CONNECTTIMEOUT, 2000)
c.setopt(pycurl.TIMEOUT, 2000)
c.setopt(pycurl.USERAGENT, "Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; SV1; .NET CLR 1.1.4322)")
ret = c.perform()
ret = html.getvalue()
if "很抱歉,没有找到与" in ret:
print url,'未收录'
f = open('/root/no.txt','a')
f.write(url+'\n')
f.close()
return 1
elif "百度为您找到相关结果约" in ret:
print url,'已收录'
return 0
elif "http://verify.baidu.com" in ret:
print "出现验证码"
time.sleep(1800)
return
if __name__=="__main__":
urls=open('/root/url.txt','r').readlines()
oknum=0
lostnum=0
for url in urls:
if get_baidu_html(url.strip()):
oknum+=1
else:
lostnum+=1
print '收录率:',float(oknum)/(oknum+lostnum)*100,'%'
print "收录数据共 %s 条"%oknum
print "未收录数据共 %s 条"% lostnum
以上代码含义是,从/root/url.txt文件中(一行一个url)读取网址,查询结果如果是未收录就依次存在/root/url.txt文件里(一行一个url)。