python项目-爬取豆瓣top250电影信息

爬取豆瓣Top250部电影的信息(名称、排名、评价等)

准备:用浏览器查看分析网页

获取数据:通过HTTP库向目标站点发起请求,可包含额外的heard信息
如果服务器能正常响应,会得到一个response,就是获取到的网页内容

解析内容:得到的内容可能是HTML、json等格式,可以用页面解析库、正则表达式等进行解析(提取有用信息)

保存数据:将提取到的有用信息保存(文本、数据库、或特定格式)

下面代码来自Python爬虫技术5天速成(2020全新合集)
大佬讲课深入浅出,感谢!


#!/usr/bin/env python 
# -*- coding:utf-8 -*-
from bs4 import BeautifulSoup   # 网页解析,获取数据(数据拆分)
import re   # 正则表达式,文字匹配(数据提炼)
import urllib.request, urllib.error # 指定URL,获取网页数据(给网页就能爬)
import xlwt # 进行excel操作(存到excl)


def main():

    baseurl = "https://movie.douban.com/top250?start="
    # 1.爬取网页并解析数据
    datalist = getData(baseurl)

    # 2.保存数据
    savepath = ".\\豆瓣电影Top250.xls"
    saveData(datalist,savepath)

# 影片详情链接的规则
findlink = re.compile(r'', re.S)     # 创建正则表达式对象,标识规则(字符串的模式)
# 影片图片规则
findImgSrc = re.compile(r', re.S)  # re.S:让换行符包含在字符中
# 影片片名
findTitle = re.compile(r'(.*?)', re.S)
# 影片评分
findRating = re.compile(r'(.*)')
# 评价人数
findJudge = re.compile(r'(\d*)人评价', re.S)
# 概况介绍
findInq = re.compile(r'(.*?)', re.S)
# 影片相关内容(导演主演等)
findBd= re.compile(r'

(.*?)

'
, re.S) # 1.爬取网页 def getData(baseurl): """输入网址==>>返回列表数据""" datalist = [] for i in range(0,10): # 逐个遍历网址 url = baseurl + str(i*25) html = askURL(url) # 获取网页源码存到html # 2.逐一解析网页源码 soup = BeautifulSoup(html,'html.parser') # 解析网页为树结构 for item in soup.find_all('div',class_="item"): # 查找符合要求的内容形成列表 """找到属性class_="item"的所有div""" # print(item) #测试:查看电影item全部信息 data = [] # 保存一部电影的所有信息 item = str(item) # 先转化为字符串形式方便查找 # 影片详情的链接 link = re.findall(findlink,item)[0] # re库通过正则表达式查找字符串 data.append(link) # 添加链接 imgSrc = re.findall(findImgSrc,item)[0] data.append(imgSrc) # 添加图片 titles = re.findall(findTitle,item) if len(titles) == 2: # 名字可能不止一个 data.append(titles[0]) # 添加中文名 data.append(titles[1].replace("/","")) # 添加外文名(去掉/) else: data.append(titles[0]) data.append(' ') # 留空,方面后期处理统一长度 rating = re.findall(findRating,item)[0] data.append(rating) # 添加评分 judgeNum = re.findall(findJudge,item)[0] data.append(judgeNum) # 添加评价人数 inq = re.findall(findInq,item) # 影片概述(有的有有的没有) if len(inq) != 0: inq = inq[0].replace('。','') data.append(inq) else: data.append(' ') bd = re.findall(findBd,item)[0] bd = re.sub('(\s+)?'," ",bd) # 去掉多余字符 bd = re.sub('/'," ",bd) data.append(bd.strip()) # 去掉前后空格 datalist.append(data) # 把处理好的一部电影信息放到datalist return datalist # 得到一个指定URL的网页内容 def askURL(url): # 指定头部信息 # 用户代理:告诉服务器我们是什么类型的机器,浏览器(本质上是告诉服务器我们可以接受什么水平的文件内容) head = {} # 模拟浏览器头部信息,向豆瓣服务器发送消息 head['User-Agent'] = 'Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) ' \ 'Chrome/78.0.3904.108 Safari/537.36 ' requst = urllib.request.Request(url, headers=head) html = "" response = urllib.request.urlopen(requst) html = response.read().decode('utf-8') # 我们得到了这个网页的信息 return html # 3.保存数据 def saveData(datalist,savepath): """给出保存路径,将数据保存""" print('开始保存。。。') book = xlwt.Workbook(encoding='utf-8') # 创建workbook对象(excle文件) sheet = book.add_sheet('豆瓣电影Top250',cell_overwrite_ok=True) # 创建工作表 col = ("电影详情链接","图片链接","影片中文名","影片外文名","评分","评价数","概况","相关信息") # 列 for i in range(0,8): sheet.write(0, i, col[i]) # 写入数据(行,列,内容) for i in range(0,250): print('第%d条'%(i+1)) data = datalist[i] for j in range(0,8): sheet.write(i+1,j,data[j]) book.save(savepath) # 保存数据表 if __name__ == "__main__": # 程序从此处开始执行(工整) # 调用函数 main()

爬取结果:
python项目-爬取豆瓣top250电影信息_第1张图片

你可能感兴趣的:(爬虫,豆瓣Top250)