代码如下

  1. # coding=utf-8
  2. import requests
  3. from requests.exceptions import RequestException
  4. import re
  5. import json
  6. from multiprocessing import Pool #引入进程池
  7.  
  8. def get_one_page(url):
  9. headers = {
  10. 'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) '
  11. 'Chrome/65.0.3325.181 Safari/537.36'
  12. }
  13. try:
  14. response = requests.get(url, headers=headers)
  15. if response.status_code == 200:
  16. return response.text
  17. return None
  18. except RequestException:
  19. return None
  20.  
  21. def parse_one_page(html):
  22. #得到排名,简报,标题,主演,上映时间,分数
  23. pattern = re.compile('<dd>.*?board-index.*?>(\d+)</i>.*?data-src="(.*?)".*?name"><a.*?>(.*?)</a>'
  24. '.*?star">(.*?)</p>.*?releasetime">(.*?)</p>'
  25. '.*?integer">(.*?)</i>.*?fraction">(.*?)</i>.*?</dd>', re.S)
  26.  
  27. items = re.findall(pattern, html)
  28.  
  29. #对输出内容进行格式化,将原先的元组格式转化为字典
  30. for item in items:
  31. yield {
  32. 'index': item[0],
  33. 'image': item[1],
  34. 'title': item[2],
  35. 'actor': item[3].strip()[3:],
  36. 'time': item[4].strip()[5:],
  37. 'score': item[5]+item[6]
  38. }
  39.  
  40. #json.dumps方法将字典转变为字符串
  41. #encoding和下面的ascii如果不写的话resul.txt文件内容为乱码
  42. def write_to_file(content):
  43. with open('result.txt', 'a', encoding='utf-8') as f:
  44. f.write(json.dumps(content, ensure_ascii=False) + '\n')
  45. f.close()
  46.  
  47. #offset用来表示不同页面
  48. def main(offset):
  49. url = 'http://maoyan.com/board/4?offset=' + str(offset)
  50. html = get_one_page(url)
  51. for item in parse_one_page(html):
  52. print(item)
  53. write_to_file(item)
  54.  
  55. if __name__ == '__main__':
  56. '''
  57. 抓取top100的影片信息的一般方法,i*10的原因是网址上每页offset是按10的倍数变化的
  58. for i in range(10):
  59. main(i*10)
  60. '''
  61. #使用进程池提高效率
  62. pool = Pool()
  63. pool.map(main, [i*10 for i in range(10)])

使用pyquery简单实现

  1. from pyquery import PyQuery as pq
  2.  
  3. headers={ 'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/65.0.3325.181 Safari/537.36'}

  4. def write_to_file(content):
    with open('result.txt', 'a') as f:
    f.write(content)
  5.  
  6. def main(offset):
  7. url='http://maoyan.com/board/4?offset=' + str(offset)
  8. doc=pq(url, headers=headers)
  9.  
  10. dd=doc('dd').text()
  11. for x in dd.split(" "):
  12. print(x)
  13. print('\n')
    write_to_file(x + '\n')
  14. """
    合些的话可以如下
    c=''.join([x, '\n'])
    print(c)
    """

  15. if __name__ == '__main__':
  16. for i in range(10):
  17. main(i*10)

