老版:Python 爬取内容存入Excel实例
这是之前用python2.7写的,最近看博友评论,因网页结构调整和python3的普及,代码运行后报错、得不到数据。于是,使用python3重写了一次,顺便做下改进。
网页解析可以去看下之前的文章,这里不作赘述。
环境python 3.6.5
所需包安装pip install requests bs4 lxml openpyxl

1、抓取代码

先上代码,后分析

'''function:爬取豆瓣top250的电影信息,并写入Excel文件env:python3.6.5author:jxc
'''
import timeimport requests
import re
from openpyxl import workbook  # 写入Excel表所用
from bs4 import BeautifulSoup as bsclass Top250:def __init__(self):#起始地址self.start_url = 'https://movie.douban.com/top250'#请求头,浏览器模拟self.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',}#爬取页数self.page_num = 10'''url拼接'''def get_page_url(self):n = 0 #第一页开始,下标0while n<self.page_num:yield self.start_url+'?start={}&filter='.format(n*25)n += 1'''获取页面源码'''def getHtml(self):gu = self.get_page_url() #url生成器for url in gu:html = requests.get(url,headers=self.headers).textyield html'''电影数据提取'''def getData(self):gh = self.getHtml() # html源码生成器for html in gh: # html:网页源码soup = bs(html, 'lxml')for info in soup.find_all('div', class_='info'):c_name = info.find('span',class_='title').text.strip() # 得到电影中文名message = info.select('div.bd p')[0].text.strip() #得到导演、主演、年份、地区信息yat = re.search('[0-9]+.*\/?', message).group().split('/') #得到年份、地区、类型信息列表year,area,type = yat[0],yat[1],yat[2]#得到年份、地区、类型da = re.search('导演.+\s',message).group().strip()+'...' #得到导演、主演混合信息director = re.findall('导演:(.+?)\s',da)[0].strip() #得到导演信息#得到主演信息,不存在时发生异常,进行异常处理try:mainActors = re.findall('主演:(.+?)[.,]+',da)[0].strip()except IndexError:mainActors = '暂无主演信息'mark_info = info.find('div',class_='star') #得到评分、评价人数混合信息score= mark_info.find('span',class_='rating_num').text.strip()#得到评分count = re.search('[0-9]+',mark_info.select('span')[3].text).group() #得到评价人数#得到简介,捕捉不存在时的异常try:quote = info.select('p.quote span')[0].text.strip()except IndexError:quote = '该影片暂时无简介'yield [c_name,year,area,type,director,mainActors,score,count,quote]'''保存到excel文件:param file_name:文件名'''def saveToExcel(self,file_name):wb = workbook.Workbook()  # 创建Excel对象ws = wb.active  # 获取当前正在操作的表对象ws.append(['电影名', '年份', '地区', '剧情类型', '导演', '主演', '评分', '评论人数', '简介'])gd = self.getData() #数据生成器for data in gd:ws.append(data)wb.save(file_name)if __name__ == '__main__':start = time.time()top = Top250()try:top.saveToExcel('top250.xlsx')print('抓取成功,用时%4.2f'%(time.time()-start)+'秒')except Exception as e:print('抓取失败,原因:%s'%e)
2、代码要点分析
  • 在获取各属性(名称、导演、主演…)数据时,大量使用了re进行匹配抓取,不熟悉的可以先去看下正则表达式-菜鸟教程
  • re.findall()方法,在前后加上不变的条件,变化的部分使用()包裹,这样就能直接得到想要的信息,不用再次切片获取。如代码中的re.findall('导演:(.+?)\s',da)[0],就能直接得到导演信息。
  • 部分电影无主演或简介信息,所以使用try...except捕获异常
3、本次改进的地方
  • 封装为类,提高了代码扩展性
  • 改进了数据抓取方法,提高了代码效率
  • 使用yield生成器,实现抓取流水线操作
  • 改进了信息缺失的判断逻辑,并进行异常处理

欢迎留言讨论~
【不想研究代码的,博主将结果上传到了csdn,资源直达——>top250.xlsx】

博主其他文章推荐:

[1] 【python实用特性】- 迭代、可迭代对象、迭代器

[2] 【python实用特性】- 列表生成式

[3] 【python实用特性】- yield生成器

[4] 【python实用特性】- 装饰器

[5] 【Matplotlib】-自定义坐标轴刻度完成20万+数据的可视化

[6] Python+selenium实现自动爬取实例

[7] requests 设置请求头、代理

[8] requests使用cookie模拟登陆豆瓣

[9] requests使用session保持会话

