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中 ...
随机推荐
- 查询参数和字符串校验:Query_Parameters_and_String_Validations
官方文档地址:https://fastapi.tiangolo.com/zh/tutorial/query-params-str-validations/ # -*- coding: UTF-8 -* ...
- Redis一键安装脚本
#! /usr/bin/env bash # redis 6.0.3 源码安装 # 用法: bash -x install-redis-single.sh 6.0.3 version=$1 usage ...
- Readsh中文版初始设置
B站视频教程网址:https://space.bilibili.com/630285695/video 安装成功后,打开浏览器输入http://ip:5000如果出现如下画面,即告安装成功. 初始设置 ...
- 秋初 WAMP 集成环境 v2.1
基于QT的PHP集成开发环境v2.1 https://gitee.com/xiaqiuchu/wamp-integrated-environment 界面预览 已实现功能 服务的启动.关闭.重启. p ...
- 努力一周,开源一个超好用的接口Mock工具——Msw-Tools
作为一名前端开发,是不是总有这样的体验:基础功能逻辑和页面UI开发很快速,本来可以提前完成,但是接口数据联调很费劲,耗时又耗力,有时为了保证进度还不得不加加班. 为了摆脱这种痛苦,经过一周的努力,从零 ...
- [笔记] 二维FFT
假设现在有2个矩阵a和b,分别是n行m列和x行y列,现在你要计算它们的二维卷积,也就是求出矩阵s满足: \(s_{i,j}=\sum_{i'\leq i,j'\leq j}a_{i',j'}b_{i- ...
- SECS半导体设备通讯-1 SECS的基本概念
一 什么是SECS SECS(SEMI Equipment Communication Standard),半导体设备通讯标准. 此标准由SEMI (Semiconductor Equipment a ...
- 移动端300ms延迟问题和点击穿透问题
一.移动端300ms延迟问题: 一般情况下,如果没有经过特殊处理,移动端浏览器在派发点击事件的时候,通常会出现300ms左右的延迟.也就是说,当我们点击页面的时候移动端浏览器并不是立即作出反应,而是会 ...
- .Net CLR GC plan_phase二叉树和Brick_table
楔子 别那么懒,勤快点.以下取自CLR PreView 7.0. 主题 GC计划阶段(plan_phase)主要就两个部分,一个是堆里面的对象构建一颗二叉树(这颗二叉树的每个节点包含了诸如对象移动信息 ...
- POJ1094 Sorting It All Out (floyd传递闭包)
关系具有传递性,可以用floyd解决. 将关系都看做i<j的形式,令d[i][j]=1,如果d[i][j]=d[j][i]=1,说明矛盾:d[i][j]=d[j][i]=0,说明i与j的关系无法 ...