初识python 之 爬虫:爬取某电影网站信息
注:此代码仅用于个人爱好学习使用,不涉及任何商业行为!
话不多说,直接上代码:
1 #!/user/bin env python
2 # author:Simple-Sir
3 # time:2019/7/20 20:36
4 # 获取电影天堂详细信息
5 import requests
6 from lxml import etree
7
8 # 伪装浏览器
9 HEADERS ={
10 'User-Agent':'Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/63.0.3239.132 Safari/537.36',
11 }
12 # 定义全局变量
13 BASE_DOMAIN = 'https://www.dytt8.net'
14 # 获取首页网页信息并解析
15 def getUrlText(url,coding):
16 respons = requests.get(url,headers=HEADERS) # 获取网页信息
17 # enc = respons.encoding
18 # urlText = respons.content.decode('gbk')
19 if(coding=='c'):
20 urlText = respons.content.decode('gbk')
21 html = etree.HTML(urlText) # 使用lxml解析网页
22 else:
23 urlText = respons.text
24 html = etree.HTML(urlText) # 使用lxml解析网页
25 return html
26
27 # 获取电影详情页的href,text解析
28 def getHref(url):
29 html = getUrlText(url,'t')
30 aHref = html.xpath('//table[@class="tbspan"]//a/@href')
31 htmlAll = map(lambda url:BASE_DOMAIN+url,aHref) # 给每个href补充BASE_DOMAIN
32 return htmlAll
33
34 # 使用content解析电影详情页,并获取详细信息数据
35 def getPage(url):
36 html = getUrlText(url,'c')
37 moveInfo = {} # 定义电影信息字典
38 mName = html.xpath('//div[@class="title_all"]//font[@color="#07519a"]/text()')[0]
39 moveInfo['电影名字'] = mName
40 mDiv = html.xpath('//div[@id="Zoom"]')[0]
41 mImgSrc = mDiv.xpath('.//img/@src')
42 moveInfo['海报地址'] = mImgSrc[0] # 获取海报src地址
43 if len(mImgSrc) >= 2:
44 moveInfo['电影截图地址'] = mImgSrc[1] # 获取电影截图src地址
45 mContnent = mDiv.xpath('.//text()')
46 def pares_info(info,rule):
47 '''
48 :param info: 字符串
49 :param rule: 替换字串
50 :return: 指定字符串替换为空,并剔除左右空格
51 '''
52 return info.replace(rule,'').strip()
53 for index,t in enumerate(mContnent):
54 if t.startswith('◎译 名'):
55 name = pares_info(t,'◎译 名')
56 moveInfo['译名']=name
57 elif t.startswith('◎片 名'):
58 name = pares_info(t,'◎片 名')
59 moveInfo['片名']=name
60 elif t.startswith('◎年 代'):
61 name = pares_info(t,'◎年 代')
62 moveInfo['年代']=name
63 elif t.startswith('◎产 地'):
64 name = pares_info(t,'◎产 地')
65 moveInfo['产地']=name
66 elif t.startswith('◎类 别'):
67 name = pares_info(t,'◎类 别')
68 moveInfo['类别']=name
69 elif t.startswith('◎语 言'):
70 name = pares_info(t,'◎语 言')
71 moveInfo['语言']=name
72 elif t.startswith('◎字 幕'):
73 name = pares_info(t,'◎字 幕')
74 moveInfo['字幕']=name
75 elif t.startswith('◎上映日期'):
76 name = pares_info(t,'◎上映日期')
77 moveInfo['上映日期']=name
78 elif t.startswith('◎IMDb评分'):
79 name = pares_info(t,'◎IMDb评分')
80 moveInfo['IMDb评分']=name
81 elif t.startswith('◎豆瓣评分'):
82 name = pares_info(t,'◎豆瓣评分')
83 moveInfo['豆瓣评分']=name
84 elif t.startswith('◎文件格式'):
85 name = pares_info(t,'◎文件格式')
86 moveInfo['文件格式']=name
87 elif t.startswith('◎视频尺寸'):
88 name = pares_info(t,'◎视频尺寸')
89 moveInfo['视频尺寸']=name
90 elif t.startswith('◎文件大小'):
91 name = pares_info(t,'◎文件大小')
92 moveInfo['文件大小']=name
93 elif t.startswith('◎片 长'):
94 name = pares_info(t,'◎片 长')
95 moveInfo['片长']=name
96 elif t.startswith('◎导 演'):
97 name = pares_info(t,'◎导 演')
98 moveInfo['导演']=name
99 elif t.startswith('◎编 剧'):
100 name = pares_info(t, '◎编 剧')
101 writers = [name]
102 for i in range(index + 1, len(mContnent)):
103 writer = mContnent[i].strip()
104 if writer.startswith('◎'):
105 break
106 writers.append(writer)
107 moveInfo['编剧'] = writers
108 elif t.startswith('◎主 演'):
109 name = pares_info(t, '◎主 演')
110 actors = [name]
111 for i in range(index+1,len(mContnent)):
112 actor = mContnent[i].strip()
113 if actor.startswith('◎'):
114 break
115 actors.append(actor)
116 moveInfo['主演'] = actors
117 elif t.startswith('◎标 签'):
118 name = pares_info(t,'◎标 签')
119 moveInfo['标签']=name
120 elif t.startswith('◎简 介'):
121 name = pares_info(t,'◎简 介')
122 profiles = []
123 for i in range(index + 1, len(mContnent)):
124 profile = mContnent[i].strip()
125 if profile.startswith('◎获奖情况') or '【下载地址】' in profile:
126 break
127 profiles.append(profile)
128 moveInfo['简介']=profiles
129 elif t.startswith('◎获奖情况'):
130 name = pares_info(t,'◎获奖情况')
131 awards = []
132 for i in range(index + 1, len(mContnent)):
133 award = mContnent[i].strip()
134 if '【下载地址】' in award:
135 break
136 awards.append(award)
137 moveInfo['获奖情况']=awards
138 downUrl = html.xpath('//td[@bgcolor="#fdfddf"]/a/@href')[0]
139 moveInfo['下载地址'] = downUrl
140 return moveInfo
141
142 # 获取前n页所有电影的详情页href
143 def spider():
144 base_url = 'https://www.dytt8.net/html/gndy/dyzz/list_23_{}.html'
145 moves = []
146 m = int(input('请输入您要获取的开始页:'))
147 n = int(input('请输入您要获取的结束页:'))
148 print('即将写入第{}页到第{}页的电影信息,请稍后...'.format(m, n))
149 for i in range(m,n+1):
150 print('******* 第{}页电影 正在写入 ********'.format(i))
151 url = base_url.format(i)
152 moveHref = getHref(url)
153 for index,mhref in enumerate(moveHref):
154 print('---- 第{}部电影 正在写入----'.format(index+1))
155 move = getPage(mhref)
156 moves.append(move)
157 # 将电影信息写入本地本件
158 for i in moves:
159 with open('电影天堂电影信息.txt', 'a+', encoding='utf-8') as f:
160 f.write('\n********* {} ***************\n'.format(i['电影名字']))
161 for info in i:
162 with open('电影天堂电影信息.txt','a+',encoding='utf-8') as f:
163 f.write('{}:{}\n'.format(info,i[info]))
164 print('写入完成!')
165
166 if __name__ == '__main__':
167 spider()
获取电影天堂详细信息
执行情况:
结果文件:
初识python 之 爬虫:爬取某电影网站信息的更多相关文章
- 利用python实现爬虫爬取某招聘网站,北京地区岗位名称包含某关键字的所有岗位平均月薪
#通过输入的关键字,爬取北京地区某岗位的平均月薪 # -*- coding: utf-8 -*- import re import requests import time import lxml.h ...
- python爬虫爬取ip记录网站信息并存入数据库
import requests import re import pymysql #10页 仔细观察路由 db = pymysql.connect("localhost",&quo ...
- 如何利用Python网络爬虫爬取微信朋友圈动态--附代码(下)
前天给大家分享了如何利用Python网络爬虫爬取微信朋友圈数据的上篇(理论篇),今天给大家分享一下代码实现(实战篇),接着上篇往下继续深入. 一.代码实现 1.修改Scrapy项目中的items.py ...
- 利用Python网络爬虫爬取学校官网十条标题
利用Python网络爬虫爬取学校官网十条标题 案例代码: # __author : "J" # date : 2018-03-06 # 导入需要用到的库文件 import urll ...
- 写一个python 爬虫爬取百度电影并存入mysql中
目标是利用python爬取百度搜索的电影 在类型 地区 年代各个标签下 电影的名字 评分 和图片连接 以及 电影连接 首先我们先在mysql中建表 create table liubo4( id in ...
- Python爬虫爬取豆瓣电影之数据提取值xpath和lxml模块
工具:Python 3.6.5.PyCharm开发工具.Windows 10 操作系统.谷歌浏览器 目的:爬取豆瓣电影排行榜中电影的title.链接地址.图片.评价人数.评分等 网址:https:// ...
- python 爬虫&爬取豆瓣电影top250
爬取豆瓣电影top250from urllib.request import * #导入所有的request,urllib相当于一个文件夹,用到它里面的方法requestfrom lxml impor ...
- 04 Python网络爬虫 <<爬取get/post请求的页面数据>>之requests模块
一. urllib库 urllib是Python自带的一个用于爬虫的库,其主要作用就是可以通过代码模拟浏览器发送请求.其常被用到的子模块在Python3中的为urllib.request和urllib ...
- python制作爬虫爬取京东商品评论教程
作者:蓝鲸 类型:转载 本文是继前2篇Python爬虫系列文章的后续篇,给大家介绍的是如何使用Python爬取京东商品评论信息的方法,并根据数据绘制成各种统计图表,非常的细致,有需要的小伙伴可以参考下 ...
随机推荐
- 使用AOP思想实现日志的添加
//1.创建日志表syslog------->创建日志的实体类--------->在web.xml中配置监听 <listener> <listener-class ...
- java中子类继承父类什么?
1.继承public和protected修饰的属性和方法,不管子类和父类是否在同一个包: 2.继承默认权限修饰符修饰的属性和方法,前提是子类和父类在同一个包.
- C++STL标准库学习笔记(一)sort
前言: 近来在学习STL标准库,做一份笔记并整理好,方便自己梳理知识.以后查找,也方便他人学习,两全其美,快哉快哉! 这里我会以中国大学慕课上北京大学郭炜老师的<程序设计与算法(一)C语言程序设 ...
- centos源码部署lua-5.3
目录 一.介绍 二.部署 三.测试 一.介绍 Luat语言是在1993年由巴西一个大学研究小组发明,其设计目标是作为嵌入式程序移植到其他应用程序,它是由C语言实现的,虽然简单小巧但是功能强大. 二.部 ...
- Shell 语法和tips -- 持续更新
1. 字符串掐头去尾 #, % 例如:x=aabbaarealwwvvwwecho "${x%w*w}"aabbaarealwwvv echo "${x%%w*w}&qu ...
- BZOJ 题目乱做
记录一点在 BZOJ 上做的题. 众所周知原 BZOJ 炸掉了,于是跑去了 HydroOJ 的 BZOJ 域上面做. 目录 P1001 [Beijing2006]狼抓兔子 P1002 [FJOI200 ...
- 10分钟快速上车短视频风口:基于uniapp框架创建自己的仿抖音短视APP
在今年也就是第48次发布的<中国互联网络发展状况统计报告>有这样一个数据,21年的上半年以来,我国我国网民规模达10.11亿,其中短视频用户达8.88亿.碎片化的生活场景下,短视频成为人们 ...
- 利用免费二维码API自动生成网址图片二维码
调用第三方接口生成二维码 官方地址:http://goqr.me/api/ 示例 https://api.qrserver.com/v1/create-qr-code/?size=180x180&am ...
- 【LeetCode】112. 路径总和 Path Sum 解题报告(Java & Python)
作者: 负雪明烛 id: fuxuemingzhu 个人博客: http://fuxuemingzhu.cn/ 目录 题目描述 题目大意 解题方法 DFS 回溯 BFS 栈 日期 题目地址:https ...
- 【LeetCode】355. Design Twitter 解题报告(Python & C++)
作者: 负雪明烛 id: fuxuemingzhu 个人博客: http://fuxuemingzhu.cn/ 目录 题目描述 题目大意 解题方法 日期 题目地址:https://leetcode.c ...