python爬取豆瓣Top250-改进版相关推荐

  1. Python爬取豆瓣Top250电影中2000年后上映的影片信息

    Python爬取豆瓣Top250电影中2000年后上映的影片信息 前言 双十一前加在京东购物车的一个东西,价格330,Plus会员用券后差不多310.双十一当天打开看了下399,还得去抢满300减10 ...

  2. Python爬取豆瓣Top250电影可见资料并保存为excel形式

    Python爬取豆瓣Top250电影可见资料并保存为excel形式 利用requests第三方库实现网页的元素爬取,再使用openpyxl库进行信息的录入. 具体思路 1.分析网页的headers. ...

  3. python爬取豆瓣TOP250生成Excel表格例子最新

    一 确定爬取网站 因为初学,所以按照网上的教程爬取豆瓣TOP250的网站.网址: https://movie.douban.com/top250 二 编写爬虫程序 详细过程就不再一 一讲解,可以看代码 ...

  4. python爬取豆瓣top250信息并存入数据库中 | sqlite3

    文章目录 代码: 遇到的问题: 1.关于数据库表格中出现:NBSP 2. 为什么HTML字段中会出现&NBSP? 3.java.io.IOException: 不能删除数据库文件 4. 关于d ...

  5. Python爬取豆瓣Top250电影排名

    # -*- codeing = utf-8 -*- # @Time: 2021/12/27 14:30 # @Author: 买欣怡 # @File: 7. spider-豆瓣.py # @Softw ...

  6. Python爬取豆瓣Top250的电影

    流程图如下: 爬取网页-解析网页-存储数据到Excel和数据库中 源代码如下: 如果被豆瓣封Ip(一般被封第二天就解封了),可以自己设置代理Ip,或者自己登录账号后将Cookie放到header中. ...

  7. python爬取豆瓣TOP250电影

    按照小甲鱼的爬虫教程,再自己修改了一部分. 废话不多说,直接贴代码 import requests from bs4 import BeautifulSoup import redef open_ur ...

  8. [python爬虫] BeautifulSoup和Selenium对比爬取豆瓣Top250电影信息

    这篇文章主要对比BeautifulSoup和Selenium爬取豆瓣Top250电影信息,两种方法从本质上都是一样的,都是通过分析网页的DOM树结构进行元素定位,再定向爬取具体的电影信息,通过代码的对 ...

  9. 利用python爬取豆瓣电影top250

    利用python爬取豆瓣电影top250: 注:本内容只是作为个人学习记录 1.业务分析 进入网页https://movie.douban.com/top250 可以看见每部电影都呈现在眼前,点击电影 ...

  10. Python爬取豆瓣电影top250的电影信息

    Python爬取豆瓣电影top250的电影信息 前言 一.简介 二.实例源码展示 小结 前言 相信很多小伙伴在学习网络爬虫时,老师们会举一些实例案例讲解爬虫知识,本文介绍的就是经典爬虫实际案例–爬取豆 ...

最新文章

  1. 在百度工作是一种什么样的体验?
  2. python字典输出_Python字典/循环输出
  3. less加管道tail_linux中cat、more、less、tail、head命令的区别
  4. mysql数据回滚占用id吗_mysqlbing 回滚数据问题
  5. Unity内置的三套消息发送机制的应用实例
  6. 关于在大网段中拆出小网段地址
  7. 用jQuery实现banner图片切换
  8. mysql获取当天,昨天,本周,本月,上周,上月的起始时间
  9. linux awk数组使用
  10. CenterNet :Objects as Points/CenterTrack:Tracking Objects as Points
  11. SQL 从入门到精通
  12. Executive functions (执行功能)
  13. 软件项目风险控制-公益讲座视频,供大家学习参考。
  14. 信用卡业务愈卷愈烈,银行机构如何突围?
  15. CURL命令参数详解
  16. 大数据带来新机遇:如何利用大数据技术优化跨境电商运营?
  17. vue报错Navigating to current location (/login) is not allowed
  18. 销量破亿,董洁直播间凭何出圈?
  19. 萨姆·阿尔特曼:如何获得成功(How To Be Successful)译文
  20. 经典影视剧《大宋提刑官》——老剧重看,再添心得

热门文章

  1. 读凯文·米特尼克的黑客传奇经历
  2. oracle 客户端 ora-12162,oracle 连接不上ORA-12162: TNS:net service name is incorrectly specified的另外一种可能原因...
  3. android 高仿国美,iOS高仿国美、二次元应用、点赞喷射动画、电影筛选页等源码...
  4. Unity 如何获取安卓设备的SN号
  5. 数据挖掘和机器学习有什么联系,主要有什么区别?
  6. 2015阿里天池大数据竞赛-Solution
  7. VC打印机使用 win95环境的下例子测试
  8. java输入身高体重计算体脂率_追求健康的体脂率,比追求体重数更有意义:一个公式教你计算...
  9. 车载一体机凯立德导航升级
  10. 雄迈摄像头ffmpeg转码推送至websocket