实战内容:获取豆瓣TOP250电影的中英文名、港台名、导演、上映年份、电影分类以及评分,将数据存放到数据库和文件中。链接为:https://movie.douban.com/top250?start=。
爬取网页数据的方式我们在前面介绍过多种,下面来进行数据的爬取。
import re import requests from bs4 import BeautifulSoup for i in range(0,2): headers = {#这里模拟浏览器进行访问 'user-agent': 'Mozilla/5.0 (Windows NT 6.1; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/52.0.2743.82 Safari/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)
输出结果为:
<!DOCTYPE html> <html class="ua-windows ua-webkit"> <head> <meta content="text/html; charset=utf-8" http-equiv="Content-Type"/> <meta content="webkit" name="renderer"/> <meta content="always" name="referrer"/> <meta content="ok0wCgT20tBBgo9_zat2iAcimtN4Ftf5ccsh092Xeyw" name="google-site-verification"> <title> 豆瓣电影 Top 250 </title> ........ </script> <!-- dae-web-movie--default-759d9f45f7-b69fc--> <script>_SPLITTEST=''</script> </link></link></body> </html>
这里我们使用Python中的hashlib模块中的mad5()函数,检查代码如下,如果大家是刚刚爬取到的数据,可以省略这一步。
MD5为计算机安全领域常用的一种加密算法。
import hashlib def vertifyupdate(html): md5 = hashlib.md5() md5.update(html.encode(encoding = 'utf-8')) md5code = md5.hexdigest() print(md5code) old_html = '' htlm_name = 'gp.txt' if os.path.exists(htlm_name): with open(htlm_name,'r',encoding='utf-8') as f: old_html = f.read() if md5code == old_html: print('数据未更新') return False else: with open(htlm_name,'w',encoding='utf-8') as f: f.write(md5code) print('数据更新了') return True
这个函数需要导入hashlib模块,然后创建一个md5的对象,把当前页面的信息传入,通过使用updata()方法对传入的数据进行MD5运算。
然后使用if语句判断文件是否存在,如果存在就读取其中的MD5码,再通过判断两次的MD5码是否相同,如果一样就表示没有更新,反之则进行了更新,把新的MD5码传到文件中。
爬取数据是我们要做的第一步,如果数据存放了很久再进行使用则需要进行检测,这都是相对简单的步骤,比较麻烦的就在于如何去获取到更精准的数据,下一节我们来数据分析。
本文固定URL:https://www.dotcpp.com/course/328