1、任务介绍
需求分析
爬取豆瓣电影Top250的基本信息,包括电影的名称,豆瓣评分,评价数,电影概况,电影链接等。
https://movie.douban.com/top250
2、基本流程
2.1、准备工作
通过浏览器查看分析目标网页,学习编程基础规范与Java的一些区别,Python没有主函数,需要自己去定义并判断- def main():#所有程序从这里开始执行
- print("hello")
- if __name__=="__main__": #当 当前程序执行时
- #调用函数
- main()
复制代码 2.1.1引入模块
作用就是使用模块里封装好的功能- from bs4 import BeautifulSoup#网页解析
- import re #正则表达式,进行文字匹配
- import urllib.request,urllib.error #指定URL,获取网页数据
- import xlwt #进行Excel操作
- import sqlite3 # 进行SQLite数据库操作
- #若你的Python升级到2.7.9以后,就会引入一个新特性,
- #引入了一个新特性,当使用urllib打开https的链接时,会检验一次ssl证书
- import ssl
- #全局取消证书验证(当项目对安全性问题不太重视时,推荐使用,可以全局取消证书的验证,简易方便)
- ssl._create_default_https_context = ssl._create_unverified_context
复制代码 2.1.2构建流程
- def main():
- baseurl="https://movie.douban.com/top250"#要爬取的网站的路径
- #1.爬取网页
- datalist=getData(baseurl)#将网站爬取的数据存放在datalist中
- savepath="豆瓣电影Top250.xls"#爬取的数据保存的文件名
- #3.保存数据
- saveData(datalist,savepath)#将爬取的数据保存在指定的文件内
- #爬取网页
- def getData(baseurl):
- datalist=[]
- return datalist
复制代码 2.2、获取数据
通过HTTP库向目标站点发起请求,请求可以包含额外的header等信息,如果服务器能正常响应,会得到一个Response,便是所要获取的页面内容。伪装head得到的方法 - #爬取网页
- def getData(baseurl):
- datalist=[]
- for i in range(0,10):#调用获取页面信息的函数,10次
- url=baseurl+str(i*25)#baseurl就是参数start后面的值,其实就是个0
- html=askURL(url)#保存获取到的网页源码
-
- #得到指定一个URL的网页内容
- def askURL(url):
- #用户代理表示告诉豆瓣服务我们是什么类型的机器,浏览器(本质上是告诉浏览器,我们可以接受什么水平的文件内容)
- head={ #模拟浏览器头部信息,向豆瓣服务器发送消息
- "User-Agent": "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/92.0.4515.159 Safari/537.36" }
- request=urllib.request.Request(url,headers=head)#伪装成是浏览器去发出请求,防止被看出是爬虫
- html=""
- try:
- #将爬取网页的源码存放在response中(获取一个get请求)
- response = urllib.request.urlopen(request)
- html=response.read().decode("utf-8")#将response中读取到的源代码进行解码
- #print(html)
- except urllib.error.URLError as e:#访问可能出现404,或者其它错误
- if hasattr(e,"code"):
- print(e.code)
- if hasattr(e,"reason"):
- print(e.reason)
- return html
复制代码


2.3、解析内容
得到的内容可能是HTML、json等格式,可以用二面解析库,正则表达式等进行解析[code]#影片详情链接的规则findLink = re.compile(r'<a target="_blank" href="https://www.cnblogs.com/(.*?)">')#创建正则表达式,表示规则(字符窜的模式)#影片图片findImgSrc=re.compile(r' |