Python爬虫之豆瓣排行榜(正则表达式)

1. 项目目标

使用Chrome浏览器打开网页https://maoyan.com/ ,切换到【榜单】,【TOP100榜】。本次项目就是要获取豆瓣排名Top100的电影排名、电影名称、主演,以及豆瓣评分。

2.实施

2.1 网页分析

网页翻到最后,点击“下一页”,发现网址变成了“https://maoyan.com/board/4?offset=10”;再点击下一页,网址又变成“https://maoyan.com/board/4?offset=20”;


由此推测,任意页网址是“https://maoyan.com/board/4?offset=x”,其中x的值是页数的10倍(每页显示10部电影)。

2.2 请求网页

打开第一页,键盘按F12打开【开发者工具】,再按一次F5刷新页面,依次点击“Network"、“4?offset=0”(即name列表第一个)、“Headers”;
在“Request Headers”中可以找到浏览器的请求头信息,包括cookie、host、User-Agent等。

import requests
url="https://maoyan.com/board/4?offset=0"
headers={'User-Agent':'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/78.0.3904.108 Safari/537.36'}
r=requests.get(url,headers=headers)

查看网页源代码

r.text


可以看到,每一部电影的信息都在"dd"这个标签中,注意评分的整数部分和小数部分是分开的。

2.3解析网页

此处使用正则表达式解析:

import re
result=re.findall('<i\sclass="board-index board-index-(.*?)".*?title="(.*?)".*?主演:(.*?)\\n.*?上映时间:.*?<.*?integer">(.*?)<.*?fraction">(.*?)<.*?/i>',r.text,re.S)

说明:
1)【.*?】的组合前后加上特定上下文,堪称无敌匹配,我很喜欢这么用;比如在"…1203" title=“霸王别姬” data…“找到"霸王别姬"四个子,上文是【title=”】,下文是【" data】,在上下文中间加入这个组合,就可以完美匹配出中间的内容;
2)当需要提取一串字符的多项内容时,每一项内容用括号括起来,用findall输出结果;
3)最后面re.S表示可以跨行匹配,原字符串多行显示时需要这么用;
4)更多正则表达式的用法请参考博客:
https://blog.csdn.net/bingocoder/article/details/103746826

result


得到是结果是列表类型,列表中的每个元素是tuple类型,此处通过遍历列表提取信息:

index,title,star,score=[],[],[],[]
for i in result:index.append(i[0])  #获取每个元组中的第一个元素,即序号title.append(i[1])star.append(i[2])score.append(i[3]+str(i[4]))  #得分为整数部分+小数部分
score


将所有数据信息整理成DataFrame:

import pandas as pd
pd.DataFrame({'index':index,'title':title,'star':star,'score':score})

结果如下图:

到这里,就实现了单页数据的爬取,接下来通过遍历各页的url,实现TOP100的全部信息爬取:

for page in range(10):url='https://maoyan.com/board/4?offset=%d'%(10*page)......

2.4 本案例完整代码如下:

import re
import pandas as pd
import requests
import os
import time
start =time.clock()
index,title,star,score=[],[],[],[]
def get_one_page(page):url='https://maoyan.com/board/4?offset=%d'%(10*page)headers={'User-Agent':'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/78.0.3904.108 Safari/537.36'}r=requests.get(url,headers=headers)if r.status_code==200:return r.textdef jiexi(html):result=re.findall('<i\sclass="board-index board-index-(.*?)".*?title="(.*?)".*?主演:(.*?)\\n.*?上映时间:.*?<.*?integer">(.*?)<.*?fraction">(.*?)<.*?/i>',html,re.S)for i in result:index.append(i[0])title.append(i[1])star.append(i[2])score.append(i[3]+str(i[4]))for i in range(10):jiexi(get_one_page(i))time.sleep(1)pd.DataFrame({'index':index,'title':title,'star':star,'score':score})

