一、目的:

个人比较喜欢看欧美电影,最近刚学了爬虫,所以敲了这个程序 来爬取 电影天堂IMB 评分8.0以上的 欧美电影  跟大家分享一下。

二、爬取电影天堂需要掌握的基本技能:

1、熟悉python的基本语法。

2、会使用 简单的正则表达式。

3、掌握beautifulsoup4的基本使用,了解网页源代码的组成结构。

4、了解requests模块的基本使用

三、过程:

步骤一:分析网页的基本结构

首先打开电影天堂 欧美电影 的栏目

1)我们发现 欧美电影栏目 的网址 是有规律的。

当我们点开 欧美电影的第一页 时网址 是 http://www.ygdy8.net/html/gndy/oumei/list_7_1.html

当我们点开 欧美电影的第二页 时网址 变为 http://www.ygdy8.net/html/gndy/oumei/list_7_2.html

也就是说其实 改变 网址页数的  该网址 7_ 之后的数字

2)接下来我们 点开 开发者工具查看网页源代码(F12)

我们发现  其实 每部电影的 内容 都是包含在一个 class=“tbspan”的table 里

于是我们可以使用beautiful的find_all函数 去获取 全部 class=“tbspan”的table

代码为:table = BeautifulSoup(content.text,"lxml").find_all('table',class_='tbspan')

我们点开 class=“tbspan”的table

我们可以发现 电影 内容简介 包含在一个a标签内

而该a标签的 文本内容(text)里包含了 “《”这个关键符号

于是我们可以使用正则以及beautifulsoup去找到a标签内的全部内容

代码为:table.find('a', text=re.compile("《"))

(table是 class=“tbspan”的table,因为a标签是包含在它之下,所以我们要在他的基础上找)

同理 电影的 IMB评分 以及详细内容 页 也是一样道理 可以取到

#传入正则表达式,查找所有的td标签文本内容中含有IMB的内容
# td是匹配文本内容到包含“IMB”的内容的整条 td 标签内容

td = table.find('td', text=re.compile("IMD"))

3)然后我们点开其中一部电影 比如 《狂暴巨兽》

拉下来之后 我们 可以发现该电影的下载地址 那我们要怎么去获取呢?

打开开发者工具 查看源代码

我们发现 他的下载地址包含在 一个

"style": "WORD-WRAP: break-word" 的 td 标签里
于是我们去获取该标签
Td = BeautifulSoup(content.text,"lxml").find('td', attrs={"style": "WORD-WRAP: break-word"})
然后利用正则 获取 到 该电影下载地址 
downloadA = downloadTd.find('a')

到此处 网页的基本结构分析就清楚 了 下面贴上源代码 ,不懂得可以查看注释

