爬虫--requests爬取猫眼电影排行榜
时间:2019-11-05
本文章向大家介绍爬虫--requests爬取猫眼电影排行榜,主要包括爬虫--requests爬取猫眼电影排行榜使用实例、应用技巧、基本知识点总结和需要注意事项,具有一定的参考价值,需要的朋友可以参考一下。
'''
目标:使用requests分页爬取猫眼电影中榜单栏目中TOP100榜的所有电影信息,并将信息写入文件
URL地址:http://maoyan.com/board/4 其中参数offset表示其实条数
获取信息:{排名,图片,标题,主演,放映时间,评分}
'''
from requests.exceptions import RequestException
import requests
import re,time,json
def getPage(url):
'''爬取指定url页面信息'''
try:
#定义请求头信息
headers = {
'User-Agent': 'User-Agent:Mozilla/5.0(WindowsNT6.1;rv:2.0.1)Gecko/20100101Firefox/4.0.1'
}
#执行爬取
res = requests.get(url,headers=headers)
#判断响应状态,并响应爬取内容
if res.status_code == 200:
return res.text #获取爬取到的网页信息
else:
return None
except RequestException.URLError:
return None
def parsePage(html):
'''解析爬取网页中的内容,并返回字段结果'''
#定义解析正则表达式
pat = '<i class="board-index board-index-[0-9]+">([0-9]+)</i>.*?<img data-src="(.*?)" alt="(.*?)" class="board-img" />.*?<p class="star">(.*?)</p>.*?<p class="releasetime">(.*?)</p>.*?<i class="integer">([0-9\.]+)</i><i class="fraction">([0-9]+)</i>'
#执行解析
items = re.findall(pat,html,re.S) #使 . 匹配包括换行在内的所有字符
#遍历封装数据并返回
for item in items:
yield {
'index':item[0],
'image':item[1],
'title':item[2],
'actor':item[3].strip()[3:], #.strip()函数去除首尾空格,[3:] 字符串>3才会执行,否则返回空
'time': item[4].strip()[5:],
'score': item[5] + item[6],
}
def writeFile(content):
'''执行文件追加写操作'''
'''执行文件追加写操作'''
#print(content)
with open("./result.txt",'a',encoding='utf-8') as f:
f.write(json.dumps(content,ensure_ascii=False) + "\n")
#json.dumps 序列化时对中文默认使用的ascii编码.想输出真正的中文需要指定ensure_ascii=False
def main(offset):
'''主程序函数,负责调度执行爬虫处理'''
url = 'http://maoyan.com/board/4?offset=' + str(offset)
print(url)
html = getPage(url)
#判断是否爬取到数据,并调用解析函数
if html:
for item in parsePage(html):
writeFile(item)
# 判断当前执行是否为主程序运行,并遍历调用主函数爬取数据
if __name__ == '__main__':
for i in range(10):
main(offset=i*10)
time.sleep(1)
原文地址:https://www.cnblogs.com/12james/p/11797818.html
- CSS魔法堂:选择器及其优先级
- 常见的Web实时消息交互方式和SignalR
- 【设计模式】——工厂方法FactoryMethod
- 前端翻译:Activating Browser Modes with Doctype
- JS魔法堂:doctype我们应该了解的基础知识
- CentOS6.5菜鸟之旅:安装Realtek无线网卡驱动
- CentOS6.5菜鸟之旅:U盘安装CentOS64位
- 人工智能创造新型态工作 制造业受冲击
- ASP.NET Core File Providers
- JS魔法堂之实战:纯前端的图片预览
- 域名publica.com近50万交易 买家身份浮出水面
- Vim杂记:Sublime的配色方案
- Vim杂记:markdown插件
- 【手把手教你全文检索】Apache Lucene初探
- JavaScript 教程
- JavaScript 编辑工具
- JavaScript 与HTML
- JavaScript 与Java
- JavaScript 数据结构
- JavaScript 基本数据类型
- JavaScript 特殊数据类型
- JavaScript 运算符
- JavaScript typeof 运算符
- JavaScript 表达式
- JavaScript 类型转换
- JavaScript 基本语法
- JavaScript 注释
- Javascript 基本处理流程
- Javascript 选择结构
- Javascript if 语句
- Javascript if 语句的嵌套
- Javascript switch 语句
- Javascript 循环结构
- Javascript 循环结构实例
- Javascript 跳转语句
- Javascript 控制语句总结
- Javascript 函数介绍
- Javascript 函数的定义
- Javascript 函数调用
- Javascript 几种特殊的函数
- JavaScript 内置函数简介
- Javascript eval() 函数
- Javascript isFinite() 函数
- Javascript isNaN() 函数
- parseInt() 与 parseFloat()
- escape() 与 unescape()
- Javascript 字符串介绍
- Javascript length属性
- javascript 字符串函数
- Javascript 日期对象简介
- Javascript 日期对象用途
- Date 对象属性和方法
- Javascript 数组是什么
- Javascript 创建数组
- Javascript 数组赋值与取值
- Javascript 数组属性和方法