爬取过程如下

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排行电影相关推荐

  1. 利用python爬取豆瓣电影top250

    利用python爬取豆瓣电影top250: 注:本内容只是作为个人学习记录 1.业务分析 进入网页https://movie.douban.com/top250 可以看见每部电影都呈现在眼前,点击电影 ...

  2. Python爬取豆瓣热映电影

    Python爬取豆瓣热映电影 # encoding: utf-8import requests from lxml import etree# 1. 将目标网站上的页面抓取下来 headers = { ...

  3. 利用python爬取豆瓣音乐_Python爬虫小白入门(七)爬取豆瓣音乐top250

    抓取目标: 豆瓣音乐top250的歌名.作者(专辑).评分和歌曲链接 使用工具: requests + lxml + xpath. 我认为这种工具组合是最适合初学者的,requests比python自 ...

  4. 利用python爬取豆瓣音乐_Python使用Beautiful Soup爬取豆瓣音乐排行榜过程解析

    节点的子节点,获取排名的代码为:li.span.text 绿色框中A节点中是歌曲的链接和图片链接,获取歌曲链接的代码为:li.a['href'] 蓝色框中是歌曲的名字.演唱者和播放次数,歌曲名是在cl ...

  5. 用Python爬取豆瓣首页所有电影名称、每部电影影评及生成词云

    1.爬取环境: window 7 Chrome 浏览器 注册豆瓣.注册超级鹰 2.安装第三方库:安装第三方库: 主程序用到的库有 import sys, time import pytesseract ...

  6. python爬取豆瓣250排行榜数据

    学习python之余,想列一个观影清单,每次上豆瓣搜太麻烦了,就爬取一个清单自己使用吧. 直接上代码: coding:"utf-8" import requests import ...

  7. python爬取豆瓣电影top250_利用python爬取豆瓣电影Top250,并把数据放入MySQL数据库...

    在学习了python基础后,一心想着快速入门爬虫,因为我就是为爬虫而学的python,所以就找了这个豆瓣电影来爬取.好了,废话不多说,进入正题 1.找到网页并分析网页结构 首先进入豆瓣电影Top250 ...

  8. Python爬取豆瓣Top250的电影

    流程图如下: 爬取网页-解析网页-存储数据到Excel和数据库中 源代码如下: 如果被豆瓣封Ip(一般被封第二天就解封了),可以自己设置代理Ip,或者自己登录账号后将Cookie放到header中. ...

  9. 利用python爬取豆瓣音乐_python爬虫之豆瓣音乐top250

    回家很久了,实在熬不住,想起来爬点数据玩一玩,之前自己笔记本是win7加ubuntu16.04双系统,本打算在ubuntu里写代码的,可是回到家ubuntu打开一直是紫屏,百度知乎方法用了也没解决,厉 ...

  10. 利用python 爬取豆瓣即将上映的电影

    仅学习交流 Upcoming.py import re import requests from doubanapi import findmovie from bs4 import Beautifu ...

最新文章

  1. eclipse jsp 写 js 代码提示_基于jsp+servlet的宠物管理系统
  2. 6月第一周国内域名解析商:万网继续抢占DNSPod份额
  3. mitmproxy抓包 | Python双篡改假请求实战(六)
  4. 在ECS系统中使用Job.WithCode
  5. 相关不是因果,哪又是啥?
  6. 为确保网络中不同计算机,在计算机网络中,为确保网络中不同计算机之间能正确地传送和接收数据,它们必须遵循一组共同的规则和约定。这些规则、约定或标准通常被称为____。...
  7. shadow Dom(shadowRoot) 访问
  8. 《初级会计电算化实用教程(金蝶KIS专业版)》一1.5 课后习题
  9. 面试java程序员hr问你职业规划,2022最新
  10. ckPlayer播放器嵌入页面时报错CKobject is not defined解决方案
  11. oracle裁员原因_Oracle中国良心裁员:首批900人,赔偿N+6
  12. 程序员“真实”日常:每天敲代码不到 1 小时
  13. python迷宫地图代码_Python机器人探测迷宫代码求助
  14. UE4 加载外部图片作为贴图
  15. c语言求n个数最大最小值,c语言 如何求n个数的最大值 最小值
  16. 用户购物(数据库)案例
  17. 地下城英雄 java_用java开发dota英雄最华丽的技能(实例讲解)
  18. 学会思考(转一位辩友的书单)
  19. 巴比特 | 元宇宙每日必读:“国产VR之光”PICO正式出海,首发避战Meta,业内人士认为,此为缓兵之计,两者终有一战...
  20. 征信 - 信用的价值

热门文章

  1. 2020-12-31
  2. 优启通如何写入linux启动盘,U盘启动盘制作工具|优启通图文详细使用教程,优启通使用教程_东坡下载手机版...
  3. 木耳炒什么好吃 木耳的做法
  4. 教师管理子系统【实验二】用况图文档
  5. PS 渐变工具(锥形【线性渐变】和圆形【径向渐变】)
  6. css 彩虹色渐变色,纯CSS实现颜色渐变效果(包含环形渐变、线性渐变、彩虹效果等)...
  7. ArcGIS地理配准(Georeferencing)详解
  8. bilibili发送弹幕
  9. shell脚本shc加密解密
  10. IT时代,不懂编程,到底能不能学前端 ,自己做网站