import requests
from bs4 import BeautifulSoup
import re#电影 详情页的的基本前缀
site = 'http://www.ygdy8.net'
#构建电影类
class Movie:def __init__(self, name, url, score, link):self.name = nameself.url = urlself.score = scoreself.link = linkdef __str__(self):return '%s,\t%s分,\t下载地址:%s' % (self.name, self.score, self.link)__repr__ = __str__def getSoup(url):r = requests.get(url)r.encoding = 'gb18030'return BeautifulSoup(r.text, "html.parser")def findMovie(url):movieList = []# 链接网址soup = getSoup(url)tables = soup.find_all('table', class_='tbspan')for table in tables:#传入正则表达式,查找所有的a标签文本内容中含有《的内容# aContent是匹配到a标签text里面包含《的整个a标签aContent = table.find('a', text=re.compile("《"))#传入正则表达式,查找所有的td标签文本内容中含有IMB的内容# td是匹配文本内容到包含“IMB”的内容的整条 td 标签内容td = table.find('td', text=re.compile("IMD"))if td is not None:# 利用正则找到电影的评分# +?匹配一次或更多次的重复,但是在能使整个匹配成功的前提下使用最少的重复# 只匹配 +?的值 即如   评分 6.0/10  只输出 【‘6.0’】# 因为 有/  为了不为被当成转义符所以需要在前面rscoreStr = re.findall(r"评分 (.+?)/10", td.text)if (len(scoreStr) > 0):try:# 将字符串 转换为 浮点型score = float(scoreStr[0])if (score > 8):name = aContent.textprint(name)# 此处的url 是 电影的详情页面url = site + aContent['href']print('url:', url)print('title:', name)print('score:', score)# downloadLink是获得电影的下载地址downloadLink = getDownloadLink(url)movie = Movie(name, url, score, downloadLink)movieList.append(movie)except:print('error !!')return movieList#该方法是用来获取电影下载地址的
def getDownloadLink(url):soup = getSoup(url)downloadTd = soup.find('td', attrs={"style": "WORD-WRAP: break-word"})downloadA = downloadTd.find('a')return downloadA['href']#该方法是用来保存电影的信息到本地文本文件的
def saveMovie(movieList):#打开文本文件fileObj = open('movie.txt', 'a')for movie in movieList:movie_str = str(movie)print('movie info:', movie_str)fileObj.write(movie_str)fileObj.write('\n')fileObj.write('————————————————————————————————————————————————————————————————————————————————————————————————')fileObj.write('\n')fileObj.close()def getPageResource(url):resultList = findMovie(url)if len(resultList) > 0:saveMovie(resultList)if __name__ == '__main__':for index in range(156):index += 1#电影天堂网的欧美电影基本前缀#在网页中第一页的地址为http://www.ygdy8.net/html/gndy/oumei/list_7_1.html#在网页中第一页的地址为http://www.ygdy8.net/html/gndy/oumei/list_7_2.html#容易发现其实网页改变页数 其实是改变 7_之后的数字#此处的url 为 欧美电影 的 地址  index 表示页数url = 'http://www.ygdy8.net/html/gndy/oumei/list_7_' + \str(index) + '.html'getPageResource(url)

运行结果展示:

三:心得体会:

此次爬虫加深了我对python 基础语法的掌握,也让我发现了python的有趣,在学习爬虫的过程中,我遇到了很多困难,第一个困难是 解析网页的结构,我觉得这是爬虫中很重要的一部分。第二个是,Beautifulsoup的 使用,有些语法不是很清楚。第三个是正则表达式的运用。第四是经常遇到反爬虫无法进行下去。

