#! /usr/bin/env python #coding='utf-8'
import urllib,urllib2 from bs4 import BeautifulSoup as bs import socket import time,requests from time import sleep import MySQLdb import sys,random
reload(sys) sys.setdefaultencoding('utf-8')
conn = MySQLdb.connect(host="localhost",user="root",passwd="psw",charset="UTF8") conn.select_db('moviedownload') cur=conn.cursor() cur.execute("""select * from movie_type_douban """) conn.commit()
tag_list=[] for i in cur.fetchall(): for j in range(0,500,20): tag_list.append('http://movie.douban.com/tag/' + i[0] +'?start=' + str(j) +'&type=T')
for url in tag_list: try: r = requests.get(url) tr = bs(urllib.urlopen(url).read().decode("utf-8","ignore")).find("div",{"id":"subject_list"}).findAll("tr",{"class":"item"}) list = [] for div in tr: movie_name = div.find("div").find("a").get_text() # movie_name movie_score = float(div.find("div").find("span",{"class":"rating_nums"}).get_text()) # movie_score movie_url = div.find("div").find("a")["href"] value= (movie_url,movie_name.encode("utf-8"),movie_score,time.strftime("%Y-%m-%d %H:%M:%S",time.localtime(time.time()))) list.append(value) cur2=conn.cursor() cur2.executemany("""insert into movie_url_douban values(%s,%s,%s,%s)""",list) print "Total insert "+ str(len(list)) + " movies!" tr.decompose() time.sleep(random.randint(1,10)*0.1+1) except: print url+ " erro!" time.sleep(random.randint(1,10)*0.1+1) continue conn.close()
访问太频繁,豆瓣把你加入黑名单了<divclass="ref">
这应该是豆瓣的防止恶意访问机制。
你可以试一下,如果在一直点击豆瓣的一个相同功能链接,不久就会弹出输入验证码的界面,它会认为你是“机器”,然后向你求证你是否是人类(汗颜),所以,你肯定是遇到验证码页面然后再也进行不下去了。
同时,豆瓣应该还有一种IP的限制,如果你遇到的验证码页面较多(就是说你比较像是一个“机器人”),那你以后就会“更快”的遇到验证码。所以,不出所料的话,你再去刷获取的信息会更少。
曾经我在豆瓣的fm听歌,因为切歌太快,就直接让我证明我不是机器人。。。。<aclass='referer'target='_blank'>@RoyChen@<atarget="_blank"rel="nofollow">多萨穆大叔<spanstyle="color:#666666;font-family:微软雅黑,Verdana,sans-serif,宋体;font-size:12px;line-height:normal;background-color:#FFFFFF;"> 像这种防止机器人的机制,是如何做到的〉?本来就是,你主人家的东西要有做蜘蛛的风格好不好,你看看人家的roboot是怎么写的要延迟2秒访问一次。我设置了1+ranint,应该有够2秒吧<divclass="ref">版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。