1. """
  2. 抓取猫眼电影TOP100
  3. """
  4.  
  5. import re
  6. import time
  7. import requests
  8.  
  9. from bs4 import BeautifulSoup
  10.  
  11. class SpiderMaoyan(object):
  12.  
  13. def __init__(self):
  14. # 通过分析URL可以发现, 猫眼电影TOP100页面是通过 offset + 10 来分页的
  15. self.url = "http://maoyan.com/board/4?offset={0}"
  16. # 设置一下UA, 否则有可能提示你访问被禁止了
  17. self.headers = {
  18. "User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) "
  19. "Chrome/66.0.3359.139 Safari/537.36"
  20. }
  21. # 定义需要提取的内容字段
  22. self.fields = ("id", "name", "movieUrl", "imgUrl", "star", "releaseTime", "score")
  23.  
  24. def handler(self, offset=0):
  25.  
  26. while offset < 100:
  27. response = requests.get(self.url.format(offset), headers=self.headers)
  28. if response.status_code == 200:
  29. print("INFO -> Current URL: <%s>" % response.url)
  30. # 编码处理一下, 不然有可能中文显示乱码
  31. r_html = response.text.encode(response.encoding).decode("utf-8")
  32. # 构建一个 BeautifulSoup 对象, 用于后续的标签、内容提取
  33. soup = BeautifulSoup(r_html, "html5lib")
  34. # 继续分析网页源代码, 发现每部影片都存在 <dd></dd> 标签中
  35. tags = soup.select("dd")
  36. # 提取内容
  37. for tag in tags:
  38. # id、name、movieUrl
  39. obj = tag.find("p", class_="name").select_one("a")
  40. _id = re.search(r"movieId:(\d+)", obj.get("data-val")).group(1)
  41. _name = obj.string
  42. _movieUrl = "http://maoyan.com" + obj.get("href")
  43. # img
  44. # Tips: 可以将图片地址后面的分辨率去掉, 保存高清大图地址 .split("@")[0]
  45. _imgUrl = tag.find("img", class_="board-img").get("data-src")
  46. # star
  47. # Tips: 中文标点
  48. _star = tag.find("p", class_="star").string.strip().split(":")[-1]
  49. # releaseTime
  50. # Tips: 中文标点
  51. _releaseTime = tag.find("p", class_="releasetime").string.split(":")[-1]
  52. # score
  53. _score = tag.find("p", class_="score").get_text()
  54.  
  55. # 接下来就可以将数据写入存储了
  56. # Tips: 这种 SQL 生成方式有必要验证 key/val 是否成对出现
  57. print(
  58. "INSERT INTO TABLE_NAME (%s) VALUE %s;" % (
  59. ", ".join(self.fields), tuple([_id, _name, _movieUrl, _imgUrl, _star, _releaseTime, _score])
  60. )
  61. )
  62.  
  63. # 偏移量自增
  64. offset += 10
  65. # 有必要停顿一下
  66. time.sleep(.9)
  67. else:
  68. print(response.reason)
  69. exit(999)
  70.  
  71. if __name__ == "__main__":
  72.  
  73. spider = SpiderMaoyan()
  74. spider.handler()

Python Spider 抓取猫眼电影TOP100的更多相关文章

  1. Python爬虫之requests+正则表达式抓取猫眼电影top100以及瓜子二手网二手车信息(四)

    requests+正则表达式抓取猫眼电影top100 一.首先我们先分析下网页结构 可以看到第一页的URL和第二页的URL的区别在于offset的值,第一页为0,第二页为10,以此类推. 二.< ...

  2. python应用-爬取猫眼电影top100

    import requests import re import json import time from requests.exceptions import RequestException d ...

  3. 爬虫_python3_抓取猫眼电影top100

    使用urllib,request,和正则表达式,多线程进行秒抓,以及异常处理结果: import urllib,re,json from multiprocessing import Pool#多进程 ...

  4. Requests+正则表达式抓取猫眼电影TOP100

    spider.py # -*- coding:utf-8 -*- import requests import re import json import codecs from requests.e ...

  5. python requests抓取猫眼电影

    1. 网址:http://maoyan.com/board/4? 2. 代码: import json from multiprocessing import Pool import requests ...

  6. 抓取猫眼电影top100的正则、bs4、pyquery、xpath实现方法

    import requests import re import json import time from bs4 import BeautifulSoup from pyquery import ...

  7. Python爬虫项目--爬取猫眼电影Top100榜

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

  8. python 爬取猫眼电影top100数据

    最近有爬虫相关的需求,所以上B站找了个视频(链接在文末)看了一下,做了一个小程序出来,大体上没有修改,只是在最后的存储上,由txt换成了excel. 简要需求:爬虫爬取 猫眼电影TOP100榜单 数据 ...

  9. 爬虫系列(1)-----python爬取猫眼电影top100榜

    对于Python初学者来说,爬虫技能是应该是最好入门,也是最能够有让自己有成就感的,今天在整理代码时,整理了一下之前自己学习爬虫的一些代码,今天先上一个简单的例子,手把手教你入门Python爬虫,爬取 ...

随机推荐

  1. Excel 从字符串中提取日期值

    因为工作需要,Excel 表中有一串字符,需要将字符里的日期提取出,并转成日期值. 需要转成如下格式: 可使用以下公式. =DATEVALUE(TEXT(MID(I2,1,4)+1&" ...

  2. saltops 安装及相关环境安装

    本次布署测试环境 阿里云 Centos 7.3 1.安装nginx,这里采用yum 安装方式 A.yum install nginx B.创建开机启动 systemctl enable nginx.s ...

  3. sqlserver2008设置定时任务

    SQL2008 创建定时任务作业 1.打开[SQL Server Management Studio],在[对象资源管理器]列表中选择[SQL Server 代理]:   --2.鼠标右击[SQL S ...

  4. Vue基础汇总实践

    1)双向绑定:   <div id="app">   <p>{{message}}</p>   <input v-model=" ...

  5. 十二、jdk工具之jcmd介绍(堆转储、堆分析、获取系统信息、查看堆外内存)

    目录 一.jdk工具之jps(JVM Process Status Tools)命令使用 二.jdk命令之javah命令(C Header and Stub File Generator) 三.jdk ...

  6. python 可视化 二维坐标标注等等

     基本画图操作: import matplotlib.pyplot as plt import numpy as np x = np.linspace(-3,3,50) y1 = 2*x+1 y2 = ...

  7. 杂项:SQLite

    ylbtech-杂项:SQLite SQLite,是一款轻型的数据库,是遵守ACID的关系型数据库管理系统,它包含在一个相对小的C库中.它是D.RichardHipp建立的公有领域项目.它的设计目标是 ...

  8. CefSharp v62修改,支持.net4.0

    吐槽一下,博客园久了没有上,账号没了,重新申请一个. cesharp v62版本,内核采用最新的Cef 62,支持最新的Grid布局. 由于官方的cefsharp 采用.net4.5.2开发.怎么办怎 ...

  9. 检测2个公网IP的GRE隧道是否通的方法,使用PPTP拨号检测。

    检测2个公网IP的GRE隧道是否通的方法,使用PPTP拨号检测. 因为PPTP是建立在GRE隧道基础上的. PPTP 防火墙开放 TCP 1723防火墙开放 IP protocol 47,即GRENA ...

  10. 6.13-C3p0连接池配置,DBUtils使用

    DBCP连接池 一.C3p0连接池配置 开源的JDBC连接池 使用连接池的好处: 减轻数据库服务器压力 数据源: ComboPooledDataSource ComboPooledDataSource ...