点击上方“CSDN”,选择“置顶公众号”

关键时刻,第一时间送达!

今天,手把手教你入门 Python 爬虫,爬取猫眼电影 TOP100 榜信息。

作者 | 丁彦军

本文经授权转自「程序人生」

对于 Python 初学者来说,爬虫技能是应该是最好入门,也是最能够有让自己有成就感的,今天,练习 Python 的手把手系列,手把手教你入门 Python 爬虫,爬取猫眼电影 TOP100 榜信息,将涉及到基础爬虫架构中的 HTML 下载器、HTML 解析器、数据存储器三大模块:

  • HTML 下载器:利用 requests 模块下载 HTML 网页;

  • HTML 解析器:利用 re 正则表达式解析出有效数据

  • 数据存储器:将有效数据通过文件或者数据库的形式存储起来

一、构造 HTML 下载器

import requests
from requests.exceptions import RequestException
headers = {'User-Agent':'Mozilla/5.0 '}
def get_one_page(url):
   try:
       res = requests.get(url,headers = headers)
       if res.status_code == 200:
           return res.text
       return None
   except RequestException:
       return None

二、构造 HTML 解析器

def 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]
       }

注意事项:

  • 在函数中本来该 return 的地方用 yield,如果用 return,在第一轮循环就会跳出,结果文件只会有一部电影。如果用 yield,函数返回的就是一个生成器,而生成器作为一种特殊的迭代器,可以用 for——in 方法,一次一次的把 yield 拿出来;

  • re.findall(pattern,string[,flags]):搜索整个 string,以列表的形式返回能匹配的全部子串,其中参数是匹配模式,如 re.S 表示点任意匹配模式,改变“.”的行为。

三、构造数据存储器


def write_to_file(content):
   with open ('result.txt', 'a',encoding='utf-8') as f:
       f.write(json.dumps(content,ensure_ascii=False) + '\n')
       f.close()

注意事项:

  • 为什么 ensure_ascii=False?原因是 json 默认是以 ASCII 来解析 code 的,由于中文不在 ASCII 编码当中,因此就不让默认 ASCII 生效;

  • 要写入特定编码的文本文件,请给 open()函数传入 encoding 参数,将字符串自动转换成指定编码。细心的童鞋会发现,以'w'模式写入文件时,如果文件已存在,会直接覆盖(相当于删掉后新写入一个文件)。如果我们希望追加到文件末尾怎么办?可以传入'a'以追加(append)模式写入。

接下来就是构造主函数,初始化各个模块,传入入口 URL,按照运行流程执行上面三大模块:

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__':
   p = Pool()
   p.map(main,[i*10 for i in range(10)])

注意事项:

  • 为了提高速度,我们引入 Pool 模块,用多线程并发抓取

执行代码后,结果如下:

本文中介绍了基础爬虫架构主要的的三个模块(HTML 下载器、HTML 解析器、数据存储器),无论大型还是小型爬虫都不会脱离这三个模块,也希望大家通过这个小小的练习对整个爬虫有个清晰的认识,欢迎大家一起谈论学习交流。

————— 推荐阅读 —————

点击图片即可阅读

