使用requests爬取猫眼电影TOP100榜单
Requests是一个很方便的python网络编程库,用官方的话是“非转基因,可以安全食用”。里面封装了很多的方法,避免了urllib/urllib2的繁琐。
这一节使用requests库对猫眼电影的TOP100榜进行抓取。
1 获得页面。
首先确定要爬取的url为http://maoyan.com/board/4,通过requests模块,打印出页面的信息
def get_a_page(url):
try:
response = requests.get(url)
if response.status_code == 200:#状态码,200表示请求成功
return response.text #返回页面信息
return None
except RequestException :
return None
上面是代码及注释,为了防止再抓取时候出现异常,requests的异常有这些,其中RequestException是异常的父类,故我们直接导入
from requests.exceptions import RequestException
作为异常处理。这样就得到了该url地址的网页内容。
2 分析页面
首先看一些页面的大致情况,其中【霸王别姬】就是我们要抓取的栏目,栏目下面又分了一些小内容,如下面黑色箭头所示。

先看一下页面大致情况,右键【审查元素】

可以看出<dd>标签包裹着每一个电影的信息,用正则表达式找到想要的元素。
reg = re.compile('<dd>.*?board-index.*?>(\d+)</i>.*?data-src="(.*?)".*?name">'
+ '<a.*?>(.*?)</a>.*?star">(.*?)</p>.*?releasetime">(.*?)</p>'
+ '.*?integer">(.*?)</i>.*?fraction">(.*?)</i>.*?</dd>',re.S)
依次捕获的是 排名,地址,名称,主演,时间,整数评分,小数评分。这里我用字典的形式存储,返回一个生成器。
items = reg.findall(html)
for item in items:
yield{
"index":item[0],
"image":item[1],
"title":item[2],
"actor":item[3].strip()[3:],
"time":item[4].strip()[5:],
"score":item[5]+item[6]
}
3 写入文件
抓取到电影列表,剩下就是将电影列表写入文件中,由于返回的是一个字典对象,可以使用pickle方法进行序列化,但为了方便以后的查阅,这里用文本方式保存
def write_to_file(contents):
c = ""
with codecs.open("result.txt",'a',encoding="utf-8",errors="ignore") as f:
for key,value in contents.items():
c += key + ":" + value +"\t"
f.write(c + "\n")
返回的是一个字典格式,可是借助json方法进行序列化
def write_to_file(contents):
with codecs.open("result.txt",'a',encoding="utf-8",errors="ignore") as f:
f.write(json.dumps(contents,ensure_ascii=False) + '\n')
其中的dumps方法是将obj序列化为JSON格式的字符串,这里面要注意的是编码问题。最后就是抓取整个榜单了,可以加入多线程策略,最后的完整代码
# -*- coding: utf-8 -*- import requests,re
import codecs
from requests.exceptions import RequestException
from multiprocessing import Pool import json
def get_a_page(url):
try:
response = requests.get(url)
if response.status_code == 200:
return response.text
return None
except RequestException :
return None
def parse_a_page(html):
#排名,地址,名称,主演,时间,评分1,评分2
reg = re.compile('<dd>.*?board-index.*?>(\d+)</i>.*?data-src="(.*?)".*?name">'
+ '<a.*?>(.*?)</a>.*?star">(.*?)</p>.*?releasetime">(.*?)</p>'
+ '.*?integer">(.*?)</i>.*?fraction">(.*?)</i>.*?</dd>',re.S)
items = reg.findall(html)
for item in items:
yield{
"index":item[0],
"image":item[1],
"title":item[2],
"actor":item[3].strip()[3:],
"time":item[4].strip()[5:],
"score":item[5]+item[6]
} def write_to_file(contents):#这里面两个方法。一种是用json,一种是转为字符串
c = ""
with codecs.open("result.txt",'a',encoding="utf-8",errors="ignore") as f:
#for key,value in contents.items():
#c += key + ":" + value +"\t"
f.write(json.dumps(contents,ensure_ascii=False) + '\n')
#print c
#f.write(c + "\n")
def main(offset):
url = "http://maoyan.com/board/4?offset=%s" %offset
print url
html = get_a_page(url)
for item in parse_a_page(html):
write_to_file(item) if __name__ == "__main__":
'''
for i in range(10):
main(i*10)
''' pool = Pool()#多线程
pool.map(main,[i*10 for i in range(10)])
使用requests爬取猫眼电影TOP100榜单的更多相关文章
- 50 行代码教你爬取猫眼电影 TOP100 榜所有信息
对于Python初学者来说,爬虫技能是应该是最好入门,也是最能够有让自己有成就感的,今天,恋习Python的手把手系列,手把手教你入门Python爬虫,爬取猫眼电影TOP100榜信息,将涉及到基础爬虫 ...
- 40行代码爬取猫眼电影TOP100榜所有信息
主要内容: 一.基础爬虫框架的三大模块 二.完整代码解析及效果展示 1️⃣ 基础爬虫框架的三大模块 1.HTML下载器:利用requests模块下载HTML网页. 2.HTML解析器:利用re正则表 ...
- 爬虫系列(1)-----python爬取猫眼电影top100榜
对于Python初学者来说,爬虫技能是应该是最好入门,也是最能够有让自己有成就感的,今天在整理代码时,整理了一下之前自己学习爬虫的一些代码,今天先上一个简单的例子,手把手教你入门Python爬虫,爬取 ...
- Python爬虫项目--爬取猫眼电影Top100榜
本次抓取猫眼电影Top100榜所用到的知识点: 1. python requests库 2. 正则表达式 3. csv模块 4. 多进程 正文 目标站点分析 通过对目标站点的分析, 来确定网页结构, ...
- Requests+正则表达式爬取猫眼电影(TOP100榜)
猫眼电影网址:www.maoyan.com 前言:网上一些大神已经对猫眼电影进行过爬取,所用的方法也是各有其优,最终目的是把影片排名.图片.名称.主要演员.上映时间与评分提取出来并保存到文件或者数据库 ...
- python 爬取猫眼电影top100数据
最近有爬虫相关的需求,所以上B站找了个视频(链接在文末)看了一下,做了一个小程序出来,大体上没有修改,只是在最后的存储上,由txt换成了excel. 简要需求:爬虫爬取 猫眼电影TOP100榜单 数据 ...
- 爬虫--requests爬取猫眼电影排行榜
'''目标:使用requests分页爬取猫眼电影中榜单栏目中TOP100榜的所有电影信息,并将信息写入文件URL地址:http://maoyan.com/board/4 其中参数offset表示其实条 ...
- PYTHON 爬虫笔记八:利用Requests+正则表达式爬取猫眼电影top100(实战项目一)
利用Requests+正则表达式爬取猫眼电影top100 目标站点分析 流程框架 爬虫实战 使用requests库获取top100首页: import requests def get_one_pag ...
- 用requests库爬取猫眼电影Top100
这里需要注意一下,在爬取猫眼电影Top100时,网站设置了反爬虫机制,因此需要在requests库的get方法中添加headers,伪装成浏览器进行爬取 import requests from re ...
随机推荐
- MD5摘要算法简析
1 MD5简介 1.1 概述 MD5即Message-Digest Algorithm 5(信息-摘要算法5),用于确保信息传输完整一致.是计算机广泛使用的杂凑算法之一(又译摘要算法.哈希算法),主 ...
- 正确释放Vector的内存
http://blog.jobbole.com/37700/ 今天在看微博的时候, 有人提出了一个对于Vector内存泄露的疑问( Link). 博主采用 Vector存储一些数据,但是发现在执行 c ...
- 安卓自定义控件(一)Canvas、Paint、Shader、Xfermode
关于自定义控件,之前就写过一篇自定义控件,上图下字的Button,图片任意指定大小,但是使用效果还是让人感觉不幸福,这次索性彻彻底底地对自定义控件做一次彻彻底底的总结. 我会花4篇博客来介绍自定义控件 ...
- web离线应用--dom storage
web离线应用--dom storage dom storage是html5添加的新功能,其实也不是什么新的应用,只不过是cookie的放大版本,由于cookie的大小只有4kb,而且在每次请求一个新 ...
- Android 在通知栏实现计时功能
Notification是APP 向系统发出通知时,它将先以图标的形式显示在通知栏中.用户可以下拉通知栏查看通知的详细信息.我们可以在通知栏实现自定义的效果,也可以结合service和BroadCas ...
- linux环境变量的配置
1.全局环境变量 vi /etc/profile JAVA_HOME=/opt/modules/jdk1.8.0_11/ export PATH=$PATH:$JAVA_HOME/bin:$JAV ...
- C语言之二分猜数字游戏
#include <stdio.h>#include <windows.h>#include<string.h>int main() { int oldprice, ...
- 学习爬虫的day02 (用线程去爬虫 提高速度)
通过lxml的方式去分析数据,将爬到的数据放到file中的html中代码如下# 用线程去爬虫 from urllib.request import Request from urllib.reques ...
- C语言结构体1.1
结构体组成 struct 结构体名: 类型名 成员名: 建立结构体 结构体名 类型名 { 成员: }: 建立一个关于学生信息的结构体(名字,年龄,性别,学号,成绩): 结构体定义 //结构体声明 s ...
- centos 使用 beyond compare 对比工具
我这里的环境是centos7桌面版 三条命令安装beyond compare wget http://www.scootersoftware.com/bcompare-4.2.3.22587.x86_ ...