Python爬虫之豆瓣排行榜(正则表达式)相关推荐

  1. Python 爬虫分析豆瓣 TOP250 之 信息字典 和 马斯洛的锥子

    问题 本文是对<Python 爬虫分析豆瓣 TOP250 告诉你程序员业余该看什么书?> 一文的补充 我们以<追风少年>为例 用chrome的developer tool查看源 ...

  2. Python爬虫(5):豆瓣读书练手爬虫

    Python爬虫(5):豆瓣读书练手爬虫 我们在之前的文章中基本上掌握了Python爬虫的原理和方法,不知道大家有没有练习呢.今天我就来找一个简单的网页进行爬取,就当是给之前的兵书做一个实践.不然不就 ...

  3. python爬取豆瓣排行榜电影(静态爬取)(二次爬取)

    目录 python爬取豆瓣排行榜电影(静态爬取) 获取网站url 获取网站headers get请求访问url BeautifulSoup解析网站 爬取html数据 完整代码 python爬取豆瓣排行 ...

  4. 使用Python爬虫获取豆瓣影评,并用词云显示

    使用Python爬虫获取豆瓣影评,并用词云显示 Python语言流行到现在,目前最受开发者喜爱的功能莫过于它的爬虫功能,以至于很多人以为Python的英语发音也是"爬虫",其实它是 ...

  5. python爬虫获取豆瓣图书Top250

    在上一篇博客<python爬虫获取豆瓣电影TOP250>中,小菌为大家带来了如何将豆瓣电影Top250的数据存入MySQL数据库的方法.这次的分享,小菌决定再带着大家去研究如何爬取豆瓣图片 ...

  6. Python爬虫实战----------豆瓣TOP250

    *前段时间学习了一些浅显的爬虫知识,防止遗忘写个博客记录一下,如果能帮到其他人是更好的 本篇介绍一下如何一步一步实现使用python爬取豆瓣电影TOP250,博主是个小白,如果内容有误,请将宝贵的建议 ...

  7. 实战python网络爬虫豆瓣_三分钟教会你利用Python爬虫实现豆瓣电影采集(实战篇)...

    一.项目背景 豆瓣电影提供最新的电影介绍及评论包括上映影片的影讯查询及购票服务.可以记录想看.在看和看过的电影电视剧 .顺便打分.写影评.极大地方便了人们的生活. 今天小编以电视剧(美剧)为例,批量爬 ...

  8. 豆瓣python源码_(附源码)Python爬虫之豆瓣攻坚战

    我:好无聊鸭~有没有好电影推荐一下鸭? 惨绿青年:你不是会制作python爬虫了吗?自己去豆瓣top250爬一下呗. 我:诶,居然还有这样的网站,让我赶紧去瞧瞧. 于是Paradoxical就打开了豆 ...

  9. 三分钟教会你利用Python爬虫实现豆瓣电影采集(实战篇)

    一.项目背景 豆瓣电影提供最新的电影介绍及评论包括上映影片的影讯查询及购票服务.可以记录想看.在看和看过的电影电视剧 .顺便打分.写影评.极大地方便了人们的生活. 今天小编以电视剧(美剧)为例,批量爬 ...

最新文章

  1. iOS进阶之页面性能优化
  2. JAVA学习资源网站
  3. 把文件夹下的所有文件打包成一个zip包
  4. 在代码段中安排自己定义的栈空间
  5. 黑客频繁来袭 关注云计算的安全与保障
  6. 计算机启动时默认输入法设置,每次开机都需要重设,教你电脑输入法怎么设置默认模式...
  7. C语言-数组的趣味应用-筛法求素数
  8. 河北单招2021计算机类,2021河北省单招十大类专业
  9. python码合并txt文件
  10. nrf52840烧录提示错误原因和解决办法
  11. ARMv8-A笔记一 ARM-A系列处理器介绍
  12. 量子计算机能用在手机上吗,中国“量子芯片”技术再次突破!或用于手机生产,网友:人才辈出...
  13. 软件测试/测试开发丨Java or Python?测试开发工程师如何选择合适的编程语言?
  14. 一文搞懂│XSS攻击、SQL注入、CSRF攻击、DDOS攻击、DNS劫持
  15. Tailwind Sidebar
  16. 深度神经网络(DNN)的反向传播算法总结与图解
  17. 数据库数据 与 excel 对比。(项目一)
  18. 树莓派(Linux 系统)触摸屏翻转显示以及触摸翻转
  19. 正厚知识 | 人工智能会取代人类吗?
  20. 【转】Win7注册表的使用(更新中)

热门文章

  1. Android 开发资料便签 1
  2. 【数字电路】mos管、三极管、晶振、源极、漏极、栅极
  3. golang中的图像image处理之马赛克效果
  4. Atlassian JIRA 安装
  5. 运动必备的气传导耳机有哪些,推荐四款运动气传导耳机
  6. 如何定时执行任务 - 定时执行专家
  7. Unity实验室之根据模板自动生成文件
  8. Implicitly declaring library function ‘scanf‘ with type ‘int (const char *restrict, ...)‘解决方法
  9. 2017全国计算机一级考试题,全国计算机一级考试真题
  10. linux的iso镜像文件下载速度慢的问题