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中 ...
随机推荐
- 使用mysql5.7版本的mysqldump备份mysql8.0版本的数据库报错解决办法
使用mysql5.7版本的mysqldump命令执行备份mysql8.0版本的数据库时会报错: mysqldump: Couldn't execute 'SET SQL_QUOTE_SHOW_CREA ...
- KVM更改虚拟机默认存储路径
Virt默认的虚拟机存储路径是/var/lib/libvirt/images,如下图所示 接下来我们创建一个新的存储池,用来存储新建的虚拟机.存储池的名称为vm, 路径为/home/kvm/ (/ho ...
- 第四章:Django表单 - 2:Django表单API详解
声明:以下的Form.表单等术语都指的的广义的Django表单. Form要么是绑定了数据的,要么是未绑定数据的. 如果是绑定的,那么它能够验证数据,并渲染表单及其数据,然后生成HTML表单.如果未绑 ...
- Gitlab备份以及恢复
1.迁移准备工作和思路 从a服务器迁移到b服务器,由于Gitlab自身的兼容性问题,高版本的Gitlab无法恢复低版本备份的数据,需要注意在b服务器部署和a服务器一样版本的gitlab,部署好环境后开 ...
- 对vue中的data进行数据初始化
this.$data:是表示当前的改变后的this中的数据 this.$options.data():是表示没有赋值前的this中的数据,表示 初始化的data 一般可以使用Object.assign ...
- 玖章算术受邀参加红杉Talk「创新的复利」科技专场,共同探讨云计算的前世今生
9月2日,本周五14:00 「创新的复利」 Sequoia Talk系列论坛,首期直播盛大启动.在第一期科技专场,4位红杉中国资深投资人.8位创新创业者将带我们深入工业软件.机器人.云计算等领域,围绕 ...
- 适用于纯64位Linux系统无需multilib运行win32软件的Wine
链接: https://pan.baidu.com/s/1qbDGz8mI-TtZLOFvEQetbg 提取码: uk6u 食用方法:解包到~ export HOQEMU=$HOME/hangover ...
- Python模拟服务端
本机服务端 import socket # 获取到socket sk = socket.socket() # 获取到地址 ip 和 端口号 address = ('127.0.0.1', 8001) ...
- 2022年整理最详细的java面试题、掌握这一套八股文、面试基础不成问题[吐血整理、纯手撸]
这里是参考B站上的大佬做的面试题笔记.大家也可以去看视频讲解!!! 文章目录 1.面向对象 2.JDK.JRE.JVM区别和联系 3.==和equals 4.final 5.String .Strin ...
- 都卷Java,你看看你得学多少技术栈才能工作!
作者:小傅哥 博客:https://bugstack.cn 沉淀.分享.成长,让自己和他人都能有所收获! 一.前言:授业解惑 我知道,你不知道的还有很多! 你了解计算机要从哪里开始学习吗?你清楚为了能 ...