50 行代码教你爬取猫眼电影 TOP100 榜所有信息相关推荐

  1. 猫眼html源码,50 行代码教你爬取猫眼电影 TOP100 榜所有信息

    点击上方"CSDN",选择"置顶公众号" 关键时刻,第一时间送达! 今天,手把手教你入门 Python 爬虫,爬取猫眼电影 TOP100 榜信息. 作者 | 丁 ...

  2. 爬取猫眼电影TOP100榜单

    爬取猫眼电影Top100榜单 分析网页 内容提取 前提:会基础的python3以及requests库,正则等. 分析网页 top100榜单网址为https://maoyan.com/board/4,通 ...

  3. Python爬取猫眼电影TOP100榜

    Python爬取猫眼电影TOP100榜 兴趣点: 这个没什么特别的兴趣,只是单纯爬猫眼练手的人太多了,所以我也打算加入他们,对猫眼员工说一声不好意思了,哈哈哈! 爬取网址: 传送门:https://m ...

  4. python爬电影_Python爬虫项目--爬取猫眼电影Top100榜

    本次抓取猫眼电影Top100榜所用到的知识点: 1. python requests库 2. 正则表达式 3. csv模块 4. 多进程 正文 目标站点分析 通过对目标站点的分析, 来确定网页结构, ...

  5. Python爬虫实战Pro | (1) 爬取猫眼电影Top100榜单

    在本篇博客中,我们将使用requests+正则表达式来爬取猫眼电影官网的TOP100电影榜单,获取每部电影的序号,片名,主演,上映日期,评分和封面等内容. 之前在Python爬虫实战(1)中我们曾爬取 ...

  6. Requests+正则表达式爬取猫眼电影(TOP100榜)

    猫眼电影网址:www.maoyan.com 前言:网上一些大神已经对猫眼电影进行过爬取,所用的方法也是各有其优,最终目的是把影片排名.图片.名称.主要演员.上映时间与评分提取出来并保存到文件或者数据库 ...

  7. 利用正则表达式爬取猫眼电影TOP100信息

    本文利用requests库和正则表达式爬取了猫眼电影TOP100电影信息,并将电影封面和标题.主演等文字信息保存在了本地.本文完整代码链接:https://github.com/iapcoder/Ma ...

  8. 100行代码教你爬取斗图网(Python多线程队列)

    100行代码教你爬取斗图网(Python多线程队列) 前言 根据之前写的两篇文章,想必大家对多线程和队列有了一个初步的了解,今天这篇文章就来实战一下,用多线程 + 队列 爬取斗图网的全网图片. 你还在 ...

  9. python爬取猫眼_python正则表达式爬取猫眼电影top100

    用正则表达式爬取猫眼电影top100,具体内容如下 #!/usr/bin/python # -*- coding: utf-8 -*- import json # 快速导入此模块:鼠标先点到要导入的函 ...

最新文章

  1. Keil5.15使用GCC编译器链接.a库文件
  2. SQL Server-游标使用
  3. linux ubuntu 获取仓库源码并构建
  4. 将一个数组中的字符串用指定字符分割开,分别放到另一个数组中
  5. 信息系统项目管理师:第9章:项目人力资源管理-历年真题
  6. python中的接口
  7. eclipse报告Plugin execution not covered by lifecycle configuration
  8. Ubuntu16.04(64位)下面使用Doxygen+Graphviz分析python代码
  9. 字节字符区别Java_【JAVA基础】字符数组与字节数组的区别
  10. 信息系统开发与管理(自考)往届题目复习
  11. 数字图像处理原理与实践:基于Visual C++开发
  12. hadoop中java部分练习_java私塾Hadoop实战-中高级部分 之 Hadoop RestFul
  13. 考研高等数学张宇30讲笔记——第五讲 一元函数微分学的几何应用
  14. linux安装yum报错Unable to locate package yum
  15. 云计算的运营方式有哪些?
  16. 二极管和稳压管的区别
  17. nginx最简单的旧域名跳转新域名
  18. max2 android9.0,乐视Max2 lineage16 安卓9.0 极致省电 纯净原生 完美root Xposed 经典版
  19. 顽固程序的卸载?试试Microsoft自带的卸载工具
  20. 如何用行式 Excel 数据制作不定行列的分组交叉统计表

热门文章

  1. 《推荐系统笔记(十七)》userCF和itemCF —— 基于领域的推荐
  2. 卷积神经网络架构理解
  3. Flutter基础—常用控件之文本
  4. 水起泡器行业调研报告 - 市场现状分析与发展前景预测
  5. 2021年中国乙醛市场趋势报告、技术动态创新及2027年市场预测
  6. 《Python游戏趣味编程》新书上架了
  7. 有一个写代码很厉害的老板是怎样一种体验?
  8. 视觉模型精度如何更上一层楼?百度技术专家实战演示调参技巧
  9. 百度CTO王海峰:百度翻译每日翻译量已达到千亿字符
  10. 登 GitHub 趋势榜首德国疫情追踪 App 号称可保疫情隐私数据无忧,你信吗?