本篇博文是自己在学习崔庆才的《Python3网络爬虫开发实战教程》的学习笔记系列,如果你也要这套视频教程的话,关注我公众号【小众技术】,关注后回复【PYTHON】,无套路免费送你一个学习大礼包,包括爬虫视频和电子书~

------------------------------------------------------------------华丽分割线----------------------------------------------------------------------------------------------------

1.前言

本次练习的一个实战项目是抓取猫眼电影官网的一个TOP100电影榜单,获取每部电影的片名,主演,上映日期,评分和封面等内容,并将这些信息写入Excel文件。

与书中所举的例子有些不同,写入Excel是我自己加入的一个步骤,另外还有一点,书中解析信息用的是正则表达式,而我用的是BeautifulSoup,虽然我觉得自己的代码有些冗余了,但也同样能达到相同的效果。

2.思路步骤

  1. 分析链接结构(因为有分页),页面结构
  2. 用requests进行页面信息的抓取
  3. 用BeautifulSoup进行页面信息的解析提取
  4. 用openpyxl将信息整理到Excel表格

3.源码分享

from bs4 import BeautifulSoup
from requests.exceptions import RequestException
import requests,openpyxl,pprint#1.分析链接结构(因为有分页),页面结构
'''1.此榜单共分为10页,每页展示10部电影,每部电影有6部分信息(排名,片名,主演,时间,封面,评分)2.链接结构为http://maoyan.com/board/4?offset=0,只需要更改offset的值就可以,第一页是0,第二页是10,....以此类推第10页为90
'''#2.用requests进行页面信息的抓取
def get_one_page(url):try:headers = {'User-Agent':'Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/66.0.3359.139 Safari/537.36'}res = requests.get(url,headers=headers)if res.status_code == 200:return res.textelse:return Noneexcept RequestException:return Nonemovies = {}
movie = {}#3.用BeautifulSoup进行页面信息的解析提取
for num in range(0,100,10):text = get_one_page('http://maoyan.com/board/4?offset='+str(num))beau = BeautifulSoup(text,'lxml')for i in range(0,10):#获取排名elemsIndex = beau.select('.board-index')[i]movieIndex = elemsIndex.getText()#获取电影名elemsName = beau.select('.board-img')[i]movieName = elemsName.attrs['alt']#获取主演elemsStar = beau.select('.star')[i]movieStar = elemsStar.getText().strip().lstrip('主演:')#获取上映日期及地点elemsDate = beau.select('.releasetime')[i]movieDate = elemsDate.getText().strip().lstrip('上映时间:')#获取评分elemsScoreInteger = beau.select('.integer')[i]elemsScoreFraction = beau.select('.fraction')[i]movieScore = str(elemsScoreInteger.getText())+str(elemsScoreFraction.getText())#获取封面图elemsCover = beau.select('.board-img')[i]movieCover = elemsCover.attrs['data-src'].rstrip('@160w_220h_1e_1c')movie = {'name':movieName,'star':movieStar,'date':movieDate,'score':movieScore,'cover':movieCover}movies[movieIndex] = movie#4.用openpyxl将信息整理到Excel表格
wb = openpyxl.load_workbook('movies.xlsx')
sheet = wb.get_sheet_by_name('Sheet1')
for i in range(2,len(movies)+2):sheet['A'+str(i)] = i-1sheet['B'+str(i)] = movies[str(i-1)]['name']sheet['C'+str(i)] = movies[str(i-1)]['date']sheet['D'+str(i)] = movies[str(i-1)]['star']sheet['E'+str(i)] = movies[str(i-1)]['score']sheet['F'+str(i)] = movies[str(i-1)]['cover']
wb.save('new.xlsx')1.此榜单共分为10页,每页展示10部电影,每部电影有6部分信息(排名,片名,主演,时间,封面,评分)2.链接结构为http://maoyan.com/board/4?offset=0,只需要更改offset的值就可以,第一页是0,第二页是10,....以此类推第10页为90
'''#2.用requests进行页面信息的抓取
def get_one_page(url):try:headers = {'User-Agent':'Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/66.0.3359.139 Safari/537.36'}res = requests.get(url,headers=headers)if res.status_code == 200:return res.textelse:return Noneexcept RequestException:return Nonemovies = {}
movie = {}#3.用BeautifulSoup进行页面信息的解析提取
for num in range(0,100,10):text = get_one_page('http://maoyan.com/board/4?offset='+str(num))beau = BeautifulSoup(text,'lxml')for i in range(0,10):#获取排名elemsIndex = beau.select('.board-index')[i]movieIndex = elemsIndex.getText()#获取电影名elemsName = beau.select('.board-img')[i]movieName = elemsName.attrs['alt']#获取主演elemsStar = beau.select('.star')[i]movieStar = elemsStar.getText().strip().lstrip('主演:')#获取上映日期及地点elemsDate = beau.select('.releasetime')[i]movieDate = elemsDate.getText().strip().lstrip('上映时间:')#获取评分elemsScoreInteger = beau.select('.integer')[i]elemsScoreFraction = beau.select('.fraction')[i]movieScore = str(elemsScoreInteger.getText())+str(elemsScoreFraction.getText())#获取封面图elemsCover = beau.select('.board-img')[i]movieCover = elemsCover.attrs['data-src'].rstrip('@160w_220h_1e_1c')movie = {'name':movieName,'star':movieStar,'date':movieDate,'score':movieScore,'cover':movieCover}movies[movieIndex] = movie#4.用openpyxl将信息整理到Excel表格
wb = openpyxl.load_workbook('movies.xlsx')
sheet = wb.get_sheet_by_name('Sheet1')
for i in range(2,len(movies)+2):sheet['A'+str(i)] = i-1sheet['B'+str(i)] = movies[str(i-1)]['name']sheet['C'+str(i)] = movies[str(i-1)]['date']sheet['D'+str(i)] = movies[str(i-1)]['star']sheet['E'+str(i)] = movies[str(i-1)]['score']sheet['F'+str(i)] = movies[str(i-1)]['cover']
wb.save('new.xlsx')

4.抓取效果

5.官方源码

import json
import requests
from requests.exceptions import RequestException
import re
import timedef get_one_page(url):try:headers = {'User-Agent': 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_13_3) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/65.0.3325.162 Safari/537.36'}response = requests.get(url, headers=headers)if response.status_code == 200:return response.textreturn Noneexcept RequestException:return Nonedef parse_one_page(html):pattern = re.compile('<dd>.*?board-index.*?>(\d+)</i>.*?data-src="(.*?)".*?name"><a'+ '.*?>(.*?)</a>.*?star">(.*?)</p>.*?releasetime">(.*?)</p>'+ '.*?integer">(.*?)</i>.*?fraction">(.*?)</i>.*?</dd>', re.S)items = re.findall(pattern, html)for item in items:yield {'index': item[0],'image': item[1],'title': item[2],'actor': item[3].strip()[3:],'time': item[4].strip()[5:],'score': item[5] + item[6]}def write_to_file(content):with open('result.txt', 'a', encoding='utf-8') as f:f.write(json.dumps(content, ensure_ascii=False) + '\n')def main(offset):url = 'http://maoyan.com/board/4?offset=' + str(offset)html = get_one_page(url)for item in parse_one_page(html):print(item)write_to_file(item)if __name__ == '__main__':for i in range(10):main(offset=i * 10)time.sleep(1)

《崔庆才Python3网络爬虫开发实战教程》学习笔记(3):抓取猫眼电影榜单TOP100电影,并存入Excel表格相关推荐

  1. 《崔庆才Python3网络爬虫开发实战教程》学习笔记(5):将爬虫爬取到的数据存储到TXT,Word,Excel,Json等文件中

    本篇博文是自己在学习崔庆才的<Python3网络爬虫开发实战教程>的学习笔记系列,此套教程共5章,加起来共有34节课,内容非常详细丰富!如果你也要这套视频教程的话,关注我公众号[小众技术] ...

  2. 《崔庆才Python3网络爬虫开发实战教程》学习笔记(4):解析库Xpath的使用方法总结

    本篇博文是自己在学习崔庆才的<Python3网络爬虫开发实战教程>的学习笔记系列,如果你也要这套视频教程的话,关注我公众号[小众技术],关注后回复[PYTHON],无套路免费送你一个学习大 ...

  3. 崔庆才《Python3网络爬虫开发实战》学习笔记-前言

    电子书籍在线阅读 京东购买链接

  4. 《python3网络爬虫开发实战》学习笔记:pc与安卓代理证书都安装好但是无法监听——记自己的踩坑路径

    设备版本:window:win7旗舰版.python版本:python3.7.0.pycahrm版本:PyCharm Community Edition 2019.3.3 x64. 手机:红米pro. ...

  5. 《Python3网络爬虫开发实战》学习笔记_P2

  6. 《Python3网络爬虫开发实战》学习笔记_P1

  7. [Python3网络爬虫开发实战] 7-动态渲染页面爬取-4-使用Selenium爬取淘宝商品

    在前一章中,我们已经成功尝试分析Ajax来抓取相关数据,但是并不是所有页面都可以通过分析Ajax来完成抓取.比如,淘宝,它的整个页面数据确实也是通过Ajax获取的,但是这些Ajax接口参数比较复杂,可 ...

  8. Python3网络爬虫开发实战,使用IP代理爬取微信公众号文章

    前面讲解了代理池的维护和付费代理的相关使用方法,接下来我们进行一下实战演练,利用代理来爬取微信公众号的文章. 很多人学习python,不知道从何学起. 很多人学习python,掌握了基本语法过后,不知 ...

  9. 【Python3网络爬虫开发实战】3-基本库的使用 1.2-处理异常

    前一节我们了解了请求的发送过程,但是在网络不好的情况下,如果出现了异常,该怎么办呢?这时如果不处理这些异常,程序很可能因报错而终止运行,所以异常处理还是十分有必要的. urllib的error模块定义 ...

最新文章

  1. Codeforces Round#434 DIV.2
  2. 删除二叉搜索树中的节点
  3. C++混淆点-构造函数参数
  4. signature pad java_2020-07-08 JSsignature_pad 无纸化电子签名
  5. nyoj138 哈希的简单应用(查找)
  6. 用Python编写干净 可测试 高质量的代码
  7. 洛谷P1130 红牌 动态规划
  8. 查询数据库里所有表名,字段名的语句
  9. 转帖:算法好学吗?——《大话数据结构》读者书评
  10. python numpy安装步骤-NumPy基础与安装
  11. iphone如何删除“不可删除”的描述文件?(桌面快捷方式web clib)
  12. nginx常用配置模板
  13. html超链接本地文件为什么打不开,为什么word文件的本地超链接打不开呢
  14. 涂抺mysql 李丙洋_涂抹
  15. 冬色烂漫 纯情踏雪 论著名画家冯庆冰雪画作品
  16. nginx光速入门到进阶
  17. 《人月神话》第十一弹
  18. 任意函数展开为各阶Taylor多项式的matlab程序
  19. backtrader最大的坑:没有内置处理涨跌停板
  20. 罗森伯格助力杭州G20峰会保电工程-清江智能化变电站

热门文章

  1. 推荐:程序员特有的9个搞笑习惯
  2. ESP32C3驱动舵机
  3. 如何免费使用百度文库
  4. 接地电阻测试仪测量接地电阻的规范要求
  5. 在测量面积的时候,为了精确一点,鼠标在操作面积测量时能拖动画面吗?
  6. 增加了页面的打印功能以及预览功能
  7. 真实创业故事:我在15平的出租房里死磕项目!
  8. 旧电脑 存储服务器 系统,爷爷级PC,用白菜价内存搭建内存硬盘操作系统,老系统飞起来。...
  9. 深度学习与神经网络-吴恩达-第二周优化算法
  10. shell编程经典案例,建议收藏