一、缘由

  对于豆瓣的这个网站,记得使用了不少于三种的爬取和解析方式来进行的。今天的这种解析方式是我使用起来较为顺手,后来就更喜欢使用xpath解析,但是这两种也需要掌握。

二、代码展示

'''爬取豆瓣前50%的电影以及基本信息'''
#html和css基础
#名称、评分、评价数、电影概况、电影链接 from bs4 import BeautifulSoup #网页解析,获取数据
import re #正则表达式进行文字匹配
import urllib.request,urllib.error #制定URL,获取网页数据
import xlwt #进行Excel操作
import time def main():
baseurl="https://movie.douban.com/top250?start="
#1,获取网页
datalist=getData(baseurl)
#2.解析数据(逐一解析数据)
#3.保存数据
savepath=r"豆瓣电影top250.xls"
saveData(datalist,savepath) #获取影片链接的规则
findlink=re.compile(r'<a href="(.*?)">') #生成、创建正则表达式,表示规则(字符串模式)
#获取图片的链接
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>')
#找到概况
findTnq=re.compile(r'<span class="inq">(.*)</span>')
#找到影片的相关内容
findBd=re.compile(r'<p class="">(.*?)</p>',re.S) '''爬取网页'''
def getData(baseurl):
datalist=[] #逐一解析
for i in range(0,10):
url=baseurl+str(i*25) #调用获取页面信息的函数.10次
html=askURL(url) #保存回去哦到的网页源码
soup=BeautifulSoup(html,"html.parser")
for item in soup.find_all('div',class_="item"): #查找符合要求的字符串,形成列表。
#print(item.txt) #测试查看item全部信息
data=[] #保存一部电影的所有信息
item=str(item)
#电影的详情链接
link=re.findall(findlink,item)[0] #re库用来查找指定的字符串findlink,item link获取到影片详情的链接
data.append(link)
#添加图片的链接
imgSrc=re.findall(findImgSrc,item)[0]
data.append(imgSrc)
#添加电影名字
titles=re.findall(findtitle,item) #片名可能只有一个中文名
if len(titles)==2:
ctitle=titles[0] #添加中文名
data.append(ctitle) #添加非中文名
otitle=titles[1].replace("/","")
data.append(otitle)
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(findTnq,item)
if len(inq)!=0:
inq=inq[0].replace('。','')
data.append(inq)
else:
data.append('')
#相关内容
bd=re.findall(findBd,item)[0]
bd=re.sub('<br(\s+)?/>(\s+?)','',bd)#去掉
bd=re.sub('/','',bd) #替换
data.append(bd.strip()) #去掉前后的空格
datalist.append(data) #把处理好的一部电影信息放入到datalist
return datalist '''得到一个指定的url网页信息和内容'''
def askURL(url):
head={ #模拟浏览器头部信息,向豆瓣服务器发送信息
"User-Agent": "Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/89.0.4389.90 Safari/537.36"
} #用户代理表示告诉豆瓣我们是什么类型的机器和浏览器,本质上是告诉浏览器我们能够接受什么水平的内容
request=urllib.request.Request(url,headers=head)
html=""
try:
response=urllib.request.urlopen(request)
html=response.read().decode("utf-8")
time.sleep(1)
#print(html)
except urllib.error.URLError as e:
if hasattr(e,"code"): #判断e,里面是否有错误代码
print(e.code)
if hasattr(e,"reason"): #判断对象e是否有获取错误的原因
print(e.reason)
return html '''保存数据'''
def saveData(datalist,savepath):
book = xlwt.Workbook(encoding='utf-8') # 创建workbook对象
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("豆瓣电影Top250.xls") # 保存数据 if __name__ == '__main__': #调用函数 #ctrl+? 可以将多行代码转为注释
main()
print("爬取完毕")

