侯体宗的博客
  • 首页
  • 人生(杂谈)
  • 技术
  • 关于我
  • 更多分类
    • 文件下载
    • 文字修仙
    • 中国象棋ai
    • 群聊
    • 九宫格抽奖
    • 拼图
    • 消消乐
    • 相册

一个简单的python爬虫程序 爬取豆瓣热度Top100以内的电影信息

Python  /  管理员 发布于 7年前   181

概述

这是一个简单的python爬虫程序,仅用作技术学习与交流,主要是通过一个简单的实际案例来对网络爬虫有个基础的认识。

什么是网络爬虫

简单的讲,网络爬虫就是模拟人访问web站点的行为来获取有价值的数据。专业的解释:百度百科

分析爬虫需求

确定目标

爬取豆瓣热度在Top100以内的电影的一些信息,包括电影的名称、豆瓣评分、导演、编剧、主演、类型、制片国家/地区、语言、上映日期、片长、IMDb链接等信息。

分析目标

1.借助工具分析目标网页

首先,我们打开豆瓣电影・热门电影,会发现页面总共20部电影,但当查看页面源代码当时候,在源代码中根本找不到这些电影当信息。这是为什么呢?原来豆瓣在这里是通过ajax技术获取电影信息,再动态的将数据加载到页面中的。这就需要借助Chrome的开发者工具,先找到获取电影信息的API。

然后对电影详情页进行分析

思路分析

具体实现

开发环境

python3.6

pycharm

主要依赖库

urllib -- 基础性的网络相关操作

lxml -- 通过xpath语法解析HTML页面

json -- 对通过API获取的JSON数据进行操作

re -- 正则操作

代码实现

from urllib import requestfrom lxml import etreeimport jsonimport reimport ssl# 全局取消证书验证ssl._create_default_https_context = ssl._create_unverified_contextdef get_headers():  """  返回请求头信息  :return:  """  headers = {    'User-Agent': "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_12_6) "           "AppleWebKit/537.36 (KHTML, like Gecko) "           "Chrome/65.0.3325.181 Safari/537.36"  }  return headersdef get_url_content(url):  """  获取指定url的请求内容  :param url:  :return:  """  content = ''  headers = get_headers()  res = request.Request(url, headers=headers)  try:    resp = request.urlopen(res, timeout=10)    content = resp.read().decode('utf-8')  except Exception as e:    print('exception: %s' % e)  return contentdef parse_content(content):  """  解析网页  :param content:  :return:  """  movie = {}  html = etree.HTML(content)  try:    info = html.xpath("//div[@id='info']")[0]    movie['director'] = info.xpath("./span[1]/span[2]/a/text()")[0]    movie['screenwriter'] = info.xpath("./span[2]/span[2]/a/text()")[0]    movie['actors'] = '/'.join(info.xpath("./span[3]/span[2]/a/text()"))    movie['type'] = '/'.join(info.xpath("./span[@property='v:genre']/"          "text()"))    movie['initialReleaseDate'] = '/'.\      join(info.xpath(".//span[@property='v:initialReleaseDate']/text()"))    movie['runtime'] = \      info.xpath(".//span[@property='v:runtime']/text()")[0]    def str_strip(s):      return s.strip()    def re_parse(key, regex):      ret = re.search(regex, content)      movie[key] = str_strip(ret[1]) if ret else ''    re_parse('region', r'<span class="pl">制片国家/地区:</span>(.*?)<br/>')    re_parse('language', r'<span class="pl">语言:</span>(.*?)<br/>')    re_parse('imdb', r'<span class="pl">IMDb链接:</span> <a href="https:/article/(.*?)" rel="external nofollow" ' r'target="_blank" >')  except Exception as e:    print('解析异常: %s' % e)  return moviedef spider():  """  爬取豆瓣前100部热门电影  :return:  """  recommend_moives = []  movie_api = 'https://movie.douban.com/j/search_subjects?' \        'type=movie&tag=%E7%83%AD%E9%97%A8&sort=recommend' \        '&page_limit=100&page_start=0'  content = get_url_content(movie_api)  json_dict = json.loads(content)  subjects = json_dict['subjects']  for subject in subjects:    content = get_url_content(subject['url'])    movie = parse_content(content)    movie['title'] = subject['title']    movie['rate'] = subject['rate']    recommend_moives.append(movie)    print(len(recommend_moives))  print(recommend_moives)if __name__ == '__main__':  spider()

