以下笔记,作为参考借鉴,如有疑问可以联系我进行交流探讨!

代码思路很简单,简单概括为:
   首先利用requests的get方法获取页面的html文件,之后对得到的html文件进行相对应的正则处理,然后把爬取到的数据保存到本地。

  1. # -*- coding: utf-8 -*-
  2. """
  3. 爬取的相关信息有:电影名次、电影名称、主演、上映时间、评分
  4.  
  5. """
  6.  
  7. import re
  8. import time
  9. import requests
  10. from multiprocessing import Pool
  11. from http.cookiejar import CookieJar
  12. from requests.exceptions import RequestException
  13.  
  14. #创建requests回话
  15. s = requests.Session()
  16. #对需要登录或者需要利用cookie登录的,可以使用CookieJar( )这个方法。
  17. s.cookies = CookieJar()
  18.  
  19. #创建个头文件,里面的用户我习惯使用这个"Baiduspider+"。
  20. header = {
  21.     'user-agent': 'Baiduspider+',
  22. }
  23.  
  24. #根据url获取HTML文件
  25. def getHTML(url, code='utf-8'):
  26.     try:
  27.         response = s.get(url, headers=header)
  28.         response.raise_for_status()
  29.         response.encoding = code
  30.         return response.text
  31.     except RequestException:
  32.         print('getHTML Error')
  33.  
  34. #对HTML进行正则表达式处理
  35. def parseHTML(html):
  36.     pattern = re.compile('.*?board-index-.*?">(.*?)</i>.*?class="name">.*?'
  37.                          + '"boarditem-click".*?"{movieId:.*?}">+(.*?)</a>.*?class="star">'
  38.                          + '(.*?)</p>.*?class="releasetime">(.*?)</p>.*?<p class="score">'
  39.                          + '<i class="integer">(.*?)</i><i class="fraction">(.*?)</i></p>', re.S)
  40.  
  41.  #需要把html字符串化,否则报错:TypeError: expected string or bytes-like object
  42.     items = re.findall(pattern, str(html))
  43.  
  44.     for item in items:
  45.         yield {
  46.             '序号': item[0],
  47.             '电影名': item[1],
  48.             '主演': item[2].strip(),
  49.             '上映时间': item[3],
  50.             '评分': item[4] + item[5],
  51.         }
  52.  
  53. #把数据保存到本地
  54. def writePAGE(content):
  55.     with open('result.txt', 'a' ) as f:
  56.         f.write(str(content) + '\n')
  57.         f.close()
  58.  
  59. #编写主函数
  60. def main(page):
  61.     url = 'https://maoyan.com/board/4?offset=' + str(page)
  62.     html = getHTML(url)
  63.     items = parseHTML(html)
  64.  
  65.     for item in items:
  66.         print(item)
  67.         writePAGE(item)
  68.  
  69.  
  70. if __name__ == '__main__':
  71.     start = time.time()
  72.  
  73. #多进程爬取
  74.     pool = Pool()
  75.     pool.map(main, [page * 10 for page in range(10)])
  76.     pool.close()  # 关闭进程池,不接受新的进程
  77.     pool.join()  # 主进程阻塞等待子进程的退出
  78.  
  79.     end = time.time()
  80. #打印出最后运行的时间
  81.     print('It spends %s s' % (end - start))

  

