python爬虫实战 获取豆瓣排名前250的电影信息--基于正则表达式
一、项目目标
爬取豆瓣TOP250电影的评分、评价人数、短评等信息,并在其保存在txt文件中,html解析方式基于正则表达式
二、确定页面内容
爬虫地址:https://movie.douban.com/top250
确定爬取内容:视频链接,视频名称,导演/主演名称,视频评分,视频简介,评价人数等信息
打开网页,按F12键,可获取以下界面信息

观察可知,每一部视频的详细信息都存放在li标签中
每部视频的视频名称在 class属性值为title 的span标签里,视频名称有可能有多个(中英文);
每部视频的评分在对应li标签里的(唯一)一个 class属性值为rating_num 的span标签里;
每部视频的评价人数在 对应li标签 里的一个 class属性值为star 的div标签中 的最后一个数字;
每部视频的链接在对应li标签里的一个a标签里
每部视频的简介在对应li标签里的一个class属性值为ing的标签里
python 代码如下:
#!/usr/bin/env python
# -*- coding: utf-8 -*-
# @Time : 2017/12/1 15:55
# @Author : gj
# @Site :
# @File : test_class.py
# @Software: PyCharm import urllib2,re,threading '''
伪造头信息
'''
def Get_header():
headers = {
'USER_AGENT': 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_8_3) AppleWebKit/536.5 (KHTML, like Gecko) Chrome/19.0.1084.54 Safari/536.5'
}
return headers '''
获取页面内容
''' def Spider(url,header):
req = urllib2.Request(url=url,headers=header)
html = urllib2.urlopen(req)
info = html.read()
return info def Analyse(infos):
pattern = re.compile('<ol class="grid_view">(.*?)</ol>',re.S)
info = pattern.findall(infos)
pattern = re.compile("<li>(.*?)</li>",re.S)
movie_infos = pattern.findall(info[0])
movie=[]
for movie_info in movie_infos:
movie_temp=[]
url = ""
title=""
director=""
score=""
peoples=""
inq=""
#获取链接地址
pattern_url = re.compile('<a href="(.*?)" class="">')
movie_urls = pattern.findall(movie_info)
for movie_url in movie_urls:
url = url+movie_url
movie_temp.append(url) # 获取视频名称
pattern_title = re.compile('<span class="title">(.*?)</span>')
movie_titles = pattern_title.findall(movie_info)
for movie_title in movie_titles:
title = title+movie_title
movie_temp.append(title) # 获取视频演员表
pattern_director = re.compile('<p class="">(.*?)<br>',re.S)
movie_directors = pattern_director.findall(movie_info)
for movie_director in movie_directors:
director = director+movie_director
movie_temp.append(director) #获取视频评分
pattern_score = re.compile('<div class="star">.*?<span class="rating_num" property="v:average">(.*?)</span>.*?<span>(.*?)</span>.*?</div>',re.S)
movie_scores = pattern_score.findall(movie_info)
for movie_score in movie_scores:
score = movie_score[0]
peoples = movie_score[1]
break
movie_temp.append(score)
movie_temp.append(peoples) # 获取视频简介
pattern_inq = re.compile('<p class="quote">.*?<span class="inq">(.*?)</span>.*?</p>',re.S)
movie_inqs = pattern_inq.findall(movie_info)
if len(movie_inqs)>0:
inq = movie_inqs[0]
else:
inq ='该视频无简介'
movie_temp.append(inq)
movie.append(movie_temp)
return movie '''
将返回内容写入文件
'''
def write_file(infos):
#防止多个线程写文件造成数据错乱
mutex.acquire()
with open("./movie.txt","ab") as f:
for info in infos:
write_info = ""
for i in range(0,len(info)):
info[i] = info[i].replace("\n","")
write_info = write_info+info[i]+" "
write_info= write_info+"\n"
f.write(write_info)
mutex.release() def start(i):
url = "https://movie.douban.com/top250?start=%d&filter="%(i*25)
headers = Get_header()
infos= Spider(url,headers)
movie_infos = Analyse(infos)
write_file(movie_infos) def main():
#创建多线程
Thread = []
for i in range(0,10):
t=threading.Thread(target=start,args=(i,))
Thread.append(t)
for i in range(0,10):
Thread[i].start()
for i in range(0,10):
Thread[i].join()
if __name__ == "__main__":
#加锁
mutex = threading.Lock()
main()
最终结果会在当前目录下生成一个movie.txt txt中记录了每部视频的相关信息,大概格式如下(没有过多的调整文件格式,这里面可以写入mysql,或者写入execl中,更加方便查看)

以上就是基于正则表达式来获取豆瓣排名钱250的电影信息的爬虫原理及简单脚本。
python爬虫实战 获取豆瓣排名前250的电影信息--基于正则表达式的更多相关文章
- python3爬取豆瓣排名前250电影信息
#!/usr/bin/env python # -*- coding: utf-8 -*- # @File : doubanmovie.py # @Author: Anthony.waa # @Dat ...
- 记一次python爬虫实战,豆瓣电影Top250爬虫
import requests from bs4 import BeautifulSoup import re import traceback def GetHtmlText(url): for i ...
- Python爬虫实战五之模拟登录淘宝并获取所有订单
经过多次尝试,模拟登录淘宝终于成功了,实在是不容易,淘宝的登录加密和验证太复杂了,煞费苦心,在此写出来和大家一起分享,希望大家支持. 温馨提示 更新时间,2016-02-01,现在淘宝换成了滑块验证了 ...
- Python爬虫实战(4):豆瓣小组话题数据采集—动态网页
1, 引言 注释:上一篇<Python爬虫实战(3):安居客房产经纪人信息采集>,访问的网页是静态网页,有朋友模仿那个实战来采集动态加载豆瓣小组的网页,结果不成功.本篇是针对动态网页的数据 ...
- Python爬虫【三】利用requests和正则抓取猫眼电影网上排名前100的电影
#利用requests和正则抓取猫眼电影网上排名前100的电影 import requests from requests.exceptions import RequestException imp ...
- 如何用Python在豆瓣中获取自己喜欢的TOP N电影信息
一.什么是 Python Python (蟒蛇)是一门简单易学. 优雅健壮. 功能强大. 面向对象的解释型脚本语言.具有 20+ 年发展历史, 成熟稳定. 具有丰富和强大的类库支持日常应用. 1989 ...
- Python爬虫实战---抓取图书馆借阅信息
Python爬虫实战---抓取图书馆借阅信息 原创作品,引用请表明出处:Python爬虫实战---抓取图书馆借阅信息 前段时间在图书馆借了很多书,借得多了就容易忘记每本书的应还日期,老是担心自己会违约 ...
- Python爬虫实战一之爬取糗事百科段子
大家好,前面入门已经说了那么多基础知识了,下面我们做几个实战项目来挑战一下吧.那么这次为大家带来,Python爬取糗事百科的小段子的例子. 首先,糗事百科大家都听说过吧?糗友们发的搞笑的段子一抓一大把 ...
- 转 Python爬虫实战一之爬取糗事百科段子
静觅 » Python爬虫实战一之爬取糗事百科段子 首先,糗事百科大家都听说过吧?糗友们发的搞笑的段子一抓一大把,这次我们尝试一下用爬虫把他们抓取下来. 友情提示 糗事百科在前一段时间进行了改版,导致 ...
随机推荐
- 【ASP.NET MVC 学习笔记】- 16 Model Binding(模型绑定)
本文参考:http://www.cnblogs.com/willick/p/3424188.html. 1.Model Binding是Http请求和Action方法之间的桥梁,是MVC框架根据Htt ...
- WSGI框架及Paste+Pastedeploy+route+webob开发
一.前言 WSGI服务器 一个Web服务器网关接口 (WSGI)服务器实现了WSGI接口的Web服务器端运行的Python的Web应用程序. 为什么需要WSGI? 传统的Web服务器不理解或有任何方式 ...
- 基于webuploader.js的单图片上传封装
HTML代码 <div class="manageImgUp">点击图片上传</div> <div class="manageImgUpLc ...
- R语言进行机器学习方法及实例(一)
版权声明:本文为博主原创文章,转载请注明出处 机器学习的研究领域是发明计算机算法,把数据转变为智能行为.机器学习和数据挖掘的区别可能是机器学习侧重于执行一个已知的任务,而数据发掘是在大数据中寻找有 ...
- input file选择图片后 预览
很多前端都选择用插件来实现图片预览,这个小功能也可以很简单的用jQuery来实现 简单的jQuery实现input file选择图片后,可以预览图片的效果 简单的HTML代码: <div> ...
- Linux中gcc和g++
今天在Linux上编写一个小的C++程序运行,需要用到iostream中cout,一开始创建一个hello.c的文件编写如下代码: #include<stdio.h> #include&l ...
- python如何将指定路径下的某类型文件,返回一个树形结构体,让前端显示为树形的目录结构
最近遇到一个问题就是某个linux的目录下有各种文件现在的要求是只需要返回.kml格式的文件,并根据前端要求返回如下结构体即:[{'children': [{'children': [{'title' ...
- jumpserver安装详解
环境说明 主机为最小 安装的centos6.9 x86_64. [root@m01 ~]# cat /etc/redhat-release CentOS release 6.9 (Final) [ro ...
- Spring AOP分析(3) -- CglibAopProxy实现AOP
上文探讨了应用JDK动态代理实现Spring AOP功能的方式,下面将继续探讨Spring AOP功能的另外一种实现方式 -- CGLIB. 首先,来看看类名CglibAopProxy,该类实现了两个 ...
- 记一次list循环删除元素的突发事件!
事情是这样的,由于想再回顾一下基础,就写了一个main函数,里面循环删元素的代码.如下: List<String> a = new ArrayList<String>(); a ...