14-Requests+正则表达式爬取猫眼电影
'''Requests+正则表达式爬取猫眼电影TOP100'''
'''
流程框架:
抓去单页内容:利用requests请求目标站点,得到单个网页HTML代码,返回结果。
正则表达式分析:根据HTML代码分析得到电影的名称、主演、上映时间、评分、图片链接等信息。
保存至文件:通过文件的形式保存结果,每一部电影一个结果一行Json字符串。
开启循环及多线程:对多页内容遍历,开启多线程提高抓取速度。
'''
import requests
import re
from requests.exceptions import RequestException
import json
from multiprocessing import Pool def get_one_page(url,headers):
'''得到网页源码'''
try:
#此处必须要传入headers参数,否则因为有些网站服务器的反爬机制,会返回403 Forbidden。参考:https://blog.csdn.net/lv0817/article/details/79185322
response = requests.get(url=url,headers=headers) #这里要注意,必须使用url=url,headers=headers的格式,否则传参无效。
if response.status_code == 200:
return response.text
return None
#可以查看requests库的官方文档的Exceptions模块,可知RequestException为所有异常的父类或间接父类。
except RequestException:
return None def parse_one_page(html):
'''解析得到的网页源码'''
#编译正则表达式
pattern = re.compile('<dd>.*?board-index.*?>(\d+)</i>.*?data-src="(.*?)".*?name"><a.*?>(.*?)</a>.*?star">(.*?)</p>'
'.*?releasetime">(.*?)</p>.*?integer">(.*?)</i>.*?fraction">(.*?)</i>.*?</dd>',re.S)
items = re.findall(pattern,html)
#创建一个生成器
for item in items:
yield {
'index':item[0],
'image':item[1],
'title':item[2],
'actor':item[3].strip()[3:],
'time':item[4][5:],
'score':item[5]+item[6]
} def write_to_file(content):
'''解析好的数据写入到文件'''
with open('result.txt','a',encoding='utf-8') as f: #'a'表示内容可追加。当有中文时,指定编码utf-8防止乱码。
#json.dumps序列化时对中文默认使用的ascii编码.想输出真正的中文需要指定ensure_ascii = False。
f.write(json.dumps(content,ensure_ascii=False) + '\n') #json.dumps将字典转换为字符串
f.close() def main(offset):
url = "http://maoyan.com/board/4?offset=" + str(offset) #点击下一页观察网址可知
headers = {
'User-Agent': 'Mozilla/5.0(Macintosh;Intel Mac OS X 10_11_4)AppleWebKit/537.36(KHTML,like Gecko)Chrome/52.0.2743.116 Safari/537.36'
}
html = get_one_page(url,headers)
#遍历生成器
for item in parse_one_page(html):
print(item)
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)]) #第一个参数是方法名,第二个参数是可遍历对象。map方法作用是,拿出可遍历数组中的每一个值当做函数的参数,然后创建一个个的进程,放到进程池里面去运行。
14-Requests+正则表达式爬取猫眼电影的更多相关文章
- PYTHON 爬虫笔记八:利用Requests+正则表达式爬取猫眼电影top100(实战项目一)
利用Requests+正则表达式爬取猫眼电影top100 目标站点分析 流程框架 爬虫实战 使用requests库获取top100首页: import requests def get_one_pag ...
- Requests+正则表达式爬取猫眼电影
目标 提取出猫眼电影TOP100的电影名称.时间.评分.图片等信息,提取站点的URL为http://maoyan.com/board/4,提取的结果以文本的形式保存下来. 准备工作 请安装好reque ...
- Requests+正则表达式爬取猫眼电影(TOP100榜)
猫眼电影网址:www.maoyan.com 前言:网上一些大神已经对猫眼电影进行过爬取,所用的方法也是各有其优,最终目的是把影片排名.图片.名称.主要演员.上映时间与评分提取出来并保存到文件或者数据库 ...
- Python爬虫学习==>第十章:使用Requests+正则表达式爬取猫眼电影
学习目的: 通过一个一个简单的爬虫应用,初窥门径. 正式步骤 Step1:流程框架 抓取单页内容:利用requests请求目标站点,得到单个页面的html代码,返回结果: 正则表达式分析:根据html ...
- Requests+正则表达式 爬取猫眼电影
代码: import re import json from multiprocessing import Pool import requests from requests.exceptions ...
- python爬虫知识点总结(九)Requests+正则表达式爬取猫眼电影
一.爬取流程 二.代码演示 #-*- coding: UTF-8 -*- #_author:AlexCthon #mail:alexcthon@163.com #date:2018/8/3 impor ...
- Python爬虫实战之Requests+正则表达式爬取猫眼电影Top100
import requests from requests.exceptions import RequestException import re import json # from multip ...
- python爬虫从入门到放弃(九)之 Requests+正则表达式爬取猫眼电影TOP100
import requests from requests.exceptions import RequestException import re import json from multipro ...
- Python爬虫之requests+正则表达式抓取猫眼电影top100以及瓜子二手网二手车信息(四)
requests+正则表达式抓取猫眼电影top100 一.首先我们先分析下网页结构 可以看到第一页的URL和第二页的URL的区别在于offset的值,第一页为0,第二页为10,以此类推. 二.< ...
随机推荐
- .net core系列之《.net core内置IOC容器ServiceCollection》
一.IOC介绍 IOC:全名(Inversion of Control)-控制反转 IOC意味着我们将对象的创建控制权交给了外部容器,我们不管它是如何创建的,我们只需要知道,当我们想要某个实例时,我们 ...
- Oracle EBS FORM lov
存在一种情况: 一个LOV的值当前有效,因此填入保存.但突然无效后,当查询该界面时就会弹出LOV框使其修改. 解决方案: 1. 非常粗暴,不设置校验,在LOV对应的item强行将校验设置为NO. 2. ...
- 简单易懂的程序语言入门小册子(7):基于文本替换的解释器,加入continuation,重构解释器
或许在加入continuation之前要先讲讲费这么大劲做这个有什么意义. 毕竟用不用continuation的计算结果都是一样的. 不过,这是一个兴趣使然的系列,学习这些知识应该完全出于好奇与好玩的 ...
- Python:decorator [转]
Python中的装饰器是你进入Python大门的一道坎,不管你跨不跨过去它都在那里. 为什么需要装饰器 我们假设你的程序实现了say_hello()和say_goodbye()两个函数. def sa ...
- LeetCode算法题-Number of Segments in a String(Java实现)
这是悦乐书的第226次更新,第239篇原创 01 看题和准备 今天介绍的是LeetCode算法题中Easy级别的第93题(顺位题号是434).计算字符串中的段数,其中段定义为非空格字符的连续序列.请注 ...
- LeetCode算法题-Single Number(Java实现)
这是悦乐书的第175次更新,第177篇原创 01 看题和准备 今天介绍的是LeetCode算法题中Easy级别的第34题(顺位题号是136).给定一个非空的整数数组,除了一个元素外,每个元素都会出现两 ...
- 团队作业—预则立&&他山之石
团队作业-预则立&&他山之石 Deadline: 2017.10.24 22:00pm 作业要求 一.确立团队选题,建立和初步熟悉团队git的协作方式.项目后续的代码.文档都要通过gi ...
- baidu.com跳转www.baidu.com
打开git bash,输入 curl baidu.com,收到返回 <html> <meta http-equiv="refresh" content=" ...
- 阿里中间件——消息中间件Notify和MetaQ
3.1.Notify Notify是淘宝自主研发的一套消息服务引擎,是支撑双11最为核心的系统之一,在淘宝和支付宝的核心交易场景中都有大量使用.消息系统的核心作用就是三点:解耦,异步和并行.下面让我以 ...
- linux下c程序 daemon、fork与创建pthread的顺序问题
版权声明:本文为博主原创文章,未经博主同意不得转载. https://blog.csdn.net/shuyun123456789/article/details/34418875 近期发如今写linu ...