如何利用python爬取豆瓣250排行电影
爬取过程如下
1.获取网页URL
2.利用requests提取网页
3.解析网页数据,并利用正则表达式提取网页相关数据,并保存到datalist中
4.保存数据到excel中
用到的第三方包如下:用的是bs4+requests,用requests+xpath估计更快
import requests #用于获取网页数据 from bs4 import BeautifulSoup #用于解析网页数据 import xlwt #用于对excel表进行操作 from requests import exceptions #异常处理 import re #正则表达式
第一步,获取网页URL
在进入网页之后,通过分析网页的URL不难发现,此start对应的是每一页的第一个电影的位置start=24就是排行第24的电影
def main():base_url = "https://movie.douban.com/top250?start="#start=?没写是为了后面拼接URL用的#1.爬取网页,获取每部电影的数据保存到datalist中datalist = getData(base_url)#保存路径# 2.保存数据到excel表savepath = '豆瓣250.xls'saveData(datalist,savepath)#保存
我们首先定义base_url = "https://movie.douban.com/top250?start="
start后面空着是为了拼接URL
第二步,利用requests提取网页
def askURL(url):headers = {"User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:77.0) Gecko/20100101 Firefox/77.0"}try:html = requests.get(url, headers=headers).textexcept exceptions.Timeout as e:print(e.reason)except exceptions.HTTPError as e:print(e.reason)return html
第三步,解析网页数据,并利用正则表达式提取网页相关数据,并保存到datalist中
通过分析网页,我们发现有以下几个部分需要爬取(确定所需要爬取的内容):
("电影详情链接","图片链接","影片中文名","影片外国名","评分","评价数","概况","相关信息")
电影详情链接:
我们可以发现正是a标签里面的href
图片链接:
对应的是img标签
影片中文名:
对应的span标签
影片外国名:
也是span标签
评分:
也是span标签
评价数:
同理也是
概况:
概况也是span标签
相关信息:
是p标签
由以上分析可以写出提取信息的正则表达式如下:
#表达式 .* 的意思很好理解,就是单个字符匹配任意次,即贪婪匹配。
#表达式 .*? 是满足条件的情况只匹配一次,即懒惰匹配
#获取影片链接
findLink = re.compile(r'<a href="(.*?)">')
#获取图片的SRC
findimgSrc = re.compile(r'<img.*src="(.*?)"',re.S)#re.s表示忽略换行符
获取电影名
findTitle = re.compile(r'<span class="title">(.*)</span>')
#获取评分数
findRating = re.compile(r'<span class="rating_num" property="v:average">(.*)</span>')
#获取评价数
findJudge = re.compile(r'<span>(\d*)人评价</span>')
#获取概述
findInq = re.compile(r'<span class="inq">(.*)</span>')
#获取相关信息
findBd = re.compile(r'<p class="">(.*?)</p>',re.S)
getData函数如下:
def getData(baseurl):datalist = []#根据左闭右开,遍历10页for i in range(0,10):#拼接URLurl = baseurl+str(i*25)#由于每一页开头是0,25,50.....所以乘25html = askURL(url)# print(html)#每个页面soup = BeautifulSoup(html,"html.parser")#因为电影相关信息是保存在class="item"这个中,所以只需要查找到div中的class="item"的即可for item in soup.find_all('div',class_="item"):data = [] #用于保存一部电影的完整信息item = str(item)#找到详情链接link = re.findall(findLink,item)[0]#链接只有一个data.append(link)#将Link保存到data列表中#找到图片srcimgSrc = re.findall(findimgSrc,item)[0]data.append(imgSrc)#找到电影名title = re.findall(findTitle,item)#由于电影有中文名和英文名,所以需要分隔开来if(len(title) == 2):ctitle = title[0]#保存中文名到ctitle中data.append(ctitle)etitle = title[1].replace("/","")#字符串处理,并把英文名保存到etitle中data.append(etitle)else:#如果没有英文名,直接加进去就行data.append(title[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(" ")#去掉br分隔符bd = re.findall(findBd,item)[0]bd = re.sub('<br(\s+)?>(\s+)?'," ",bd)bd = re.sub('/'," ",bd)data.append(bd.strip())#去掉前后空格#把一部电影的所有存在data中的作为一个元组插入到datalist中datalist.append(data)return datalist
第四步,保存数据到excel中
def saveData(datalist,savepath):#备用列表,用于存放datalist中的某一条数据data = []workbook = xlwt.Workbook(encoding="utf-8",style_compression=0)worksheet = workbook.add_sheet('豆瓣电影top250',cell_overwrite_ok=True)col = ("电影详情链接","图片链接","影片中文名","影片外国名","评分","评价数","概况","相关信息")#在excel表第一行写入每一列应该保存的是什么for i in range(0,8):worksheet.write(0,i,col[i])#一共爬取了250条数据,依次遍历放入excel中for i in range(0,250):print("第%d条数据写入完毕!"%(i+1))data = datalist[i]for j in range(0,8):#写入数据worksheet.write(i+1,j,data[j])workbook.save(savepath)
全部过程代码如下:
#-*- codeing = utf-8 -*-
#@Time: 14:27
#@Author:long
#@File:spider.py
#@Software:PyCharmimport requests
from bs4 import BeautifulSoup
import xlwt
from requests import exceptions
import re
#表达式 .* 的意思很好理解,就是单个字符匹配任意次,即贪婪匹配。
#表达式 .*? 是满足条件的情况只匹配一次,即懒惰匹配
#re.compile指的是定义模式
findLink = re.compile(r'<a href="(.*?)">')
findimgSrc = re.compile(r'<img.*src="(.*?)"',re.S)
findTitle = re.compile(r'<span class="title">(.*)</span>')
findRating = re.compile(r'<span class="rating_num" property="v:average">(.*)</span>')
findJudge = re.compile(r'<span>(\d*)人评价</span>')
findInq = re.compile(r'<span class="inq">(.*)</span>')
findBd = re.compile(r'<p class="">(.*?)</p>',re.S)def main():base_url = "https://movie.douban.com/top250?start="#1.爬取网页,获取每部电影的数据保存到datalist中datalist = getData(base_url)#保存路径# 2.保存数据到excel表savepath = '豆瓣250.xls'saveData(datalist,savepath)
def getData(baseurl):datalist = []for i in range(0,10):url = baseurl+str(i*25)html = askURL(url)# print(html)#解析每个页面soup = BeautifulSoup(html,"html.parser")for item in soup.find_all('div',class_="item"):data = [] #用于保存一部电影的完整信息item = str(item)#找到详情链接link = re.findall(findLink,item)[0]data.append(link)#找到图片srcimgSrc = re.findall(findimgSrc,item)[0]data.append(imgSrc)#找到电影名title = re.findall(findTitle,item)if(len(title) == 2):ctitle = title[0]data.append(ctitle)etitle = title[1].replace("/","")#字符串处理data.append(etitle)else:data.append(title[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(" ")#去掉brbd = re.findall(findBd,item)[0]bd = re.sub('<br(\s+)?>(\s+)?'," ",bd)bd = re.sub('/'," ",bd)data.append(bd.strip())#去掉前后空格datalist.append(data)return datalistdef askURL(url):headers = {"User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:77.0) Gecko/20100101 Firefox/77.0"}try:html = requests.get(url, headers=headers).textexcept exceptions.Timeout as e:print(e.reason)except exceptions.HTTPError as e:print(e.reason)return htmldef saveData(datalist,savepath):data = []workbook = xlwt.Workbook(encoding="utf-8",style_compression=0)worksheet = workbook.add_sheet('豆瓣电影top250',cell_overwrite_ok=True)col = ("电影详情链接","图片链接","影片中文名","影片外国名","评分","评价数","概况","相关信息")for i in range(0,8):worksheet.write(0,i,col[i])for i in range(0,250):print("第%d条数据写入完毕!"%(i+1))data = datalist[i]for j in range(0,8):worksheet.write(i+1,j,data[j])workbook.save(savepath)if __name__ == '__main__':main()
如何利用python爬取豆瓣250排行电影相关推荐
- 利用python爬取豆瓣电影top250
利用python爬取豆瓣电影top250: 注:本内容只是作为个人学习记录 1.业务分析 进入网页https://movie.douban.com/top250 可以看见每部电影都呈现在眼前,点击电影 ...
- Python爬取豆瓣热映电影
Python爬取豆瓣热映电影 # encoding: utf-8import requests from lxml import etree# 1. 将目标网站上的页面抓取下来 headers = { ...
- 利用python爬取豆瓣音乐_Python爬虫小白入门(七)爬取豆瓣音乐top250
抓取目标: 豆瓣音乐top250的歌名.作者(专辑).评分和歌曲链接 使用工具: requests + lxml + xpath. 我认为这种工具组合是最适合初学者的,requests比python自 ...
- 利用python爬取豆瓣音乐_Python使用Beautiful Soup爬取豆瓣音乐排行榜过程解析
节点的子节点,获取排名的代码为:li.span.text 绿色框中A节点中是歌曲的链接和图片链接,获取歌曲链接的代码为:li.a['href'] 蓝色框中是歌曲的名字.演唱者和播放次数,歌曲名是在cl ...
- 用Python爬取豆瓣首页所有电影名称、每部电影影评及生成词云
1.爬取环境: window 7 Chrome 浏览器 注册豆瓣.注册超级鹰 2.安装第三方库:安装第三方库: 主程序用到的库有 import sys, time import pytesseract ...
- python爬取豆瓣250排行榜数据
学习python之余,想列一个观影清单,每次上豆瓣搜太麻烦了,就爬取一个清单自己使用吧. 直接上代码: coding:"utf-8" import requests import ...
- python爬取豆瓣电影top250_利用python爬取豆瓣电影Top250,并把数据放入MySQL数据库...
在学习了python基础后,一心想着快速入门爬虫,因为我就是为爬虫而学的python,所以就找了这个豆瓣电影来爬取.好了,废话不多说,进入正题 1.找到网页并分析网页结构 首先进入豆瓣电影Top250 ...
- Python爬取豆瓣Top250的电影
流程图如下: 爬取网页-解析网页-存储数据到Excel和数据库中 源代码如下: 如果被豆瓣封Ip(一般被封第二天就解封了),可以自己设置代理Ip,或者自己登录账号后将Cookie放到header中. ...
- 利用python爬取豆瓣音乐_python爬虫之豆瓣音乐top250
回家很久了,实在熬不住,想起来爬点数据玩一玩,之前自己笔记本是win7加ubuntu16.04双系统,本打算在ubuntu里写代码的,可是回到家ubuntu打开一直是紫屏,百度知乎方法用了也没解决,厉 ...
- 利用python 爬取豆瓣即将上映的电影
仅学习交流 Upcoming.py import re import requests from doubanapi import findmovie from bs4 import Beautifu ...
最新文章
- eclipse jsp 写 js 代码提示_基于jsp+servlet的宠物管理系统
- 6月第一周国内域名解析商:万网继续抢占DNSPod份额
- mitmproxy抓包 | Python双篡改假请求实战(六)
- 在ECS系统中使用Job.WithCode
- 相关不是因果,哪又是啥?
- 为确保网络中不同计算机,在计算机网络中,为确保网络中不同计算机之间能正确地传送和接收数据,它们必须遵循一组共同的规则和约定。这些规则、约定或标准通常被称为____。...
- shadow Dom(shadowRoot) 访问
- 《初级会计电算化实用教程(金蝶KIS专业版)》一1.5 课后习题
- 面试java程序员hr问你职业规划,2022最新
- ckPlayer播放器嵌入页面时报错CKobject is not defined解决方案
- oracle裁员原因_Oracle中国良心裁员:首批900人,赔偿N+6
- 程序员“真实”日常:每天敲代码不到 1 小时
- python迷宫地图代码_Python机器人探测迷宫代码求助
- UE4 加载外部图片作为贴图
- c语言求n个数最大最小值,c语言 如何求n个数的最大值 最小值
- 用户购物(数据库)案例
- 地下城英雄 java_用java开发dota英雄最华丽的技能(实例讲解)
- 学会思考(转一位辩友的书单)
- 巴比特 | 元宇宙每日必读:“国产VR之光”PICO正式出海,首发避战Meta,业内人士认为,此为缓兵之计,两者终有一战...
- 征信 - 信用的价值
热门文章
- 2020-12-31
- 优启通如何写入linux启动盘,U盘启动盘制作工具|优启通图文详细使用教程,优启通使用教程_东坡下载手机版...
- 木耳炒什么好吃 木耳的做法
- 教师管理子系统【实验二】用况图文档
- PS 渐变工具(锥形【线性渐变】和圆形【径向渐变】)
- css 彩虹色渐变色,纯CSS实现颜色渐变效果(包含环形渐变、线性渐变、彩虹效果等)...
- ArcGIS地理配准(Georeferencing)详解
- bilibili发送弹幕
- shell脚本shc加密解密
- IT时代,不懂编程,到底能不能学前端 ,自己做网站