'''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.****.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,以此类推. 二.< ...
随机推荐
-
Java多线程之并发协作生产者消费者设计模式
两个线程一个生产者个一个消费者 需求情景 两个线程,一个负责生产,一个负责消费,生产者生产一个,消费者消费一个 涉及问题 同步问题:如何保证同一资源被多个线程并发访问时的完整性.常用的同步方法是采用标 ...
-
PAT/查找元素习题集
B1004. 成绩排名 (20) Description: 读入n名学生的姓名.学号.成绩,分别输出成绩最高和成绩最低学生的姓名和学号. Input: 每个测试输入包含1个测试用例,格式为: 第1行: ...
-
Node.js module.exports和exports的区别
require 用来加载代码,而 exports 和 module.exports 则用来导出代码,从接触node.js就不会它们两陌生,上代码: foo.js exports.a = functio ...
-
推荐一个可以直接在Visual Studio中看到complexity的插件CodeMaid
博客搬到了fresky.github.io - Dawei XU,请各位看官挪步.最新的一篇是:推荐一个可以直接在Visual Studio中看到complexity的插件CodeMaid.
-
MySQL 水平拆分(读书笔记整理)
转:http://blog.****.net/mchdba/article/details/46278687 1,水平拆分的介绍 一般来说,简单的水平切分主要是将某个访问极其平凡的表再按照某个字段的某 ...
-
【BZOJ2004】公交线路(动态规划,状态压缩,矩阵快速幂)
[BZOJ2004]公交线路(动态规划,状态压缩,矩阵快速幂) 题面 BZOJ 题解 看到\(k,p\)这么小 不难想到状态压缩 看到\(n\)这么大,不难想到矩阵快速幂 那么,我们来考虑朴素的\(d ...
-
jvm领域优秀博主
dh5724 不过**** iteye 博客园信息均被自己删除,只在一些问答中和引用中有部分信息. redcreen 对jvm有深入认知. RednaxelaFX oracle java 编译器开发者 ...
-
antv g6
<!DOCTYPE html><html lang="en"><head> <meta charset="UTF-8&qu ...
-
分布式队列ZooKeeper的实现
一.背景 有一些时候,多个团队需要共同完成一个任务,比如,A团队将Hadoop集群计算的结果交给B团队继续计算,B完成了自己任务再交给C团队继续做.这就有点像业务系统的工作流一样,一环一环地传下 去, ...
-
EDK II之USB总线驱动的实现框架
本文简单介绍一下UEFI中USB驱动的实现框架: 下图是USBD向上层驱动提供的接口: 1.从图中我们可以看出,USBDI的实现主要通过调用HCDI实现 和 访问USB_INTERFACE结构体(该结 ...