豆瓣电影收集记
<div class="ce-block ce-block--focused" data-id="bjpknyioed" ><div class="ce-block__content">
<div class="ce-paragraph cdx-block ce-paragraph--left">不知何时许萌生了一个念头,老想着做一个电影站,适合自己、朋友方便找一些经典或最新热门的电影。</div>
</div>
</div><div class="ce-block ce-block--focused" data-id="cNfvfiIUb7" >
<div class="ce-block__content">
<div class="ce-paragraph cdx-block ce-paragraph--left">像那些专业采集电影的程序,我却一点也看不上~!所以,第一步我先开始试着把豆瓣电影资料库给扒下来!</div>
</div>
</div><div class="ce-block ce-block--focused" data-id="-38DsEFtIe" >
<div class="ce-block__content">
<div class="ce-paragraph cdx-block ce-paragraph--left">以下是收集豆瓣电影时,遇到一些问题:</div>
</div>
</div><div class="ce-block ce-block--focused" data-id="4wuxnujJbs" >
<div class="ce-block__content">
<div class="ce-paragraph cdx-block ce-paragraph--left">Q: 为什么不使用 豆瓣 API ?</div>
</div>
</div><div class="ce-block ce-block--focused" data-id="MPEkHkmrtx" >
<div class="ce-block__content">
<div class="ce-paragraph cdx-block ce-paragraph--left">A: 我在翻阅 豆瓣 API 文档时,发现的问题:</div>
</div>
</div><div class="ce-block ce-block--focused" data-id="QfVUgEAwZa" >
<div class="ce-block__content">
<div class="ce-paragraph cdx-block ce-paragraph--left">1. 不需要授权公开api可以使用http,参数里面如果不包含apikey的话,限制单ip每分钟10次,带的话每分钟40次</div>
</div>
</div><div class="ce-block ce-block--focused" data-id="gB38BtAthX" >
<div class="ce-block__content">
<div class="ce-paragraph cdx-block ce-paragraph--left">(也就是说,每分钟仅能访问40次[实际测试,当我几分钟内访问几百次左右的时候,授权就禁止了] )</div>
</div>
</div><div class="ce-block ce-block--focused" data-id="GaGlC3igcn" >
<div class="ce-block__content">
<div class="ce-paragraph cdx-block ce-paragraph--left">解决方法:可以尝试多申请些应用,获得更多的APIKEY,在多线程访问时,替换不同的APIKEY即可!</div>
</div>
</div><div class="ce-block ce-block--focused" data-id="5tvtZEkzGZ" >
<div class="ce-block__content">
<div class="ce-paragraph cdx-block ce-paragraph--left">2. 豆瓣 API 内容较少,不适合我收集。例如:</div>
</div>
</div><div class="ce-block ce-block--focused" data-id="D_auoPuBu4" >
<div class="ce-block__content">
<div class="ce-paragraph cdx-block ce-paragraph--left">通过 IMDb 来收集:<a href="https://api.douban.com/v2/movie/imdb/tt2017561" target="_blank" rel="noopener noreferrer">https://api.douban.com/v2/movie/imdb/tt2017561</a></div>
</div>
</div><div class="ce-block ce-block--focused" data-id="-BBP77iT-w" >
<div class="ce-block__content">
<div class="ce-paragraph cdx-block ce-paragraph--left">(你会发现内容会出奇的少,收集一次之后,会面临重复收集同一资料的补充性)</div>
</div>
</div><div class="ce-block ce-block--focused" data-id="EpRnzR5QkX" >
<div class="ce-block__content">
<div class="ce-paragraph cdx-block ce-paragraph--left">那么接下来,开始直接访问 豆瓣电影(<a href="http://movie.douban.com/" target="_blank" rel="noopener noreferrer">http://movie.douban.com</a>),首先是查看网站上的一系列链接以及分类等,再让我们开始下一轮的收集;</div>
</div>
</div><div class="ce-block ce-block--focused" data-id="HeSJRPv-Uv" >
<div class="ce-block__content">
<div class="ce-paragraph cdx-block ce-paragraph--left">分类是以标签模式来获取电影列表的(如:电影类型、国家地区、导演演员以及上映年代等方式),那么通过什么方式才能以最快的速度获取到最多的资料而且重复性最少呢?!</div>
</div>
</div><div class="ce-block ce-block--focused" data-id="shtgDe0YoC" >
<div class="ce-block__content">
<div class="ce-paragraph cdx-block ce-paragraph--left">无疑,答案是:国家或上映年代~首先,我选择了上映年代~!下面接着分析:</div>
</div>
</div><div class="ce-block ce-block--focused" data-id="J7iD1CSmjj" >
<div class="ce-block__content">
<div class="ce-paragraph cdx-block ce-paragraph--left">那么接下来,你会问:难道你要从第一部电影开始收集么?</div>
</div>
</div><div class="ce-block ce-block--focused" data-id="iunsawNMha" >
<div class="ce-block__content">
<div class="ce-paragraph cdx-block ce-paragraph--left">科普一下,人类史上第一部电影是:郎德海花园场景,据说只有短短的2秒之久,1888年上映!</div>
</div>
</div><div class="ce-block ce-block--focused" data-id="ujWsRh24VI" >
<div class="ce-block__content">
<div class="ce-paragraph cdx-block ce-paragraph--left">也就是说,我需要从标签:1888-2015 一直遍历过来么?当然,谁这么做,谁就2了~!</div>
</div>
</div><div class="ce-block ce-block--focused" data-id="UKtxGJbz5A" >
<div class="ce-block__content">
<div class="ce-paragraph cdx-block ce-paragraph--left">首先对于,很遥远的年代我会寻找出一个新标签,如: 1880s,1890s,1900s …</div>
</div>
</div><div class="ce-block ce-block--focused" data-id="rkl1RNLVmC" >
<div class="ce-block__content">
<div class="ce-paragraph cdx-block ce-paragraph--left">当然,这种方法适应较少的分页: <a href="http://movie.douban.com/tag/1900s" target="_blank" rel="noopener noreferrer">http://movie.douban.com/tag/1900s</a></div>
</div>
</div><div class="ce-block ce-block--focused" data-id="j3z8LkYIF9" >
<div class="ce-block__content">
<div class="ce-paragraph cdx-block ce-paragraph--left">如果,到了,2010s:<a href="http://movie.douban.com/tag/2010s" target="_blank" rel="noopener noreferrer">http://movie.douban.com/tag/2010s</a> (你会发现,分页很多很多了)</div>
</div>
</div><div class="ce-block ce-block--focused" data-id="46yNOYu1u9" >
<div class="ce-block__content">
<div class="ce-paragraph cdx-block ce-paragraph--left">估计,有细心的同学就会发现,点击 第100页,内容就突然消失了:<a href="http://movie.douban.com/tag/2010s?start=1980&type=T" target="_blank" rel="noopener noreferrer">http://movie.douban.com/tag/2010s?start=1980&type=T</a></div>
</div>
</div><div class="ce-block ce-block--focused" data-id="MwjFz6-RW5" >
<div class="ce-block__content">
<div class="ce-paragraph cdx-block ce-paragraph--left">接着,有经验的同学就会试着这样查询:<a href="http://movie.douban.com/tag/2010s?start=980&type=T" target="_blank" rel="noopener noreferrer">http://movie.douban.com/tag/2010s?start=980&type=T</a></div>
</div>
</div><div class="ce-block ce-block--focused" data-id="ckGlNH7rQM" >
<div class="ce-block__content">
<div class="ce-paragraph cdx-block ce-paragraph--left">而,第51页,内容会接着消失了: <a href="http://movie.douban.com/tag/2010s?start=1000&type=T" target="_blank" rel="noopener noreferrer">http://movie.douban.com/tag/2010s?start=1000&type=T</a></div>
</div>
</div><div class="ce-block ce-block--focused" data-id="O1Ms64ZOH4" >
<div class="ce-block__content">
<div class="ce-paragraph cdx-block ce-paragraph--left">有人可能以为只是个别现象,又接着试其他标签:<a href="http://movie.douban.com/tag/2000s?start=1000&type=T" target="_blank" rel="noopener noreferrer">http://movie.douban.com/tag/2000s?start=1000&type=T</a></div>
</div>
</div><div class="ce-block ce-block--focused" data-id="eRm3basNSt" >
<div class="ce-block__content">
<div class="ce-paragraph cdx-block ce-paragraph--left">啊哈,第51页又没了,第50页呢:<a href="http://movie.douban.com/tag/2000s?start=980&type=T" target="_blank" rel="noopener noreferrer">http://movie.douban.com/tag/2000s?start=980&type=T</a></div>
</div>
</div><div class="ce-block ce-block--focused" data-id="7b3MrI2CwW" >
<div class="ce-block__content">
<div class="ce-paragraph cdx-block ce-paragraph--left">嗯,这时我们就可以下定论了,豆瓣的确做限制了,按照每页20条数据,20 * 50 = 1000 条数据</div>
</div>
</div><div class="ce-block ce-block--focused" data-id="W6ONEILr-y" >
<div class="ce-block__content">
<div class="ce-paragraph cdx-block ce-paragraph--left">也就是说: LIMIT start , 1000</div>
</div>
</div><div class="ce-block ce-block--focused" data-id="3G8vUsDKKz" >
<div class="ce-block__content">
<div class="ce-paragraph cdx-block ce-paragraph--left">那么电影列表问题的解决方法:当 超过 51页内容时,可以试着按照 国家+年代 或者 电影类型+年代 这类细分方法继续放大精确电影列表;</div>
</div>
</div><div class="ce-block ce-block--focused" data-id="tX4cxTJ0pw" >
<div class="ce-block__content">
<div class="ce-paragraph cdx-block ce-paragraph--left">电影列表问题解决之后,就可以采集电影内容了,当N线程访问时,你会发现用不了几分钟,就禁止访问(HTTP 403等)了!</div>
</div>
</div><div class="ce-block ce-block--focused" data-id="TkrasjlGjI" >
<div class="ce-block__content">
<div class="ce-paragraph cdx-block ce-paragraph--left">后来,Google 之后,发现了问题是,豆瓣以为你是水军~ 屏蔽访问了,解决方法是:</div>
</div>
</div><div class="ce-block ce-block--focused" data-id="vboW3L_B_Q" >
<div class="ce-block__content">
<div class="ce-paragraph cdx-block ce-paragraph--left">Cookies 增加一个:bid=”aABbCcdD”,bid=”随机值”。即可解决屏蔽访问,可以是每访问一次换一个Cookies,或者多线程每个都有一个Cookies,并且在被禁止访问时替换一个Cookies,将失败地址重新读取一次,继续往下爬!</div>
</div>
</div><style type="text/css">
.ce-block {
margin-bottom: 20px;
}
.ce-block__content,.ce-toolbar__content {
/* max-width:calc(100% - 50px) */
margin-left: auto;
margin-right: auto;
}
.ce-paragraph {
line-height: 1.6em;
outline: none;
text-indent: 2em;
font-size: 16px;
}
.ce-paragraph--right {
text-align: right;
}
.ce-paragraph--center {
text-align: center;
}
.ce-paragraph--left {
text-align: left;
}
.ce-paragraph--justify {
text-align: justify;
}
.ce-paragraph-text-indent {
text-align: justify;
}
.ce-paragraph:empty::before{
content: attr(data-placeholder);
color: #707684;
font-weight: normal;
opacity: 0;
}
/** Show placeholder at the first paragraph if Editor is empty */
.codex-editor--empty .ce-block:first-child .ce-paragraph:empty::before {
opacity: 1;
}
.codex-editor--toolbox-opened .ce-block:first-child .ce-paragraph:empty::before,
.codex-editor--empty .ce-block:first-child .ce-paragraph:empty:focus::before {
opacity: 0;
}
.ce-paragraph p:first-of-type{
margin-top: 0;
}
.ce-paragraph p:last-of-type{
margin-bottom: 0;
}
.svg-icon {
width: 1em;
height: 1em;
}
.svg-icon path,
.svg-icon polygon,
.svg-icon rect {
fill: #4691f6;
}
.svg-icon circle {
stroke: #4691f6;
stroke-width: 1;
}
</style><style type="text/css">
.inline-code {
background: rgba(250, 239, 240, 0.78);
color: #b44437;
padding: 3px 4px;
border-radius: 5px;
margin: 0 1px;
font-family: inherit;
font-size: 0.86em;
font-weight: 500;
letter-spacing: 0.3px;
}
</style>
页:
[1]