re、base64的结合使用爬取豆瓣top250的更多相关文章

  1. 基础爬虫,谁学谁会,用requests、正则表达式爬取豆瓣Top250电影数据!

    爬取豆瓣Top250电影的评分.海报.影评等数据!   本项目是爬虫中最基础的,最简单的一例: 后面会有利用爬虫框架来完成更高级.自动化的爬虫程序.   此项目过程是运用requests请求库来获取h ...

  2. requests爬取豆瓣top250电影信息

    ''' 1.爬取豆瓣top250电影信息 - 第一页: https://movie.douban.com/top250?start=0&filter= - 第二页: https://movie ...

  3. Python爬虫实例:爬取豆瓣Top250

    入门第一个爬虫一般都是爬这个,实在是太简单.用了 requests 和 bs4 库. 1.检查网页元素,提取所需要的信息并保存.这个用 bs4 就可以,前面的文章中已经有详细的用法阐述. 2.找到下一 ...

  4. python3爬取豆瓣top250电影

    需求:爬取豆瓣电影top250的排名.电影名称.评分.评论人数和一句话影评 环境:python3.6.5 准备工作: 豆瓣电影top250(第1页)网址:https://movie.douban.co ...

  5. Python 爬取豆瓣TOP250实战

    学习爬虫之路,必经的一个小项目就是爬取豆瓣的TOP250了,首先我们进入TOP250的界面看看. 可以看到每部电影都有比较全面的简介.其中包括电影名.导演.评分等. 接下来,我们就爬取这些数据,并将这 ...

  6. Python-爬虫实战 简单爬取豆瓣top250电影保存到本地

    爬虫原理 发送数据 获取数据 解析数据 保存数据 requests请求库 res = requests.get(url="目标网站地址") 获取二进制流方法:res.content ...

  7. 2019-02-01 Python爬虫爬取豆瓣Top250

    这几天学了一点爬虫后写了个爬取电影top250的代码,分别用requests库和urllib库,想看看自己能不能搞出个啥东西,虽然很简单但还是小开心. import requests import r ...

  8. 爬虫学习--MOOC爬取豆瓣top250

    scrapy框架 scrapy是一套基于Twisted的异步处理框架,是纯python实现的爬虫框架,用户只需要定制开发几个模块就可以轻松实现一个爬虫,用来抓取网页内容或者各种图片. scrapy E ...

  9. 简单的爬虫例子——爬取豆瓣Top250的电影的排名、名字、评分、评论数

    爬取思路: url从网页上把代码搞下来bytes decode ---> utf-8 网页内容就是我的待匹配的字符串ret = re.findall(正则,待匹配的字符串), ret 是所有匹配 ...

  10. python爬取豆瓣top250的电影数据并存入excle

    爬取网址: https://movie.douban.com/top250 一:爬取思路(新手可以看一下) : 1:定义两个函数,一个get_page函数爬取数据,一个save函数保存数据,mian中 ...

随机推荐

  1. 解决zeal离线文档下载慢问题

    zeal简介 编程过程中难免会遇到不会用的关键字和方法,对我而言,在windows下,我使用Zeal这个软件进行离线文档查询. 问题 但是,在软件中下载DocSet(文档)会出现下载慢,或者下载不了的 ...

  2. 1.在 Kubernetes 在快速安装 Harbor

    网址:https://www.qikqiak.com/post/harbor-quick-install/ 安装 Harbor Harbor 支持多种安装方式,源码目录下面默认有一个安装脚本(make ...

  3. OSF--网络类型

    ABR:区域边界路由器ASBR:自治区域系统边界路由器区域部署原则:    存在vlink本地网络一定是有问题的.他只是作为一种过度技术,在vlink里无法实现认证! 配置:   [r2-ospf-a ...

  4. C#/VB.NET 读取条码类型及条码在图片中的坐标位置

    我们在创建条形码时,如果以图片的方式将创建好的条码保存到指定文件夹路径,可以在程序中直接加载图片使用:已生成的条码图片,需要通过读取图片中的条码信息,如条码类型.条码绘制区域在图片中的四个顶点坐标位置 ...

  5. GTID主从

    GTID主从 目录 GTID主从 GTID概念介绍 GTID工作原理 GTID主从配置 GTID概念介绍 GTID即全局事务ID (global transaction identifier), 其保 ...

  6. Vue中router路由的使用、router-link的使用(在项目中的实际运用方式)

    文章目录 1.先看router中的index.js文件 2.router-link的使用 3.实现的效果 前提:router已经安装 1.先看router中的index.js文件 import Vue ...

  7. .net core -利用 BsonDocumentProjectionDefinition 和Lookup 进行 join 关联 MongoDB 查询

    前序 前段时间由于项目需要用到MongoDB,但是MongoDB不建议Collection join  查询,网上很多例子查询都是基于linq 进行关联查询.但是在stackoverflow找到一个例 ...

  8. Azure DevOps Server 设置项目管理用户,用户组

    一,引言 Azure DevOps Server 搭建完成后,关于如何进行项目管理,项目成员管理等,我们接着上一篇文章,继续讲解 Azure DevOps Server 的用户,用户组.首先,我们需要 ...

  9. 【题解】CF45I TCMCF+++

    题面传送门 题目描述 有 \(n\) 个数 \(a_i\) 请你从中至少选出一个数,使它们的乘积最大 解决思路 对于正数,对答案一定有贡献(正数越乘越大),所以输入正数时直接输出即可. 对于负数,如果 ...

  10. Python中Print方法

    1 number1 = int(input("请输入第一个数:")) 2 number2 = int(input("请输入第二个数:")) 3 4 # 方法一: ...