爬虫实战1:使用requests和正则爬取电影信息的更多相关文章

  1. 爬虫系列(十) 用requests和xpath爬取豆瓣电影

    这篇文章我们将使用 requests 和 xpath 爬取豆瓣电影 Top250,下面先贴上最终的效果图: 1.网页分析 (1)分析 URL 规律 我们首先使用 Chrome 浏览器打开 豆瓣电影 T ...

  2. 爬虫系列(十一) 用requests和xpath爬取豆瓣电影评论

    这篇文章,我们继续利用 requests 和 xpath 爬取豆瓣电影的短评,下面还是先贴上效果图: 1.网页分析 (1)翻页 我们还是使用 Chrome 浏览器打开豆瓣电影中某一部电影的评论进行分析 ...

  3. Node.js 爬虫爬取电影信息

    Node.js 爬虫爬取电影信息 我的CSDN地址:https://blog.csdn.net/weixin_45580251/article/details/107669713 爬取的是1905电影 ...

  4. python爬虫实战(六)--------新浪微博(爬取微博帐号所发内容,不爬取历史内容)

    相关代码已经修改调试成功----2017-4-13 详情代码请移步我的github:https://github.com/pujinxiao/sina_spider 一.说明 1.目标网址:新浪微博 ...

  5. requests+lxml+xpath爬取电影天堂

    1.导入相应的包 import requests from lxml import etree 2.原始ur url="https://www.dytt8.net/html/gndy/dyz ...

  6. 一个简单python爬虫的实现——爬取电影信息

    最近在学习网络爬虫,完成了一个比较简单的python网络爬虫.首先为什么要用爬虫爬取信息呢,当然是因为要比人去收集更高效. 网络爬虫,可以理解为自动帮你在网络上收集数据的机器人. 网络爬虫简单可以大致 ...

  7. python3爬虫-通过selenium登陆拉钩,爬取职位信息

    from selenium import webdriver from selenium.common.exceptions import NoSuchElementException from se ...

  8. 爬虫实战【11】Python获取豆瓣热门电影信息

    之前我们从猫眼获取过电影信息,而且利用分析ajax技术,获取过今日头条的街拍图片. 今天我们在豆瓣上获取一些热门电影的信息. 页面分析 首先,我们先来看一下豆瓣里面选电影的页面,我们默认选择热门电影, ...

  9. 爬虫实例之使用requests和Beautifusoup爬取糗百热门用户信息

    这次主要用requests库和Beautifusoup库来实现对糗百的热门帖子的用户信息的收集,由于糗百的反爬虫不是很严格,也不需要先登录才能获取数据,所以较简单. 思路,先请求首页的热门帖子获得用户 ...

随机推荐

  1. Ssm框架常见报错

    错误1: The origin server did not find a current representation for the target resource or is not willi ...

  2. 并发包下常见的同步工具类详解(CountDownLatch,CyclicBarrier,Semaphore)

    目录 1. 前言 2. 闭锁CountDownLatch 2.1 CountDownLatch功能简介 2.2 使用CountDownLatch 2.3 CountDownLatch原理浅析 3.循环 ...

  3. 表示集合的数据结构:数组(Array),对象(Object),Map和Set

    Map和Set是ES6标准新增的数据类型 Map: 是一组键值对的结构,使用一个二维数组来初始化Map,例如: var m = new Map([['xiaohong',100],['xiaolan' ...

  4. Golang笔记之变量

    哈哈 package main // 关键字var 声明变量 类型信息放在变量名后 //声明一个int型变量 var v1 int //声明一个string类型 var v2 string //声明多 ...

  5. Linux automake命令

    1)automake 使用教程 http://loftor.com/archives/automake.html 2)configure.in Makefile.am解析 http://blog.cs ...

  6. post传参

    1.form表单 2.数据流

  7. 初识STM32标准库

    1.CMSIS 标准及库层次关系 CMSIS 标准中最主要的为 CMSIS 核心层,它包括了: STM32标准库可以从官网获得: 在使用库开发时,我们需要把 libraries 目录下的库函数文件添加 ...

  8. numpy中tile()函数

    函数形式: tile(A,rep) 功能:重复A的各个维度 参数类型: - A: Array类的都可以,即A是一个ndarry数组- rep:A沿着各个维度重复的次数,表示变成的矩阵的形状,例如rep ...

  9. Kubernetes基本原理与示例

    1. Kubernetes介绍 基本概念 Pod Pod是Kubernetes的基本操作单元,把相关的一个或多个容器构成一个Pod,通常Pod里的容器运行相同的应用.Pod包含的容器运行在同一个Nod ...

  10. Web前后端数据交换技术和规范发展史:Form、Ajax、Comet、Websocket

    第一阶段:Form web应用想要与服务器交互,必须提交一个表单(form).服务器接收并处理该表单,然后返回一个全新的页面. 缺点:前后两个页面需要更新的数据可能很少,这个过程可能传输了很多之前那个 ...