豆瓣电影:TOP250榜单爬虫
豆瓣电影 Top 250 (douban.com)
#导包
import requests
from bs4 import BeautifulSoup
import pandas as pd
第一步:下载所有页面(共10个)的HTML
【1】构造分页数字列表page_indexs
【2】构造函数download_all_htmls,下载列表所有页面的HTML
1、先添加请求头headers(爬取的网站有反爬虫机制,要向服务器发出爬虫请求,需要添加请求头headers。不然响应状态是418,正常情况应该是200。)
2、利用for循环取到页面列表中的每一个页面的网址url
3、用requests.get函数获取html网页(构造一个向服务器请求资源的url对象,并添加headers参数。返回的是一个包含服务器资源的Response对象。)
4、r.status_code返回http请求的返回状态:200表示连接成功,返回418表示爬取的网站有反爬虫机制,要向服务器发出爬虫请求,需要添加请求头headers
5、htmls.append(r.text)添加每个url对应的页面内容到列表htmls
text()方法:返回文本内容
第二步:解析HTML得到数据
【1】构造函数parse_single_html,用于解析单个html得到数据
1、找到每部电影:
find()方法:只返回第一个匹配到的对象
find(name, attrs, recursive, text, **wargs) # recursive 递归的,循环的
find_all()方法:返回所有匹配到的结果
find_all(name, attrs, recursive, text, limit, **kwargs)
此处形参用class_的原因:
参考:(13条消息) BeautifulSoup中find和find_all的使用_OCISLU的博客-CSDN博客
soup.find("div",class_="article").find("ol",class_="grid_view").find_all("div",class_="item")
2、用for循环对每部电影取相应类型的数据:
get_text()方法:获取文本内容
#排名
rank=article_item.find("div",class_="pic").find("em").get_text()
#电影名称
title=info.find("div",class_="hd").find("span",class_="title").get_text()
stars=(info.find("div",class_="bd").find("div",class_="star").find_all("span") #stars里含有4个span,返回一个列表)#5星评分
rating_star=stars[0]["class"][0] #第一个span中的class属性的第一个值#10分评分
rating_num=stars[1].get_text() #评论人数
comments=stars[3].get_text()
3、将每部电影的信息存到字典中,并作为列表的一个元素添加到datas列表中去
字符串替换replace()方法:
datas.append({"排名":rank,"电影名":title,"5星评价":rating_star.replace("rating","").replace("-t",""),"10分评分":rating_num,"评价人数":comments.replace("人评价","")})
【2】执行所有HTML页面的解析
#对每一个HTML页面进行解析,并将结果添加到列表all_datas
all_datas=[]
for html in htmls:all_datas.extend(parse_single_html(html))
第三步:将结果存入Excel
df=pd.DataFrame(all_datas)
df.to_excel("豆瓣top250电影榜单.xlsx")
第四步:DataFrame数据导入MySQL
import sqlalchemy
from sqlalchemy import create_engine#建立连接
conn = create_engine('mysql+pymysql://root:123@localhost:3306/crawl?charset=utf8')
#写入数据,‘replace’表示如果同名表存在就替换掉
df.to_sql(name='douban', con=conn,if_exists='replace',index=False,index_label='排名',dtype={'排名': sqlalchemy.types.BigInteger(),'电影名': sqlalchemy.types.String(length=20),'5星评价': sqlalchemy.types.BigInteger(),'10分评分': sqlalchemy.types.BigInteger(),'评价人数': sqlalchemy.types.BigInteger(),})
【完整代码】
import requests
from bs4 import BeautifulSoup
import pandas as pdpage_indexs=range(0,250,25)def download_all_htmls():#先添加请求头headersheaders={'User-Agent':'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/94.0.4606.71 Safari/537.36 Edg/94.0.992.38'}htmls=[] #存放各个url对应的页面内容for idx in page_indexs:url=f"https://movie.douban.com/top250?start={idx}&filter="print("crawl html:",url) #url是通过http协议存取资源的一个路径,它就像我们电脑里面的一个文件的路径一样r=requests.get(url,headers = headers) #获取html网页(构造一个向服务器请求资源的url对象),并添加headers参数。r返回的是一个包含服务器资源的Response对象,包含从服务器返回的所有相关资源。if r.status_code!=200: # r.status_code 返回http请求的返回状态(200表示连接成功)raise Exception("error") # 返回418表示:爬取的网站有反爬虫机制,要向服务器发出爬虫请求,需要添加请求头headers#print(r.status_code)htmls.append(r.text) # r.text 获取url对应的页面内容return htmlshtmls=download_all_htmls()def parse_single_html(html):soup=BeautifulSoup(html,'html.parser') #构建BeautifulSoup实例(第一个参数是要匹配的内容;第二个参数是要采用的模块,即规则)article_items=( #返回一个列表,代表每个article的信息soup.find("div",class_="article") # find() 只返回第一个匹配到的对象.find("ol",class_="grid_view").find_all("div",class_="item") # find_all() 返回所有匹配到的结果(此处返回所有电影))datas=[] #将数据存到列表里面for article_item in article_items:rank=article_item.find("div",class_="pic").find("em").get_text() #获取排名info=article_item.find("div",class_="info")title=info.find("div",class_="hd").find("span",class_="title").get_text() #获取电影名称stars=(info.find("div",class_="bd").find("div",class_="star").find_all("span") #stars里含有4个span)#print(stars)rating_star=stars[0]["class"][0] #获取5星评分rating_num=stars[1].get_text() #获取10分评分comments=stars[3].get_text() #获取评论人数datas.append({"排名":rank,"电影名":title,"5星评价":rating_star.replace("rating","").replace("-t",""),"10分评分":rating_num,"评价人数":comments.replace("人评价","")})return datasall_datas=[]
for html in htmls:all_datas.extend(parse_single_html(html))df=pd.DataFrame(all_datas)import sqlalchemy
from sqlalchemy import create_engine
#建立连接
conn = create_engine('mysql+pymysql://root:123@localhost:3306/crawl?charset=utf8')
#写入数据,t_stock_trade_date为数据库表名,‘replace’表示如果同名表存在就替换掉
df.to_sql(name='douban', con=conn,if_exists='replace',index=False,index_label='排名',dtype={'排名': sqlalchemy.types.BigInteger(),'电影名': sqlalchemy.types.String(length=20),'5星评价': sqlalchemy.types.BigInteger(),'10分评分': sqlalchemy.types.BigInteger(),'评价人数': sqlalchemy.types.BigInteger(),})
print('ok')
豆瓣电影:TOP250榜单爬虫相关推荐
- No.1 豆瓣电影Top250榜单
豆瓣电影Top250榜单 一.简介 网址:https://movie.douban.com/top250 效果:下载Top250的电影封面 使用框架:requests.re 难度系数:✩ 二.教程 1 ...
- 对豆瓣电影Top250榜单的一些探索性分析
业余打发时间看电影是个不错的选择,但是如果看了一部无聊糟心的电影就得不偿失了,所以一些电影方面的榜单就出现了,可以为这些选择困难患者提供一个不错的指南,那些是经典是值得看的,而那些电影不值得你浪费一两 ...
- 摆脱剧荒!教你用 Python 一步步爬取豆瓣电影新榜单
本文以豆瓣电影(非TOP250)为例,从数据爬取.清洗与分析三个维度入手,详解和还原数据爬取到分析的全链路. 作者 | 周志鹏 责编 | 郭 芮 旁友,暑假,已经过了一大半了. 这个遥远而炙热的名 ...
- 剧荒不慌 | 手把手教你爬取+DIY豆瓣电影新榜单
作者 | 吹牛Z 来源 | 数据不吹牛(ID:shujubuchuiniu) 本文以豆瓣电影(非TOP250)为例,从数据爬取.清洗与分析三个维度入手,详解和还原数据爬取到分析的全链路.阅读全文大概需 ...
- python爬取豆瓣电影top250_Python 爬取豆瓣电影Top250排行榜,爬虫初试
from bs4 import BeautifulSoup import openpyxl import re import urllib.request import urllib.error # ...
- python爬取豆瓣电影top250_【Python3爬虫教程】Scrapy爬取豆瓣电影TOP250
今天要实现的就是使用是scrapy爬取豆瓣电影TOP250榜单上的电影信息. 步骤如下: 一.爬取单页信息 首先是建立一个scrapy项目,在文件夹中按住shift然后点击鼠标右键,选择在此处打开命令 ...
- 第一期:【python爬虫】豆瓣电影top250
1.首先看最后的爬取结果 还有电影的信息,我保存的是csv文件.可以学到爬虫的相关知识和数据保存的信息. 删除信息,直接上代码. 红色圆点旁边的是清空.(如上图所示) 下面请求中的第一个或者前几个(如 ...
- 豆瓣电影TOP250爬虫及可视化分析笔记
人类社会已经进入大数据时代,大数据深刻改变着我们的工作和生活.随着互联网.移动互联网.社交网络等的迅猛发展,各种数量庞大.种类繁多.随时随地产生和更新的大数据,蕴含着前所未有的社会价值和商业价值! ...
- Python爬虫豆瓣电影top250
我的另一篇博客,Python爬虫豆瓣读书评分9分以上榜单 有了上次的基础,这次简单爬了下豆瓣上电影TOP250,链接豆瓣电影TOP250. 打开链接,查看网页源代码,查找我们需要的信息的字 ...
最新文章
- springmvc java中转发_Springmvc中的转发重定向和拦截器的示例
- 【tf.keras】TensorFlow 1.x 到 2.0 的 API 变化
- linux 擦脚印工具,linux一步一脚印---rm命令
- mysql 值到99999后不增值了_MySQL数据库之更新语句精解(一)
- java handler的用法_Handler和内部类的正确用法
- mmap mprotect详解
- Python_文件_日记管理系统
- Spring boot 上传文件大小限制
- 建模步骤_古建设计 | sketchup建模步骤教程(简易入门版)
- python列表用来有序存放一组_Python期末习题练习
- 关于Win10系统下VIA HD AUDIO威盛声卡没声音问题 - 有效解决办法
- RJ45和RJ11的线序以及用途
- 替换和修复系统User32.dll文件
- 外贸出口流程全图(转)
- 多功能扫描仪设备 可识别护照
- 统信UOS应用商店十月活动
- 【HR面试100问】一篇文章根治各种HR面的套路问题,文章给出参考答案~持续更新
- 鸿蒙系统1004无标题,华为P50 Pro外观基本确认:居中开孔全面屏首发鸿蒙操作系统...
- 常见计算机主机内部硬件设备,计算机的硬件主要包括中央处理器、储存器、输出设备和...
- 看,那人好像一个产品狗,对,这就是产品狗