初识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爬取京东商品评论信息的方法,并根据数据绘制成各种统计图表,非常的细致,有需要的小伙伴可以参考下 ...
随机推荐
- 用oracle中的Row_Number实现分页
Row_Number实现分页 1:首先是 select ROW_NUMBER() over(order by id asc) as 'rowNumber', * from table1 生成带序号 ...
- js - 日期、时间 Date对象方法
Date 是 JS 内置的日期构造函数 var d = new Date(); // 这个是系统当前时间的日期实例 d.getYear(); // 返回 d 实例年份 - 1900 d.getFul ...
- 5.Vue.js-模板语法
Vue.js 使用了基于 HTML 的模版语法,允许开发者声明式地将 DOM 绑定至底层 Vue 实例的数据. Vue.js 的核心是一个允许你采用简洁的模板语法来声明式的将数据渲染进 DOM 的系统 ...
- java的bio和nio写入及读取txt文件
一.bio的写入及读取 1.采用bio之BufferedWriter 写入文件 public static void main(String[] args) throws IOException { ...
- Jenkins监控
目录 一.Monitoring插件 二.Prometheus监控 一.Monitoring插件 Monitoring插件(monitoring)使用JavaMelody,对Jenkins进行监控.插件 ...
- Pytorch入门中 —— 搭建网络模型
本节内容参照小土堆的pytorch入门视频教程,主要通过查询文档的方式讲解如何搭建卷积神经网络.学习时要学会查询文档,这样会比直接搜索良莠不齐的博客更快.更可靠.讲解的内容主要是pytorch核心包中 ...
- CF177A1/A2 Good Matrix Elements 题解
Content 给定一个 \(n\times n\) 的矩阵,每个元素都有一个值,求出处于两条对角线以及中间行和中间列的元素之和. 数据范围:\(1\leqslant n\leqslant 5(\te ...
- java 多线程 Thread.join子线程结束父线程再运行;join(long):等待超时毫秒数
Join的使用 目的:当子线程运行结束后,父线程才能再继续运行 /** * @ClassName ThreadJoinExample * @projectName: object1 * @author ...
- WSL docker打通容器间通信和追加端口映射
最近在docker中搭建一个服务,需要有多个容器通信.这里简单记录一下如何在容器间进行通信,同时说一下已经存在的容器如何追加端口映射. 增加网桥 容器间通信的目的是不适用IP而是使用容器名称进行网络通 ...
- go:遍历获取gin请求的所有参数
背景:为了提高程序的通用性,需要将前端request中请求的参数,包含表单参数全部取到. 代码: 1 func DataMapByRequest(c *gin.Context)(dataMap map ...