利用Python3的requests和re库爬取猫眼电影笔记的更多相关文章

  1. 用requests库爬取猫眼电影Top100

    这里需要注意一下,在爬取猫眼电影Top100时,网站设置了反爬虫机制,因此需要在requests库的get方法中添加headers,伪装成浏览器进行爬取 import requests from re ...

  2. 一起学爬虫——使用xpath库爬取猫眼电影国内票房榜

    之前分享了一篇使用requests库爬取豆瓣电影250的文章,今天继续分享使用xpath爬取猫眼电影热播口碑榜 XPATH语法 XPATH(XML Path Language)是一门用于从XML文件中 ...

  3. python学习(23)requests库爬取猫眼电影排行信息

    本文介绍如何结合前面讲解的基本知识,采用requests,正则表达式,cookies结合起来,做一次实战,抓取猫眼电影排名信息. 用requests写一个基本的爬虫 排行信息大致如下图 网址链接为ht ...

  4. 利用python的requests和BeautifulSoup库爬取小说网站内容

    1. 什么是Requests? Requests是用Python语言编写的,基于urllib3来改写的,采用Apache2 Licensed 来源协议的HTTP库. 它比urllib更加方便,可以节约 ...

  5. requests库爬取猫眼电影“最受期待榜”榜单 --网络爬虫

    目标站点:https://maoyan.com/board/6 # coding:utf8 import requests, re, json from requests.exceptions imp ...

  6. PYTHON 爬虫笔记八:利用Requests+正则表达式爬取猫眼电影top100(实战项目一)

    利用Requests+正则表达式爬取猫眼电影top100 目标站点分析 流程框架 爬虫实战 使用requests库获取top100首页: import requests def get_one_pag ...

  7. 爬虫基本库request使用—爬取猫眼电影信息

    使用request库和正则表达式爬取猫眼电影信息. 1.爬取目标 猫眼电影TOP100的电影名称,时间,评分,等信息,将结果以文件存储. 2.准备工作 安装request库. 3.代码实现 impor ...

  8. Python3爬取猫眼电影信息

    Python3爬取猫眼电影信息 import json import requests from requests.exceptions import RequestException import ...

  9. 爬虫--requests爬取猫眼电影排行榜

    '''目标:使用requests分页爬取猫眼电影中榜单栏目中TOP100榜的所有电影信息,并将信息写入文件URL地址:http://maoyan.com/board/4 其中参数offset表示其实条 ...

随机推荐

  1. PHP保留两位小数显示

    <?php $num = '10.4567'; //第一种:利用round()对浮点数进行四舍五入 echo round($num,2).PHP_EOL; //10.46 //第二种:利用spr ...

  2. AOP+Redis锁防止表单重复提交

    确保分布式锁同时满足以下四个条件 1.互斥性.在任意时刻,只有一个客户端能持有锁 2.不会发生死锁.即使有一个客户端在持有锁的期间崩溃而没有主动解锁,也能保证后续其他客户端能加锁 3.具有容错性.只要 ...

  3. [转帖]为什么需要 Zookeeper

    为什么需要 Zookeeper 柳树 学习&思考&写作 | 公众号:柳树的絮叨叨 ​关注他 童话 . 沈万马 等 351 人赞同了该文章 很多中间件,比如Kafka.Hadoop.HB ...

  4. logrus 剖析之滚动日志

    在实际开发过程中,为了节省磁盘,日志需要按照时间或者大小维度进行切割分成多分,归档过期的日志,删除久远的日志.这个就是在日常开发中经常遇见的日志滚动(log rotation) 那么在 logrus ...

  5. Dubbo快速入门 一

    1.分布式基础理论 1.1).什么是分布式系统? “分布式系统是若干独立计算机的集合,这些计算机对于用户来说就像单个相关系统” 分布式系统(distributed system)是建立在网络之上的软件 ...

  6. 3.03定义常量之enum

    [注:本程序验证是使用vs2013版] #include <stdio.h> #include <stdlib.h> #include <string.h> #pr ...

  7. [UOJ #167]【UR #11】元旦老人与汉诺塔

    题目大意:给你一个有$n$个盘子的汉诺塔状态$S$,问有多少种不同的操作方法,使得可以在$m$步以内到达状态$T$.$n,m\leqslant100$ 题解:首先可以知道的是,一个状态最多可以转移到其 ...

  8. HTTPDNS

    传统 DNS 缺点 1.域名缓存问题     它可以在本地做一个缓存,也就是说,不是每一个请求,它都会去访问权威 DNS 服务器,而是访问过一次就把结果缓存到自己本地,当其他人来问的时候,直接就返回这 ...

  9. c# $和@ 简化字符串格式化拼接

    int age=18; Console.WriteLine($"XiaoMing is \"{age}\" {{ years}} old"); Console. ...

  10. 聊聊GIS中的坐标系|再版

    本文约6500字,建议阅读时间15分钟. 作者:博客园/B站/知乎/csdn/小专栏 @秋意正寒 版权:转载请告知,并在转载文上附上转载声明与原文链接(https://www.cnblogs.com/ ...