最开始学习python,是因为爬虫。最初学习小甲鱼的教学视频,后来在小甲鱼的论坛上发现了用bs4爬取豆瓣前一百,当时怎么也看不懂。后来系统的学习了一下爬虫。参考了崔大佬的爬虫之后,改编书上的例子(书上用正则法则),我这里用bs4,后文会附上正则法则解析网页。

系统流程:

1.观察页面构造--知道要提取多少页,url构造方式等

2.编写函数解析每一页--得到每一页需要的数据

3.数据清洗和保存--按一定格式存储

4.循环2-3爬取所有的页面

用到的库:

from requests.exceptions import RequestExceptionfrom urllib.parse import urlencodefrom bs4 import BeautifulSoupimport requestsimport jsonimport reimport time

一般来说用requests.get得到网页信息时可能会报错,那么需要用try...except的模式,第一个导入就是用来提供except情况的。 我这里偷了个懒,用urlencode()来构造url。因为电影排行前一百嘛,观察网页发现每一页介绍10个电影,那么必然就是10页了。

观察页面:

在这个主题里,还是看图说话的好,毕竟是观察嘛。网速有点卡,待老夫慢慢展开,各位看官多多包容。

打开Chrome浏览器。输入网址http://maoyan.com/board/4,然后用你们勤劳的手指,戳中F12。如下图所示。

不管图中有啥美女,我们继续我们伟大的爬虫事业。我一定不能让这该死的开发者工具阻挡住我伟大的视野,网页往下翻页,看到下一页,轻轻的一点。如下。

哼,美女没有了,换成二次元了。这可如何是好?既然世界那么恶劣,我们来看看这让人又爱又恨的开发者工具?不不不,我们不能死的太年轻。看到抬头了吗?那么url变化了。对比一下,多了一个

?offset=10。这肯定是告诉我们当前页是第11-20那么页码的规律是不是出来啦。我相信这个肯定难不住各位人见人爱的柯南们。

接下来当然得观察观察传说中需要提取的数据。不然写爬虫干嘛。你想想,获得信息最快捷的方式当然是直接看喽。不对不对,逻辑有问题,应该是获得少量信息最快捷的方法是看,获得大量的数据最快捷的方法当然是爬虫爬下来,然后再去看。每页都是介绍电影,当然我们需要的信息肯定是固定在每一页的固定地方的。不然每一页都写一遍代码,前端的小帅哥会升(gun)职(chu)加(gong)薪(si)的。毕竟费力不讨好简直就是浪费青春。所以比如指着《天空之城》点击右键,然后检查,性感的图又如下啦。

咳咳,各位认真看图的肯定发现,我指着的不是天空之城,答对了。真是些聪明的小伙伴。为了实例清楚,我往下翻页了。指了个中间位置的。如图第一行<dd>...</dd>后面还有好多<dd>。中间有个被打开的<dd>是不是发现我们要的索引信息都在<dd>里面。

好了,接下来撸起袖子,咱们开干。。。注意是袖子,不是裤子。

代码:

打开网页:

刚刚我们是用我们大眼睛观察,现在得用程序打开网页。如下:

def open_url(url):try:headers ={'User-Agent': 'Mozilla/5.0 (Windows NT 6.1; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/68.0.3440.84 Safari/537.36'}response = requests.get(url, headers=headers)if response.status_code == 200:return response.textreturn Noneexcept RequestException:return None

简单介绍一下,猫眼必须加上header伪装成浏览器,不然会被禁掉。这个headers是怎么回事呢,你可以把它理解成通行证。发送请求给服务器之后,服务器总的验证一下你是啥玩意,所以就只能看看headers喽。当前大家都是互相相信的,至于我伪不伪造通行证,那必然的不然谁让你爬啊。

解析每一页:

当然是传入offset参数,然后用for循环调用函数,这样是不是我们也只用写一个解析一页的函数就好了。

def parse_page(html):soup = BeautifulSoup(html, 'lxml')items = soup.select('dd')for item in items:index = item.find(name='i', class_='board-index').get_text()name = item.find(name='p', class_='name').get_text()start = item.find(name='p', class_='star').get_text().strip()time = item.find(name='p', class_='releasetime').stringscore = item.find(name='p', class_='score').get_text()yield {'index':index,'name':name,'star':start,'time':time,'score':score}

细心的帅哥肯定发现了。我用的是find()函数,哈哈哈。一般都是用find_all(),是因为我长得帅所以标新立异吗?那当然不是。传说中的理由是,find返回的直接是网页标签,而find_all返回的是列表,列表里面包含标签。图省事。当然用find喽。

保存:

这里数据就不用怎么清洗了,毕竟我用字典形式返回来,以咱们普九的力度来说,大家都看得懂字典的内容的。当然你也可以不用字典,返回一个列表,但是,你的列表里面可能完全没有顺序。有些是电影名在最前面,有些可能是评分在最前面,看起来一点都不爽,所以用字典号啦。

def save(item):with open('maoyan.txt', 'a', encoding='utf-8') as f:f.write(json.dumps(item, ensure_ascii=False) + '\n')

if __name__ == '__main__':

登场的不用说了,这句话很霸气的告诉编译器,老子程序从这行下面开始执行。

if __name__ == '__main__':for i in range(10):base_url = 'http://maoyan.com/board/4?'params = {'offset': i*10}url = base_url + urlencode(params)html = open_url(url)for item in parse_page(html):print(item)save(item)time.sleep(2)

成果展示:

