re、base64的结合使用爬取豆瓣top250
一、缘由
对于豆瓣的这个网站,记得使用了不少于三种的爬取和解析方式来进行的。今天的这种解析方式是我使用起来较为顺手,后来就更喜欢使用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的更多相关文章
- 基础爬虫,谁学谁会,用requests、正则表达式爬取豆瓣Top250电影数据!
爬取豆瓣Top250电影的评分.海报.影评等数据! 本项目是爬虫中最基础的,最简单的一例: 后面会有利用爬虫框架来完成更高级.自动化的爬虫程序. 此项目过程是运用requests请求库来获取h ...
- requests爬取豆瓣top250电影信息
''' 1.爬取豆瓣top250电影信息 - 第一页: https://movie.douban.com/top250?start=0&filter= - 第二页: https://movie ...
- Python爬虫实例:爬取豆瓣Top250
入门第一个爬虫一般都是爬这个,实在是太简单.用了 requests 和 bs4 库. 1.检查网页元素,提取所需要的信息并保存.这个用 bs4 就可以,前面的文章中已经有详细的用法阐述. 2.找到下一 ...
- python3爬取豆瓣top250电影
需求:爬取豆瓣电影top250的排名.电影名称.评分.评论人数和一句话影评 环境:python3.6.5 准备工作: 豆瓣电影top250(第1页)网址:https://movie.douban.co ...
- Python 爬取豆瓣TOP250实战
学习爬虫之路,必经的一个小项目就是爬取豆瓣的TOP250了,首先我们进入TOP250的界面看看. 可以看到每部电影都有比较全面的简介.其中包括电影名.导演.评分等. 接下来,我们就爬取这些数据,并将这 ...
- Python-爬虫实战 简单爬取豆瓣top250电影保存到本地
爬虫原理 发送数据 获取数据 解析数据 保存数据 requests请求库 res = requests.get(url="目标网站地址") 获取二进制流方法:res.content ...
- 2019-02-01 Python爬虫爬取豆瓣Top250
这几天学了一点爬虫后写了个爬取电影top250的代码,分别用requests库和urllib库,想看看自己能不能搞出个啥东西,虽然很简单但还是小开心. import requests import r ...
- 爬虫学习--MOOC爬取豆瓣top250
scrapy框架 scrapy是一套基于Twisted的异步处理框架,是纯python实现的爬虫框架,用户只需要定制开发几个模块就可以轻松实现一个爬虫,用来抓取网页内容或者各种图片. scrapy E ...
- 简单的爬虫例子——爬取豆瓣Top250的电影的排名、名字、评分、评论数
爬取思路: url从网页上把代码搞下来bytes decode ---> utf-8 网页内容就是我的待匹配的字符串ret = re.findall(正则,待匹配的字符串), ret 是所有匹配 ...
- python爬取豆瓣top250的电影数据并存入excle
爬取网址: https://movie.douban.com/top250 一:爬取思路(新手可以看一下) : 1:定义两个函数,一个get_page函数爬取数据,一个save函数保存数据,mian中 ...
随机推荐
- Jenkins配置项目构建的钉钉通知
在任意一个钉钉群里创建自定义的钉钉机器人,然后能够看到钉钉开放的webhook,复制webhook. Jenkins中安装钉钉插件,然后在项目的配置当中,构建后操作里添加钉钉报警. 安装钉钉通知插件 ...
- 记录阿里云安全组设置遇到的奇葩问题--出口ip
之前公司使用的路由器里使用的是PPPOE拨号的形式上网的,根据拨号后得到的ip地址,配置到阿里云的安全组里,具体来说是配置到22端口里,也就是说只有特定ip才能访问22端口,也即是说只允许公司网络远程 ...
- 7_Log
一. 引言 1.1 日志介绍 用于记录系统中发生的各种事件. 记录的位置常见的有: 控制台, 磁盘文件等 1.2 日志级别 日志级别由低到高 TRACE, DEBUG, INFO, WARN, ERR ...
- 编码中的Adapter,不仅是一种设计模式,更是一种架构理念与解决方案
大家好,又见面了. 不知道下面这玩意大家有没有见过或者使用过?这是一个插座转换器.我们都知道日常使用的是220v的交流电,而国外不同国家使用的电流电压是不一样的(比如日本使用的是110v).且插座的接 ...
- suse 安装mysql5.7
1.上传包到home目录下 2.安装 1,解压下载的文件: tar -xvf mysql-5.7.29-1.sles12.x86_64.rpm-bundle.tar 解压后: 3.安装libatomi ...
- Petrozavodsk Winter Training Camp 2016: Moscow SU Trinity Contest
题目列表 A.ABBA E.Elvis Presley G. Biological Software Utilities J. Burnished Security Updates A.ABBA 题意 ...
- Skywalking Swck Agent注入实现分析
项目地址: GitHub - apache/skywalking-swck: Apache SkyWalking Cloud on Kubernetes 项目简介: A bridge project ...
- java中实现File文件的重命名(renameTo)、将文件移动到其他目录下、文件的复制(copy)、目录和文件的组合(更加灵活方便)
欢迎加入刚建立的社区:http://t.csdn.cn/Q52km 加入社区的好处: 1.专栏更加明确.便于学习 2.覆盖的知识点更多.便于发散学习 3.大家共同学习进步 3.不定时的发现金红包(不多 ...
- Go | 讲解GOROOT、GOPATH、GOBIN
前言 Go(又称 Golang)是 Google 开发的一种静态强类型.编译型.并发型,并具有垃圾回收功能的编程语言.Go 被誉为是未来的服务器端编程语言. Go是一门全新的静态类型开发语言,具有自动 ...
- 畸变矫正、透视变换加速(OpenCV C++)
前两周,同事和我说检测时间超时,其中对图像做畸变矫正和投影变换就要花费25ms(3000×3000的图).而此时我们已经用上了文章opencv图像畸变矫正加速.透视变换加速方法总结中的方法.突然我想到 ...