实战内容:获取豆瓣TOP250电影的中英文名、港台名、导演、上映年份、电影分类以及评分,将数据存放到数据库和文件中。链接为:https://movie.douban.com/top250?start=。
爬取网页数据的方式我们在前面介绍过多种,下面来进行数据的爬取。
importreimportrequestsfrombs4importBeautifulSoupforiinrange(0,2):headers={#这里模拟浏览器进行访问'user-agent':'Mozilla/5.0(WindowsNT6.1;Win64;x64)AppleWebKit/537.36(KHTML,likeGecko)Chrome/52.0.2743.82Safari/537.36','Host':'movie.douban.com'}res='https://movie.douban.com/top250?start='+str(25*i)#25次r=requests.get(res,headers=headers,timeout=10)#设置超时时间soup=BeautifulSoup(r.text,html.parser)#设置解析方式,也可以print(soup)
输出结果为:
<!DOCTYPEhtml><htmlclass=ua-windowsua-webkit><head><metacontent=text/html;charset=utf-8http-equiv=Content-Type/><metacontent=webkitname=renderer/><metacontent=alwaysname=referrer/><metacontent=ok0wCgT20tBBgo9_zat2iAcimtN4Ftf5ccsh092Xeywname=google-site-verification><title>豆瓣电影Top250</title>........</script><!--dae-web-movie--default-759d9f45f7-b69fc--><script>_SPLITTEST=''</script></link></link></body></html>
这里我们使用Python中的hashlib模块中的mad5()函数,检查代码如下,如果大家是刚刚爬取到的数据,可以省略这一步。
MD5为计算机安全领域常用的一种加密算法。
importhashlibdefvertifyupdate(html):md5=hashlib.md5()md5.update(html.encode(encoding='utf-8'))md5code=md5.hexdigest()print(md5code)old_html=''htlm_name='gp.txt'ifos.path.exists(htlm_name):withopen(htlm_name,'r',encoding='utf-8')asf:old_html=f.read()ifmd5code==old_html:print('数据未更新')returnFalseelse:withopen(htlm_name,'w',encoding='utf-8')asf:f.write(md5code)print('数据更新了')returnTrue
这个函数需要导入hashlib模块,然后创建一个md5的对象,把当前页面的信息传入,通过使用updata()方法对传入的数据进行MD5运算。
然后使用if语句判断文件是否存在,如果存在就读取其中的MD5码,再通过判断两次的MD5码是否相同,如果一样就表示没有更新,反之则进行了更新,把新的MD5码传到文件中。
爬取数据是我们要做的第一步,如果数据存放了很久再进行使用则需要进行检测,这都是相对简单的步骤,比较麻烦的就在于如何去获取到更精准的数据,下一节我们来数据分析。