效果

总结

本文较详细的阐述了一个爬虫从需求->分析->实现的过程,并给出了具体的代码实现。通过对本文的学习,我们可以了解到网络爬虫的一些基本的知识,以及python的一些基本库的使用方法。接下来我会使用一些高级些的网络操作相关的库以及对抓取到的数据做个存储的方式,来更深层次的理解python网络爬虫。

特别声明

1. 本文涉及到的豆瓣网是国内知名网站,若有侵权之处,请告知。
2. 本文属作者原创,转载请标明出处;未经允许,不得用于商业用途。
3. 本文只是用作网络爬虫技术学习交流,读者涉及到的任何侵权问题,与本文作者无关。

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持。


  • 上一条:
    Python实现读取字符串按列分配后按行输出示例
    下一条:
    Python简单实现阿拉伯数字和罗马数字的互相转换功能示例
  • 昵称:

    邮箱:

    0条评论 (评论内容有缓存机制,请悉知!)
    最新最热
    • 分类目录
    • 人生(杂谈)
    • 技术
    • linux
    • Java
    • php
    • 框架(架构)
    • 前端
    • ThinkPHP
    • 数据库
    • 微信(小程序)
    • Laravel
    • Redis
    • Docker
    • Go
    • swoole
    • Windows
    • Python
    • 苹果(mac/ios)
    • 相关文章
    • 在python语言中Flask框架的学习及简单功能示例(0个评论)
    • 在Python语言中实现GUI全屏倒计时代码示例(0个评论)
    • Python + zipfile库实现zip文件解压自动化脚本示例(0个评论)
    • python爬虫BeautifulSoup快速抓取网站图片(1个评论)
    • vscode 配置 python3开发环境的方法(0个评论)
    • 近期文章
    • 在windows10中升级go版本至1.24后LiteIDE的Ctrl+左击无法跳转问题解决方案(0个评论)
    • 智能合约Solidity学习CryptoZombie第四课:僵尸作战系统(0个评论)
    • 智能合约Solidity学习CryptoZombie第三课:组建僵尸军队(高级Solidity理论)(0个评论)
    • 智能合约Solidity学习CryptoZombie第二课:让你的僵尸猎食(0个评论)
    • 智能合约Solidity学习CryptoZombie第一课:生成一只你的僵尸(0个评论)
    • 在go中实现一个常用的先进先出的缓存淘汰算法示例代码(0个评论)
    • 在go+gin中使用"github.com/skip2/go-qrcode"实现url转二维码功能(0个评论)
    • 在go语言中使用api.geonames.org接口实现根据国际邮政编码获取地址信息功能(1个评论)
    • 在go语言中使用github.com/signintech/gopdf实现生成pdf分页文件功能(95个评论)
    • gmail发邮件报错:534 5.7.9 Application-specific password required...解决方案(0个评论)
    • 近期评论
    • 122 在

      学历:一种延缓就业设计,生活需求下的权衡之选中评论 工作几年后,报名考研了,到现在还没认真学习备考,迷茫中。作为一名北漂互联网打工人..
    • 123 在

      Clash for Windows作者删库跑路了,github已404中评论 按理说只要你在国内,所有的流量进出都在监控范围内,不管你怎么隐藏也没用,想搞你分..
    • 原梓番博客 在

      在Laravel框架中使用模型Model分表最简单的方法中评论 好久好久都没看友情链接申请了,今天刚看,已经添加。..
    • 博主 在

      佛跳墙vpn软件不会用?上不了网?佛跳墙vpn常见问题以及解决办法中评论 @1111老铁这个不行了,可以看看近期评论的其他文章..
    • 1111 在

      佛跳墙vpn软件不会用?上不了网?佛跳墙vpn常见问题以及解决办法中评论 网站不能打开,博主百忙中能否发个APP下载链接,佛跳墙或极光..
    • 2016-10
    • 2016-11
    • 2018-04
    • 2020-03
    • 2020-04
    • 2020-05
    • 2020-06
    • 2022-01
    • 2023-07
    • 2023-10
    Top

    Copyright·© 2019 侯体宗版权所有· 粤ICP备20027696号 PHP交流群

    侯体宗的博客