使用 beautifulsoup4 爬取 电影天堂IMB 评分8.0以上的 欧美电影相关推荐

  1. Python-爬虫(Scrapy爬虫框架,爬取豆瓣读书和评分)

    文章目录 1.Scrapy注意点 2. Scrapy爬取豆瓣读书和评分 代码部分 数据定义items.py 爬虫部分spiders/book.py 数据存储部分pipelines.py 启动爬虫执行c ...

  2. python功能性爬虫案例_Python爬虫实现使用beautifulSoup4爬取名言网功能案例

    本文实例讲述了Python爬虫实现使用beautifulSoup4爬取名言网功能.分享给大家供大家参考,具体如下: 爬取名言网top10标签对应的名言,并存储到mysql中,字段(名言,作者,标签) ...

  3. python 爬取豆瓣某一主题书单_Python爬取豆瓣的各分类书单以及近期热门电影和top250的电影...

    pachon2.5.py # -*- coding: utf-8 -*- import urllib import urllib2 import re import sys # reload(sys) ...

  4. BeautifulSoup4爬取猫眼电影前一百

    最开始学习python,是因为爬虫.最初学习小甲鱼的教学视频,后来在小甲鱼的论坛上发现了用bs4爬取豆瓣前一百,当时怎么也看不懂.后来系统的学习了一下爬虫.参考了崔大佬的爬虫之后,改编书上的例子(书上 ...

  5. 实战▍Python爬取3w条游戏评分数据,看看哪款最热门?

    图| 战争前线游戏原画   本文作者| 量化小白H 本文为投稿,36大数据已获发布授权 36大数据推荐 实战项目 本文爬取了豆瓣游戏网站上所有可见的游戏评分数据进行分析,全文包括以下几个部分: 数据获 ...

  6. Python爬虫学习---------使用beautifulSoup4爬取名言网

    爬取名言网top10标签对应的名言,并存储到mysql中,字段(名言,作者,标签) #! /usr/bin/python3 # -*- coding:utf-8 -*-from urllib.requ ...

  7. 【爬虫入门】【正则表达式】【同步】爬取人人车车辆信息1.0

    # 爬取人人车车车辆信息.from urllib.request import urlopen from urllib.error import HTTPErrorimport re, sqlite3 ...

  8. python 浏览器下载文件_同样一个下载地址,用python爬虫爬取的种子文件大小为0,而用浏览器是可以正常下载下来的?...

    1.访问某个网页,用浏览器可以下载其中嵌入的种子文件,种子文件大小是正常的,用迅雷工具也可以正常下载,但是用python爬虫爬取,并且下载下来的数据大小为0? 2.这是我自己写的代码. url = ' ...

  9. 爬虫之爬取猫咪图片(2.0版)

    爬取猫咪图片2.0 一.前言 二.环境准备 三.具体实现 1~3 略 4.GUI设计 1.界面设计 2.弹窗提示 3.打包可执行文件 7.成果 四.最后 上次一篇文章得到了大佬们的指点,提出了改进意见 ...

最新文章

  1. php extension 安装,php + clucene extension的安装
  2. VTK:Rendering之DiffuseSpheres
  3. 使用SG_IO发送SCSI 指令测试底层驱动的scatter-gather 功能
  4. SpriteBuilder物理对象的父子关系
  5. android 获取是否连接wifi热点,android - 如何知道您是否已连接到Wifi热点/ Wifi / Wifi Direct - 堆栈内存溢出...
  6. java编写两邮件传输,JAVA邮件发送(文字+图片+附件)【源码】
  7. 显示隐藏-display(HTML、CSS)
  8. set列表对象去重_java中List对象列表去重或取出以及排序
  9. linear-gradient 立体背景 按钮_2020高邮亮光背景墙8D立体逼真方兴装饰了解更多
  10. 【虎牙直播源】浏览器抓取真实直播源地址(纯前端JS解析源码)
  11. 测试工具之 LoadRunner WinRunner
  12. 二维码的实现原理和实现过程[纠错码编码]
  13. 微信公众号查题搜题平台 功能齐全
  14. MySQL 定义条件与处理程序 的详细讲解
  15. 中国二十五首必听的网络原创歌曲
  16. 女生学计算机专业用考研吗,计算机专业女生考研,该选什么方向比较好?谢谢!...
  17. Day434.订单库存服务分布式事务的最终解决 -谷粒商城
  18. c语言change函数用法,通过值和引用函数
  19. 网易im即时通讯 移动端嵌入web
  20. Matlab常用数学函数和数学运算符

热门文章

  1. 九劫曲显示无法连接服务器怎么办,九劫曲诅咒之地无法连接服务器怎么办?玩不了怎么办...
  2. 闷声发大财,你不知道的六个国内“隐形冠军”企业
  3. 华为畅享10鸿蒙系统,EMUI 10是鸿蒙来临的前奏?更多机型加入到EMUI 10升级行列...
  4. 【1】Bootstrap 开发 - navs tabs pills 导航效果
  5. Creator+微信小游戏:(4)服务器Https、SSL、Nginx配置
  6. 成都榆熙电子商务有限公司:拼多多月卡都有哪些方式的优惠?
  7. pandas的引用与复制
  8. java 链表、栈、队列、树的实现
  9. 无法完成请求,因为某种原因阻止文本引擎进行初始化
  10. ELK+Filebeat+Kafka+ZooKeeper+Grafana大数据日志收集与分析平台