总结:

bs4真的很好用。。等等你说的正则呢。哈哈哈哈当然是下回分解喽。

其实现在我感觉解析网页用的比较多的就是Beautiful Soup 和pyquery。当然还有XPath。我觉得XPath规矩太多有点不符合我想的那样,所有我主要就是用pyquery,然后非常细节的就比如从一段话中提取一些信息,那么我用正则。正则表达式完全的解析一个网页其实很容易出错,而且前端小哥哥稍微改那么一丢丢,可能你的程序就game over了。

祝大家愉快,各位未来程序猿快睡啦。

BeautifulSoup4爬取猫眼电影前一百相关推荐

  1. python实战(一)Python爬取猫眼评分排行前100电影及简单数据分析可视化python实战(一)Python爬取猫眼排行前一百电影及简单数据分析可视化

    python实战(一)Python爬取猫眼排行前一百电影及简单数据分析可视化 一.抓取数据 需要的库 request库 响应http请求 json库 将文本保存成json形式 pyquery 类似JQ ...

  2. requests+正则爬取猫眼电影前100

    最近复习功课,日常码农生活. import requests from requests.exceptions import RequestException import re import jso ...

  3. 爬虫(2)-解析库xpath和beautifulsoup爬取猫眼电影排行榜前100部电影

    解析库爬取猫眼电影前100部电影 认为有用的话请点赞,码字不易,谢谢. 其他爬虫实战请查看:https://blog.csdn.net/qq_42754919/category_10354544.ht ...

  4. 使用Requests爬取猫眼电影

    谈到爬虫大家可能对Requests库不会陌生,相比urllib库的话Requests库在处理网页认证和Cookies时更加方便,话不多少,下面让我通过爬取猫眼电影前100名排行榜实例来说明一下. 首先 ...

  5. Python语言实现用requests和正则表达式方法爬取猫眼电影排行榜前100部电影

    #爬取猫眼电影排名前100的电影 import requests #电脑向服务器发送的请求库 from requests.exceptions import RequestException impo ...

  6. 记第一天使用node做爬虫——爬取猫眼电影票房总榜以及指定电影的豆瓣评论前200条

    首先,我是一个做前端的应届生,今天朋友想让我帮忙爬取猫眼电影票房总榜的数据,但是我之前一点都没接触过爬虫,但我还是说:okk,我试试: 然后试试就逝世,各种坑接踵而来: 提前声明:这篇文章暂时只是获取 ...

  7. 爬虫(1)-正则化表达式爬取猫眼电影排行榜前100部电影

    爬取猫眼电影排行榜前100部电影 文章目录 爬取猫眼电影排行榜前100部电影 1.抓取首页 2.正则化表达式提取信息 3.保存到文件中 4.抓取前100部电影 认为有用的话请点赞,码字不易,谢谢. 其 ...

  8. 爬取猫眼电影网前100的电影排名

    爬取猫眼电影网前100的电影排名 猫眼电影网:http://maoyan.com/board/4 确定要爬取的数据: 1:排名 2:电影名称 3:主演 4:上映舌尖 5:评分 构造下一页url 首页: ...

  9. python爬取猫眼电影

    爬取猫眼电影排名前一百的电影 验证问题不知道怎么解决,隔段时间要重新输一次链接' # -*- coding: utf-8 -*- """ Created on Wed D ...

最新文章

  1. layerconfirm确认框的使用
  2. 人工智能:决胜未来之道培训课程大纲
  3. Java 读取指定目录下的文件名和目录名
  4. mysql 的数据库实例理解_理解数据库和实例
  5. python transform方法_Python transforms.BboxTransformFrom方法代码示例
  6. 95-136-041-源码-Operator-AbstractStreamOperator
  7. 收集 关于IDEA 开发工具的一些有用的设置 或 使用技巧
  8. vscode生成vue模板快捷键_VSCode 初次写vue项目并一键生成.vue模版
  9. matlab 最速下降,matlab最速下降法
  10. ios 关于itunes安装ipa包的方法,一步解决
  11. 每个人都在经历淘宝的“大数据杀熟”,这5个办法巧妙避开
  12. Java调用WebService接口实现发送手机短信验证码功能,java 手机验证码,WebService接口调用
  13. android关于无法debug
  14. ThingJs操作手册
  15. NetSuite 未实现汇兑损益
  16. 【Redis】Redis 哈希 Hash 键值对集合操作 ( 哈希 Hash 键值对集合简介 | 查询操作 | 增加操作 | 修改操作 )
  17. UI设计师必备10大工具
  18. Oracle 常用语句大全
  19. 贴片绕线电感和贴片电感的区别
  20. 【爬虫】python使用selenium抓取淘宝中的商品数据

热门文章

  1. 【CentOS】虚拟机忘记密码,如何重置密码。
  2. Unity黑魂复刻经典教程心得(一)
  3. 小程序富文本标签中文字及图片路径的提取 入坑~填坑
  4. 数码相机拍摄技巧,帮助初学者拍出自己想要的图像
  5. Android实现点击跳转本地浏览器打开网页的精简方式
  6. 方舟服务器制作修改,方块方舟服务器怎么架设?架设教程及选择服务器方法
  7. 24.GRASP模式
  8. “场•变” 新环境变量里的企业品牌价值思辨
  9. ACEScg工作流最近经常看到交流的身影,那么ACEScs是什么呢?3DMAX中的ACEScg详解和优点~
  10. 会话固定原理与通信步骤说明