Python爬虫爬取数据,爬取豆瓣电影检测到ip异常请求,怎么办解决,现在爬取不了豆瓣电影了

博客分类:
该例子中未使用代理和模拟浏览器,所以会导致403Forbidden,以下已优化。
代码放在附件中。
采用settings.py的方式进行设置user agent和proxy列表
http://www.tuicool.com/articles/VRfQR3U
http://jinbitou.net//2229.html
(本文采用这种方式模拟浏览器和使用代理)
网站的反爬虫策略:
http://www.cnblogs.com/tyomcat/p/5447853.html
1、在Item中定义自己要抓取的数据(也可新建TutorialItem文件):
from scrapy.item import Item,Field
class TutorialItem(Item):
movie_name = Field()
movie_director = Field()
movie_writer = Field()
movie_roles = Field()
movie_language = Field()
movie_date = Field()
movie_long = Field()
movie_description = Field()
2、然后在spiders目录下编辑Spider.py那个文件(自己新建了DoubanSpider.py文件)
注意数据的获取:
hxs = HtmlXPathSelector(response)
movie_link = hxs.select('//*[@id="content"]/div/div[1]/div[2]/table[1]/tr/td[1]/a/@href').extract()
#coding=utf-8
import sys
#reload(sys)
#python???????????ascii
#sys.setdefaultencoding("utf-8")
from scrapy.spider import BaseSpider
from scrapy.http import Request
from scrapy.selector import HtmlXPathSelector
from ScrapyTest1.TutorialItem import TutorialItem
class DoubanSpider(BaseSpider):
name = "douban"
allowed_domains = ["movie.douban.com"]
start_urls = []
def start_requests(self):
print("=======================",os.getcwd())
file_object = open('F:\workspace-jxc\ScrapyTest1\ScrapyTest1\spiders\movie_name.txt','r')
url_head = "http://movie.douban.com/subject_search?search_text="
for line in file_object:
self.start_urls.append(url_head + line)
for url in self.start_urls:
yield self.make_requests_from_url(url)
file_object.close()
#years_object.close()
def parse(self, response):
#open("test.html",'wb').write(response.body)
hxs = HtmlXPathSelector(response)
#movie_name = hxs.select('//*[@id="content"]/div/div[1]/div[2]/table[1]/tr/td[1]/a/@title').extract()
movie_link = hxs.select('//*[@id="content"]/div/div[1]/div[2]/table[1]/tr/td[1]/a/@href').extract()
#movie_desc = hxs.select('//*[@id="content"]/div/div[1]/div[2]/table[1]/tr/td[2]/div/p/text()').extract()
print("+++++++++++++++++:",movie_link)
if movie_link:
yield Request(movie_link[0],callback=self.parse_item)
def parse_item(self,response):
hxs = HtmlXPathSelector(response)
movie_name = hxs.select('//*[@id="content"]/h1/span[1]/text()').extract()
movie_director = hxs.select('//*[@id="info"]/span[1]/span[2]/a/text()').extract()
movie_writer = hxs.select('//*[@id="info"]/span[2]/span[2]/a/text()').extract()
#爬取电影详情需要在已有对象中继续爬取
movie_description_paths = hxs.select('//*[@id="link-report"]')
print("==============================")
print(movie_name,movie_director,movie_writer)
print("==============================")
movie_description = []
for movie_description_path in movie_description_paths:
movie_description = movie_description_path.select('.//*[@property="v:summary"]/text()').extract()
#提取演员需要从已有的xPath对象中继续爬我要的内容
movie_roles_paths = hxs.select('//*[@id="info"]/span[3]/span[2]')
movie_roles = []
for movie_roles_path in movie_roles_paths:
movie_roles = movie_roles_path.select('.//*[@rel="v:starring"]/text()').extract()
#获取电影详细信息序列
movie_detail = hxs.select('//*[@id="info"]').extract()
item = TutorialItem()
item['movie_name'] = ''.join(movie_name).strip().replace(',',';').replace('\'','\\\'').replace('\"','\\\"').replace(':',';')
#item['movie_link'] = movie_link[0]
item['movie_director'] = movie_director[0].strip().replace(',',';').replace('\'','\\\'').replace('\"','\\\"').replace(':',';') if len(movie_director) & 0 else ''
#由于逗号是拿来分割电影所有信息的,所以需要处理逗号;引号也要处理,否则插入数据库会有问题
item['movie_description'] = movie_description[0].strip().replace(',',';').replace('\'','\\\'').replace('\"','\\\"').replace(':',';') if len(movie_description) & 0 else ''
item['movie_writer'] = ';'.join(movie_writer).strip().replace(',',';').replace('\'','\\\'').replace('\"','\\\"').replace(':',';')
item['movie_roles'] = ';'.join(movie_roles).strip().replace(',',';').replace('\'','\\\'').replace('\"','\\\"').replace(':',';')
#item['movie_language'] = movie_language[0].strip() if len(movie_language) & 0 else ''
#item['movie_date'] = ''.join(movie_date).strip()
#item['movie_long'] = ''.join(movie_long).strip()
#电影详情信息字符串
movie_detail_str = ''.join(movie_detail).strip()
#print movie_detail_str
movie_language_str = ".*语言:&/span& (.+?)&br&&span.*"
movie_date_str = ".*上映日期:&/span& &span property=\"v:initialReleaseDate\" content=\"(\S+?)\"&(\S+?)&/span&.*"
movie_long_str = ".*片长:&/span& &span property=\"v:runtime\" content=\"(\d+).*"
pattern_language =re.compile(movie_language_str,re.S)
pattern_date = re.compile(movie_date_str,re.S)
pattern_long = re.compile(movie_long_str,re.S)
movie_language = re.search(pattern_language,movie_detail_str)
movie_date = re.search(pattern_date,movie_detail_str)
movie_long = re.search(pattern_long,movie_detail_str)
item['movie_language'] = ""
if movie_language:
item['movie_language'] = movie_language.group(1).strip().replace(',',';').replace('\'','\\\'').replace('\"','\\\"').replace(':',';')
#item['movie_detail'] = ''.join(movie_detail).strip()
item['movie_date'] = ""
if movie_date:
item['movie_date'] = movie_date.group(1).strip().replace(',',';').replace('\'','\\\'').replace('\"','\\\"').replace(':',';')
item['movie_long'] = ""
if movie_long:
item['movie_long'] = movie_long.group(1)
print("==============================")
print(item)
print("==============================")
yield item
3、编辑pipelines.py文件,可以通过它将保存在TutorialItem中的内容写入到数据库或者文件中
(自己新建了TutorialPipeline.py文件)
注意新建的pipeline.py文件需要在settings.py中配置:
ITEM_PIPELINES = {
'ScrapyTest1.TutorialPipeline.TutorialPipeline': 1,
import json
import codecs
class TutorialPipeline(object):
def __init__(self):
print("Pipeline-")
self.file = codecs.open('data.dat',mode='wb',encoding='utf-8')
def process_item(self, item, spider):
print("Pipeline-")
print("dict(item):=======================",dict(item))
line = json.dumps(dict(item)) + '\n'
self.file.write(line)
return item
4、爬虫开始
win-》CMD-》 scrapy crwal douban
执行爬虫。
下载次数: 15
浏览: 4188562 次
来自: 一片神奇的土地
可以用,感谢!
[color=red][/color]dfsdsd[color ...
dd发的发给好友
(window.slotbydup=window.slotbydup || []).push({
id: '4773203',
container: s,
size: '200,200',
display: 'inlay-fix'python爬虫抓取豆瓣电影
时间: 00:27:41
&&&& 阅读:396
&&&& 评论:
&&&& 收藏:0
标签:抓取电影名称以及评分,并排序(代码丑炸)
1 import urllib
2 import re
3 from bs4 import BeautifulSoup
4 def get(p):
book_score=[]
while t&=p:
print "正在获取第%d页..."%k
url="https://movie.douban.com/tag/%s?start=%d&type=T"%(‘%E5%8A%A8%E7%94%BB‘,t)
res = urllib.urlopen(url)
soup = BeautifulSoup(res.read(),"html.parser")
book_div = soup.find(attrs={"class":"article"})
book_score.extend(book_div.findAll(attrs={‘class‘:‘rating_nums‘}))
book_a.extend(book_div.findAll(attrs={"style":"font-size:12"}))
return book_score,book_a
22 p=input("输入页数")
23 a,b=get((p-1)*20)
27 for i in a:
y.append((i.string))
29 for i in b:
x.append(i)
31 u=min(len(x),len(y))
32 for i in range(u):
for j in range(i+1,u):
if(y[i]&y[j]):
42 for i in range(u):
print y[i],x[i].string
爬取结果:
输入页数2正在获取第1页...正在获取第2页...9.3 瓦力(台) / 太空奇兵&威E(港)9.2 神隐少女(台) / Spirited Away9.2 优兽大都会(港) / 动物方城市(台)9.0 Tenk& no shiro Rapyuta / Laputa: Castle in the Sky8.9 冲天救兵(港) / 天外奇迹(台)8.8 狮子王3D8.8 古鲁家族(港/台) / 克鲁德一家8.8 萤火之社 / Hotarubi no mori e8.8 呼啸山城 / 霍尔的移动城堡8.8 海洋幻想曲(台) / Le Chant de la Mer8.8 甲铁城的卡巴内里 / 甲铁城的尸人8.8 魔法公主 / 幽灵少女8.7 破坏王拉尔夫 / 破坏王大冒险8.7 借物少女艾莉缇(台) / 借东西的小矮人亚莉亚蒂(港)8.7 驯龙记(港)8.7 玩转脑朋友(港) / 脑筋急转弯(台)8.6 怪兽公司(港) / 怪物公司8.6 大英雄联盟(港) / 大英雄天团(台)8.5 卑鄙的我 / 坏蛋奖门人(港)8.5 秒速五厘米 / 秒速5公分8.5 我叫坂本我最屌8.4 小羊肖恩大电影 / 超级无敌羊咩咩大电影之咩最劲(港)8.4 月亮守护者8.4 冰河世纪 / 冰原历险记8.3 魔雪奇缘(港) / 冰雪大冒险8.3 大圣归来 / 猴王8.2 海底奇兵 / 寻找尼莫8.1 卑鄙的我2 / 坏蛋奖门人2(港)8.1 The Little Prince8.0 怪兽电力公司2:怪兽大学 / 怪物公司2:怪物大学8.0 熊猫阿宝2 / 阿宝正传27.9 与森林共舞(台) / 丛林之书7.9 熊猫阿宝 / 阿宝正传7.8 熊猫阿宝3 / 阿宝正传37.7 怪物的孩子(台) / Bakemono no Ko7.5 尖叫旅社2(台) / 鬼灵精怪大酒店2(港)7.3 小黄人 / 迷你兵团(港)7.2 愤怒鸟大电影(港) / 愤怒鸟玩电影(台)7.1 恐龙大时代(港) / 美好的恐龙世界
标签:原文地址:http://www.cnblogs.com/a1225234/p/5551503.html
&&国之画&&&& &&&&chrome插件
版权所有 京ICP备号-2
迷上了代码!Python爬虫之爬豆瓣电影数据 - 简书
Python爬虫之爬豆瓣电影数据
0x000 前言
最近和公司的IOS谈起,以前我们是做移动端,现在已经和前端混为一谈了。 也是 , 做了一年多的Android ,一直都是在写界面展示数据,写交互 ,存储简单的数据 ,最主要的业务数据与业务逻辑都在服务器端,这让我有种离了服务端,我们只能玩玩单机和联机了 。作为曾经的web开发,深知服务端的重要性,我们要想做一款好的产品,没有服务端是万万不能的 , 而我们做移动端的更是要知晓一些服务端的知识 。
我有一个梦想,做一款属于自己的产品 ,但苦于没有足够的数据,于是就开始了我的Python爬虫之旅 。(如果有时间,我会写如何从零收集数据--&服务器端的建立 --& 客户端的编写 , 一整套教程)
0x001 Python基础
Python是一门很简洁的语言 , 因为市面上介绍Python语法的教程很多 , 大多数都很好 ,我这里就不啰嗦了 , 下面贴出我看过的网站:
0x002 网络爬虫
网络爬虫是一个自动提取网页的程序,它为搜索引擎从万维网上下载网页,是搜索引擎的重要组成。传统爬虫从一个或若干初始网页的URL开始,获得初始网页上的URL,在抓取网页的过程中,不断从当前页面上抽取新的URL放入队列,直到满足系统的一定停止条件。[来自百度]
我们通过URL让爬虫来爬取我们想要的内容 , 根据我们的规则进行深入爬取 , 比如说 , 我们想要爬取正在上映的电影数据 , 并下载电影海报,其他的内容我们忽略掉,那么我们就需要根据网页内容的规则来制订,哪些内容是我们需要的,哪些是我们不需要的。
0x003 爬取豆瓣电影数据
第一步 : 打开豆瓣电影 , 分析网页结构
我们爬取的网址是 https://movie.douban.com/cinema/nowplaying/shenzhen/
,里面有一个的模块叫正在上映 , 我们就解析这个模块,其他的内容我们忽略掉。chrome(firefox)按f12查看网页结构。
我们可以用元素选择工具,选中我们要分析的数据,firebug控制台就会将选中html结构展示出来。我们通过分析 , 我们想要的数据是在一个ul标签里面,每一个li标签就是一部电影的数据,我们只需要取出里面的li中的数据即可。豆瓣的前台使用了数据绑定的技术 ,这为我们获取数据,方便了不少 ,我们直接取出li中的属性就可以将电影信息获取到了 。
第二步 : 下载网页内容
我们需要将网页中的数据提取出去 , 就需要先将网页内容下载下来,写Java程序的朋友应该知道 , 如果使用Java内置网络请求,将网页数据下载下来,那将要写多少行代码,实话说,Java的网络请求真的很不友好,幸而Java社区异常强大,涌现了一批又一批比较好用的网络请求框架,如OkHttp,liteHttp等等,大大简化了我们的工作。但是,在Python中,将一个网页数据下载下来,只需要一行 。
with request.urlopen('https://movie.douban.com/cinema/nowplaying/shenzhen/') as response:
这是Python内置的urllib下的requests对象,将下载好的二进制数据封装在response对象里面,使用readlines方法就可以将其读取出来 。
from urllib import request
from urllib import parse
# 打开链接,并得到返回值
with request.urlopen('https://movie.douban.com/cinema/nowplaying/shenzhen/') as response:
conent_list = response.readlines() # 得到一个byte类型的list
for content in conent_list:
print(content .decode()) # 因为content是byte类型,所以需要解码成str类型
虽然内置urlib可以完成我们的需求,但是我们不会用系统内置,因为还是比较麻烦,我们将使用富有盛名的requets库,虽然名字和系统内置的差不多,但是确实截然不同的库 。系统库是在urllib模块下,而requests就在requests模块下 。
安装requests
pip install requests
# url 请求地址
# headers 请求头
url = 'https://movie.douban.com/cinema/nowplaying/shenzhen/'
res = requests.get(url,headers=headers)
res.text() # 得到请求的文本内容
好戏,马上开场
第三步 : 解析网页内容
解析是使用的Python内置的Html解析器,类似Java的jsoup.jar提供的api 。都是通过遍历Html dom树来进行分析,判断需要的tag ,然后进行属性解析。Python正在强大的Html解析器是,XPath解析,也是scrapy爬虫库内置的解析器 ,当然还是有beautifulsoup 。
1.引入HTMLPaser
from html.parser import HTMLParser
2.新建解析类,继承HTMLPaser
class MoviesParser(HTMLParser):
3.overload handle_starttag方法 , 解析标签
class MoviesParser(HTMLParser):
def __init__(self):
HTMLParser.__init__(self)
# 电影列表list集合
self.movies = []
# 标签是否在li标签中的标识
self.img_into_movie = False
self.a_into_movie = False
def handle_starttag(self, tag, attrs):
# 因为属性都是key=val形式 , 所以根据属性名称取值
def _attr(attrs,attr_name):
for attr in attrs:
if attr[0] == attr_name:
return attr[1]
return None
# 取出属性值 , 根据每个Item的特征取值 ,因为有些Item的属性可能会重复 , 所以要尽量找出差异性,这样才能保证数据的准确性
if tag == 'li' and _attr(attrs,'data-title') and _attr(attrs,'data-category') == 'nowplaying':
movie = {}
movie['title'] = _attr(attrs,'data-title')
movie['score'] = _attr(attrs,'data-score')
movie['star'] = _attr(attrs,'data-star')
movie['duration'] = _attr(attrs,'data-duration')
movie['region'] = _attr(attrs,'data-region')
movie['director'] = _attr(attrs,'data-director')
movie['actors'] = _attr(attrs,'data-actors')
self.movies.append(movie)
self.img_into_movie = True
self.a_into_movie = True
#获取海报图片
if tag == 'img' and self.img_into_movie:
self.img_into_movie = False
img_src = _attr(attrs,'src')
movie = self.movies[len(self.movies) -1]
movie['poster_url'] = img_src
# 下载图片
donwload_poster_url(img_src)
# 解析a标签,提取电影详情页的Url
if tag == 'a' and self.a_into_movie:
if _attr(attrs,'data-psource') == 'title':
self.a_into_movie = False
movie_url = _attr(attrs,'href')
movie = self.movies[len(self.movies) -1]
movie['movie_url'] = movie_url
这是爬虫中最关键的部分,数据解析是保证数据正确的性的地方,解析没做好,就可能存在很多脏数据,这是我们应当避免的 。
第四步 : 下载图片
# 下载图片
def donwload_poster_url(url):
res = requests.get(url)
file_name = str.split(url,'/')[-1]
file_path = 'poster_img/' + file_name
print('download img file_path = ',file_path)
with open(file_path,'wb') as f:
f.write(res.content)
我们直接使用requests库,get图片地址,得到图片的二进制数据,再见二进制数据写入到文件中,这样我们的图片文件就下载好了。
# 使用requests爬豆瓣正在上映的电影
from html.parser import HTMLParser
import requests
class MoviesParser(HTMLParser):
def __init__(self):
HTMLParser.__init__(self)
self.movies = []
self.img_into_movie = False
self.a_into_movie = False
def handle_starttag(self, tag, attrs):
# 根据属性名称取值
def _attr(attrs,attr_name):
for attr in attrs:
if attr[0] == attr_name:
return attr[1]
return None
# 取出属性值
if tag == 'li' and _attr(attrs,'data-title') and _attr(attrs,'data-category') == 'nowplaying':
movie = {}
movie['title'] = _attr(attrs,'data-title')
movie['score'] = _attr(attrs,'data-score')
movie['star'] = _attr(attrs,'data-star')
movie['duration'] = _attr(attrs,'data-duration')
movie['region'] = _attr(attrs,'data-region')
movie['director'] = _attr(attrs,'data-director')
movie['actors'] = _attr(attrs,'data-actors')
self.movies.append(movie)
self.img_into_movie = True
self.a_into_movie = True
#获取海报图片
if tag == 'img' and self.img_into_movie:
self.img_into_movie = False
img_src = _attr(attrs,'src')
movie = self.movies[len(self.movies) -1]
movie['poster_url'] = img_src
donwload_poster_url(img_src)
if tag == 'a' and self.a_into_movie:
if _attr(attrs,'data-psource') == 'title':
self.a_into_movie = False
movie_url = _attr(attrs,'href')
movie = self.movies[len(self.movies) -1]
movie['movie_url'] = movie_url
# 下载图片
def donwload_poster_url(url):
res = requests.get(url)
file_name = str.split(url,'/')[-1]
file_path = 'poster_img/' + file_name
print('download img file_path = ',file_path)
with open(file_path,'wb') as f:
f.write(res.content)
def douban_movies(url):
#首先构建请求头 ,模拟浏览器请求头
headers = {'User-Agent':'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/56.0.2924.87 Safari/537.36'}
# # 打开链接,并得到返回值
res = requests.get(url,headers=headers)
# 创建Html解析器
moviesParser = MoviesParser()
# 解析Html数据
moviesParser.feed(res.text)
return moviesParser.movies
if __name__ == '__main__':
url_str = 'https://movie.douban.com/cinema/nowplaying/shenzhen/'
movies_res = douban_movies(url_str)
import json
json_str = json.dumps(movies_res,sort_keys=True,indent=4,separators=(',',': '))
# 打印json数据
print(json_str)
从下载数据到解析Html,只用了七十多行 ,包含了注释和空格,真是人生苦短,我用Python 。
0x004 结语
Python确实是一个比较简洁的语言,学起来也相对比较轻松,各种库应有尽有,可以作为获取数据的不二选择 。其实,解析Html 还可以简化,使用Xpath更加简洁,几行代码就可以搞定,在后续的文章中,我会逐一介绍 。
有时候感觉文字的表现力真是太弱了,特别是对于技术文章,因为涉及的多,很多时候写着写着就啰嗦了,然后删掉 。 俗话说:子不如表 , 表不如图,图不如视频 。最近关注了一个简书的作者,他做了一系列的视频,讲得挺好的,我思考着,要不要出个爬虫的视频教程 。
但留佛法在心间 , 心居道身尘世间。
声明:本文讲解的实战内容,均仅用于学习交流,请勿用于任何商业用途! 一、前言 强烈建议:请在电脑的陪同下,阅读本文。本文以实战为主,阅读过程如稍有不适,还望多加练习。 本文的实战内容有: 网络小说下载(静态网站) 优美壁纸下载(动态网站) 爱奇艺VIP视频下载 二、网络爬虫...
Python 函数式编程入门教程 - 后端 - 掘金本文为作者原创,转载请先与作者联系。同发于博客园和 SegmentFault专栏 Functional Programming 引言 Functional Programming(函数式编程)的概念最早起源于LISP,由约...
# Python 资源大全中文版 我想很多程序员应该记得 GitHub 上有一个 Awesome - XXX 系列的资源整理。[awesome-python](https://link.jianshu.com?t=https%3A%2F%2Fgithub.com%2Fvin...
Python 多线程简易入门 - 后端 - 掘金一直懒得写Python相关的文章,恰好有天需要简单的给童鞋们讲点课,仓促之余就诞生了此文. 今天本来准备全面的聊聊有关高性能并发这个话题来着,但是周末马上要来了啊.所以我就取了其中的一点来介绍,关于其他的... GitHub ...
GitHub 上有一个 Awesome - XXX 系列的资源整理,资源非常丰富,涉及面非常广。awesome-python 是 vinta 发起维护的 Python 资源列表,内容包括:Web框架、网络爬虫、网络内容提取、模板引擎、数据库、数据可视化、图片处理、文本处理、...
在暴风雨即将来临之际 窗外的车水龙马一片慌乱 暴风肆虐着 凌晨四点开始出门工作的清洁工人 比烈日下工作更为艰难 娇小的身躯抵不过台风的威力 愿暴风雨走得快些 别让鸟儿找不着家 如果这是一场洗涤 可以带走所有的烦恼的话 也许彩虹会就在你身后 如此甚好
四柱八字算命术 在古代被尊称为“帝王学”, 并在皇宫中设有“钦天监”对其进行研究, 能接触到 精准高级四柱八字算命术的人 只限于皇族中人 或是有皇帝钦点的官员。 这也就是为什么八字在中国民间流传较广,而真正的高手极少极少的原因。 后来随着国民党入驻台湾,带走了大批有声望、财...
今天因为要弄一个文件删除,改名,粘贴,拷贝的功能,于是上网查了一下,发现了一个叫PopupWindow(悬浮框),这个是类似与长按QQ聊记录的效果: (哈哈,是难看点的了!!希望大家别介意,因为都是可以根据大加喜欢的形状去做,这个只是示范) 下面就贴上我的代码吧:
提起房屋,居民们都会认为其是值钱的资产了。在我国,房地产热度一度居高不下,买房的人更是不计其数。房屋除去常规的用途以外,还可以帮助所有者获得贷款。缺钱的时候很多人想到的都是办理房产抵押贷款,那么房屋抵押贷款如何办理?今天就和融e聚(微信公众号:rongyiju360...
昨晚请教了可爱的娜娜老师关于简书下载和和使用方法,尝试尝试,谢谢!爬虫豆瓣电影评论使用代理还是被 403 了 - V2EX
爬虫豆瓣电影评论使用代理还是被 403 了
13:37:51 +08:00 &cnta
代理 IP 理论上是从网站申请的高匿代理,写的爬虫程序是判断某个 IP 被封了后换一个代理 IP 继续爬。
response=requests.get(url,proxies=proxy).text
但是之后发现爬久了之后返回的 response 是 403 的页面,不用代理 IP 也是 403,难道是发现了我自己主机的 IP 吗?(代理 IP 是可用的)
2732 次点击所在节点 &
abcbuzhiming 16:12:37 +08:00发现了你的行为是爬虫然后直接封你的代理 ip 而已,现在很多网站都有根据日志进行行为分析的能力,绝大部分人的写的爬虫行为都太机械,操作时间固定严格精确,稍微分析一下就明白操作者不是人类。
prasanta 16:22:52 +08:00豆瓣一定很气,明明有接口,还是这么多人爬
popok 16:44:24 +08:00@ 哈哈哈,干脆下次 403 页面直接提示用 api 好了
cnta 16:54:52 +08:00@ 但是我的代理 IP 换了也还是被封了,是可以认为使用的代理 IP 没有访问过豆瓣的网页的情况下也被 403 了
cnta 16:56:23 +08:00@ 接口似乎访问速率有限制吧
ericFork 16:57:15 +08:00豆瓣好可怜,好多学爬虫的新手都拿豆瓣做练手对象
cnta 16:58:38 +08:00@ 我是学数据库原理做课设想采集点数据 orz 要求百万条数据左右(本来打算生成),觉得既然如此就采集点真正有意义的数据好玩些--
kkx 17:02:36 +08:00user agent 都不加 --
cnta 17:10:05 +08:00@ 明白了,确实没加 user agent。这里面会暴露出自己用 python 请求网站的信息。应该这里和原因有很大关系,谢谢。但是奇怪的是,如果是按照这个原因来防止爬虫的话,为啥不在开始的时候就 403 呢?而是在我爬取了大概 20 分钟后,对我所有的 ip 进行 403
kkx 17:25:47 +08:00@ 达到了豆瓣的规则的 limit 了吧 这种属于最基本的 一行代码的事 实时的
有的网站有很多高级的玩法 什么 beacon 啊 javascript 执行啊 路径历史判断啊 到最后只好开一个 selenium 完全拟人操作
herozzm 17:33:32 +08:00几秒换一个代理,限制抓取频率
@ 接口没有直接抓取那么全吧
LeoEatle 19:05:16 +08:00豆瓣确实有接口,但是使用要求比较高,个人开发者现在是不开放的
dsg001 19:56:38 +08:0090%以上的爬虫 demo 都是豆瓣
cnta 20:11:21 +08:00@ 还有煎蛋妹子图
creatorYC 09:16:10 +08:00@ 还有知乎(斜眼笑)
dsg001 10:58:04 +08:00@ 好孩子不会爬妹子图
@ 知乎属于进阶爬虫
第 1 页 / 共 1 页&
这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到
上打开本讨论主题的完整版本。
是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。
is a community of developers, designers and creative people.

我要回帖

更多关于 python爬虫多页面爬取 的文章

 

随机推荐