XPath之电影天堂数据爬取

  2019.5.19,今天写这个实例写了几个小时,虽然不多,100行代码左右,但是貌似是学python以来代码写得最多的一次了。

主要是看了这个视频https://www.bilibili.com/video/av51650499?from=search&seid=10478614069026676839

然后自己尝试写了一下,大部分都能写出来,就是最后获取“主演”和“简介”的时候不太好获取,需要运用到下标并使用循环。

另外,还需要注意的是,我写的这个程序是以电影名称命名然后以json格式存储在本地中的,所以电影名称中可能会有“/”符号,或者“?”符号,

写文件路径的时候必须将这些符号改掉,否则运行 open() 函数的时候会出错。还有就是不知道为什么有几部电影的数据爬不到,以后遇到了再补充!

附上代码:

  1 # Author:K
  2 import requests
  3 from lxml import etree
  4 import json
  5 import os
  6 # !!!!!!!!!!!!!!!!!为什么有几个爬不到????Iron Sky 。 I Spit on Your Grave 。 The Lego Movie 2 这三个爬不到!!!
  7 HEADERS = {
  8     ‘User-Agent‘:‘Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/74.0.3729.108 Safari/537.36‘
  9 }
 10
 11 BASE_URL = ‘https://www.dytt8.net‘
 12
 13 def get_urls(url):
 14     page_text = requests.get(url = url,headers = HEADERS).text
 15     tree = etree.HTML(page_text)
 16     detail_urls = tree.xpath(‘//div[@class="co_content8"]/ul//a/@href‘)
 17     # 将detail_urls列表里面的每一个值经过lambda匿名函数处理后再组合成detail_urls
 18     detail_urls = map(lambda url:BASE_URL + url,detail_urls)
 19     return detail_urls
 20
 21
 22 def parse_html(detail_urls):
 23     movie_infos = {}  # 用字典形式来保存电影信息
 24     for detail_url in detail_urls:
 25         # 这里的编码有点疑问?????
 26         html = requests.get(url = detail_url,headers = HEADERS).content.decode(‘gbk‘)
 27         tree = etree.HTML(html)
 28         movie_poster = tree.xpath(‘//div[@id="Zoom"]//img/@src‘)[0]
 29         movie_clips = tree.xpath(‘//div[@id="Zoom"]//img/@src‘)[1]
 30         movie_infos["movie_poster"] = movie_poster  # 电影海报
 31         movie_infos["movie_clips"] = movie_clips  # 电影片段
 32
 33         html_text = tree.xpath(‘//div[@id="Zoom"]//text()‘)
 34         actors = [] # 因为主演有很多人,而且是分行的,所以要创建一个列表存储
 35         for index,text in enumerate(html_text):
 36             if text.startswith(‘◎片  名‘):
 37                 movie_name = text.replace(‘◎片  名‘,‘‘).strip()
 38                 # 处理特殊字符,不然的话不能下到本地中,现在只知道这种方法。
 39                 if ‘/‘ in movie_name:
 40                     movie_name = movie_name.replace(‘/‘,‘ or ‘)
 41                 if ‘?‘ in movie_name:
 42                     movie_name = movie_name.replace(‘?‘, ‘ ‘)
 43                 movie_infos["movie_name"] = movie_name
 44
 45
 46             elif text.startswith(‘◎年  代‘):
 47                 movie_time = text.replace(‘◎年  代‘, ‘‘).strip()
 48                 movie_infos["movie_time"] = movie_time
 49
 50             elif text.startswith(‘◎产  地‘):
 51                 movie_place = text.replace(‘◎产  地‘, ‘‘).strip()
 52                 movie_infos["movie_place"] = movie_place
 53
 54             elif text.startswith(‘◎类  别‘):
 55                 movie_type = text.replace(‘◎类  别‘, ‘‘).strip()
 56                 movie_infos["movie_type"] = movie_type
 57
 58             elif text.startswith(‘◎语  言‘):
 59                 movie_language = text.replace(‘◎语  言‘, ‘‘).strip()
 60                 movie_infos["movie_language"] = movie_language
 61
 62             elif text.startswith(‘◎豆瓣评分‘):
 63                 movie_score = text.replace(‘◎豆瓣评分‘, ‘‘).strip()
 64                 movie_infos["movie_score"] = movie_score
 65
 66             elif text.startswith(‘◎片  长‘):
 67                 movie_length = text.replace(‘◎片  长‘, ‘‘).strip()
 68                 movie_infos["movie_length"] = movie_length
 69
 70             elif text.startswith(‘◎导  演‘):
 71                 movie_director = text.replace(‘◎导  演‘, ‘‘).strip()
 72                 movie_infos["movie_director"] = movie_director
 73
 74             elif text.startswith(‘◎主  演‘):
 75                 first_actor = text.replace(‘◎主  演‘, ‘‘).strip()
 76                 actors.append(first_actor)
 77                 for i in range(index+1,len(html_text)):
 78                     if html_text[i].startswith(‘◎‘):
 79                         break
 80                     else:
 81                         actors.append(html_text[i].strip())
 82                 movie_infos["movie_actors"] = actors
 83
 84             elif text.startswith(‘◎简  介‘):
 85                 for i in range(index+1,len(html_text)):
 86                     if html_text[i].startswith(‘【下载地址】‘) or html_text[i].startswith(‘ ‘) or html_text[i].startswith(‘◎‘):
 87                         break
 88                     else:
 89                         movie_introduction = html_text[i].strip()
 90                 movie_infos[‘movie_introduction‘] = movie_introduction
 91
 92         download_addr = tree.xpath(‘//td[@bgcolor="#fdfddf"]/a/@href‘)[0]
 93         movie_infos[‘download_addr‘] = download_addr
 94         download(movie_infos["movie_name"],movie_infos) # 持久化存储
 95
 96 def download(name,dict):
 97     if not os.path.exists(‘电影天堂数据爬取‘):
 98         os.mkdir(‘电影天堂数据爬取‘)
 99
100     json.dumps(dict) # 将字典转成json格式 另外,json格式转成字典的操作是:json.loads(dict)
101     path = ‘电影天堂数据爬取/‘ + name + ‘.json‘
102     fp = open(path,‘w‘,encoding = ‘utf-8‘)
103     json.dump(dict,fp = fp,ensure_ascii = False)
104     print(name,‘保存成功!‘)
105
106
107 if __name__ == ‘__main__‘:
108     for page in range(1,2):
109         url = ‘https://www.dytt8.net/html/gndy/dyzz/list_23_{}.html‘.format(page)
110         detail_urls = get_urls(url)  # 得到所有电影的url
111         parse_html(detail_urls)  # 根据urls得到解析页面得到数据

电影天堂数据爬取

原文地址:https://www.cnblogs.com/KisInfinite/p/10891584.html

时间: 2024-11-08 00:39:56

XPath之电影天堂数据爬取的相关文章

数据挖掘工具分析北京房价 (一) 数据爬取采集

一. 前言 房价永远是最让人头疼且激动的话题,尤其是在帝都,多少人一辈子都为了一套房子打拼.正好我也想用一个大家比较关心的话题作为案例,把目前我开发的这套软件进行一次完整的演练.从数据采集,到清洗,分析,和最终可视化和报告的呈现,实现一次完整的流程.一方面可以给大家切实的分享一些有用的信息,再者可以更好地了解这套软件的使用流程.  关于本工具的介绍,可参考数据挖掘平台介绍(综述)——平台简介. 自然的,文章分为四部分,本节是第一部分:数据爬取和采集. 二.  准备工作 俗话说巧妇难为无米之炊,没

Python爬虫 股票数据爬取

前一篇提到了与股票数据相关的可能几种数据情况,本篇接着上篇,介绍一下多个网页的数据爬取.目标抓取平安银行(000001)从1989年~2017年的全部财务数据. 数据源分析 地址分析 http://money.finance.sina.com.cn/corp/go.php/vFD_FinancialGuideLine/stockid/000001/ctrl/2017/displaytype/4.phtml 在浏览器(PC上)中打开这个地址,就可以看到下图显示的财务数据.这个地址是一个通用格式:(

爬虫1.5-ajax数据爬取

目录 爬虫-ajax数据爬取 1. ajax数据 2. selenium+chromedriver知识准备 3. selenium+chromedriver实战拉勾网爬虫代码 爬虫-ajax数据爬取 1. ajax数据 ajax (异步JavaScript 和 XML)(读作阿贾克斯),ajax可以时网页实现异步更新,一般使用的json数据交互,即在不重新加载整个页面也可以对网页的部分进行更新,ajax技术加载的数据在网页源代码中是看不到的,只能看到url加载的html部分 获取ajax数据的两

Python爬虫入门教程 15-100 石家庄政民互动数据爬取

1. 石家庄政民互动数据爬取-写在前面 今天,咱抓取一个网站,这个网站呢,涉及的内容就是 网友留言和回复,特别简单,但是网站是gov的.网址为http://www.sjz.gov.cn/col/1490066682000/index.html 首先声明,为了学习,绝无恶意抓取信息,不管你信不信,数据我没有长期存储,预计存储到重装操作系统就删除. 2. 石家庄政民互动数据爬取-网页分析 点击更多回复 ,可以查看到相应的数据. 数据量很大14万条,,数据爬完,还可以用来学习数据分析,真是nice 经

基于CrawlSpider全栈数据爬取

CrawlSpider就是爬虫类Spider的一个子类 使用流程 创建一个基于CrawlSpider的一个爬虫文件 :scrapy genspider -t crawl spider_name www.xxx.com 构造链接提取器和规则解析器 链接提取器: 作用:可以根据指定的规则进行指定连接的提取 提取的规则: allow = "正则表达式" 会先在全局匹配所有的url,然后根据参数allow的规则匹配需要的链接 规则解析器 作用:获取链接提取器提取到的链接,对其进行请求发送,根据

Python爬虫入门教程 33-100 电影评论数据抓取 scrapy

1. 海王评论数据爬取前分析 海王上映了,然后口碑炸了,对咱来说,多了一个可爬可分析的电影,美哉~ 摘录一个评论 零点场刚看完,温导的电影一直很不错,无论是速7,电锯惊魂还是招魂都很棒.打斗和音效方面没话说非常棒,特别震撼.总之,DC扳回一分( ̄▽ ̄).比正义联盟好的不止一点半点(我个人感觉).还有艾梅伯希尔德是真的漂亮,温导选的人都很棒.真的第一次看到这么牛逼的电影 转场特效都吊炸天 2. 海王案例开始爬取数据 数据爬取的依旧是猫眼的评论,这部分内容咱们用把牛刀,scrapy爬取,一般情况下,

python实现数据爬取-清洗-持久化存储-数据平台可视化

基于python对淘宝模特个人信息进行筛选爬取,数据清洗,持久化写入mysql数据库.使用django对数据库中的数据信息筛选并生成可视化报表进行分析. 数据爬取,筛选,存库: # -*- coding:utf-8 -*-   import requests from bs4 import BeautifulSoup import sys import re reload(sys) sys.setdefaultencoding('utf-8') import MySQLdb import cha

python实现人人网用户数据爬取及简单分析

这是之前做的一个小项目.这几天刚好整理了一些相关资料,顺便就在这里做一个梳理啦~ 简单来说这个项目实现了,登录人人网并爬取用户数据.并对用户数据进行分析挖掘,终于效果例如以下:1.存储人人网用户数据(户主的全部好友.户主好友的全部好友.户主及好友关注的公共主页).2.信息可视化,绘制户主好友间的关系网络图:3.数据挖掘,通过分析户主好友关注的公共主页,向户主推荐公共主页. 项目分为三个部分,各自是人人网登录及用户数据爬取与存储.用户关系可视化.公共主页推荐.以下分别介绍这三个部分. 第一部分实现

爬虫案例—中基协数据爬取

因为工作原因,需要爬取相关网站的数据,包括中基协网站和天眼查部分数据. 一.中基协网站 爬取思路: 1.查看目标页:http://gs.amac.org.cn/amac-infodisc/api/pof/manager?rand=0.9775162173180119&page=%s&size=50 发现有随机数字串(刷新反爬措施),以及页码和每页信息条数,可以用来拼接爬取url 用一个循环爬取所有展示页面,用到requests库以及random函数生成随机数 返回的是json数据,直接用r