爬取豆瓣电影所谓的烂片

    近期学习了网络爬虫相关知识,打算将学习知识更新出来,一方面,完善自己的知识体系,另一方面,分享给大家共同学习。

网络爬取流程主要有以下3部分构成:

一、网址处理器,用来提供抓取网址对象

    本文目标抓取网页为:https://movie.douban.com/subject_search?start=%22+str(15*(i))+%22&search_text=%E7%83%82%E7%89%87&cat=1002   图1:

爬取豆瓣电影所谓的烂片_第1张图片

    在抓取网址对象前,需要对待抓取对象分析,有两种情况(1)静态数据(2)动态数据。静态数据比较容易抓取,可直接通过源代码找到所需要的数据,然后,提取标签内数据即可。动态数据在源代码找不到,是ajax生成的,需要分析ajax请求过程,找到所需要的数据,然后抓取。本文以静态数据获取为研究对象,后期会逐步更新动态数据抓取文章。

找到需要抓取网页后,下面开始:

1.右击“检查”,分析数据形式

    右击检查,选择network,点击response(response储存http请求返回的数据),查看里面是否我们所需要的数据,通过查看,确实保存着我们所需数据。图2 ,

爬取豆瓣电影所谓的烂片_第2张图片

    可知我们所需要的数据为静态数据。

2.分析网页结构

    确定好待抓取数据后,需要分析网页结构,找到数据存储位置。图3 ,

爬取豆瓣电影所谓的烂片_第3张图片

    可以看出数据储存在标签内,由于标签没有唯一性(没有办法通过class、id等直接定位所需要的标签),可通过找父节点div(class=pl2),通过class 确定了其唯一性。分析好网页结构后,下一步解析网页找到我们所需要的数据。

3.如何抓取全部数据

     抓取全部数据前,需要分析URL结构(有关url知识,可参考:http://kb.cnblogs.com/page/130970/#urlexplain),豆瓣电影烂片第一页:URL:https://movie.douban.com/subject_search?start=0%22+%22&search_text=%E7%83%82%E7%89%87&cat=1002   第二页:https://movie.douban.com/subject_search?start=15&search_text=%E7%83%82%E7%89%87&cat=1002以此类推,get请求方式下,请求参数 start,按照15倍数依次进行,因此,可构建新的模型请求url:https://movie.douban.com/subject_search?start="+str(15*(i))+"&search_text=烂片&cat=1002。

二、网页解析器,用来提取网页中我们所需要的数据

    网页解析方面,beautifulsoul功能较强大且应用较广泛(链接:https://www.crummy.com/software/BeautifulSoup/bs4/doc/index.zh.html)。上文确定了需要抓取的标签,可以用find_all方法抓取所需要标签数据,抓取结果返回一个list。图4

爬取豆瓣电影所谓的烂片_第4张图片

    确定好list后,下一步需要分析list,list[0],list[1],list[2]....等都是一条条div,下一步就是分析div,其实把div也可以当成一个list,发现需要抓取的数据在div-list第二个数值,也就是div-list[1],确定好需要抓取的数据后,最后写一个for循环,遍历一下。

三、存储数据

    通过遍历出所需要的数据后,下一步就是存储数据,由于数据近4000条,数据量较少,本文采取txt文本存储。在存储数据时,本文建议用with open() as f: f.write( )形式存储,可以保证数据不会丢失。此外,在open( )时,python2和python 3不同,python 3需要在加上enconding="utf-8"编码,python2 不需要,一般在write( )  加上encode("utf-8")

以上书数据抓取-解析-存储流程过程。具体见源代码:

#!/usr/bin/python

# -*- coding: utf-8-*-

importrequests;

frombs4importBeautifulSoup;

# 获取待解析的网页

foriinrange(0,1):

url ="https://movie.douban.com/subject_search?start="+str(15*(i))+"&search_text=烂片&cat=1002"

response = requests.get(url).text

# 解析网页,找出需要的数据

bsobject = BeautifulSoup(response,"html.parser");

re = bsobject.find_all("div",class_="pl2");

printre;

foriinre:

j = i.contents[1].text.strip("\n").replace(" ","") +"\n"

withopen("a.txt","a+")asf:

f.write(j.encode("utf-8"))

    :近期51python社区博客网站即将上线,会分享python、PHP、mysql等方面的知识,4月中旬,产品类、运营类相关公众号也即将上线,欢迎关注。

                                                                          END

如果,您喜欢我的文章或者有什么疑问,都可以加我微信:15005417866,也可以关注我


爬取豆瓣电影所谓的烂片_第5张图片

你可能感兴趣的:(爬取豆瓣电影所谓的烂片)