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,以此类推. 二.< ...
随机推荐
- Windows 系统下 mysql workbench 的安装及环境配置
1.MySQL的官网地址:https://www.mysql.com/ 2,选择DOWNLOADS 3.选择community 再MySQL workbench 4.安装MySQL workbench ...
- 安装Window 10系统------计算机经验
为什么这次安装window10系统呢?不是和window7系统的安装方法一样么?如果你是这样的想的话,是不完全对的,因为window10系统的安装有些繁杂,需要耐心.下面我就准备了官方原版的windo ...
- 让EntityFramework.Extended支持MySql
EF:Entity Framework EFEL:Entity Framework Extended Library EFEL5.0时代是不支持MySql的,现在升级到6.0之后,已经支持MySql了 ...
- keepalived 安装篇-官方文档
官方安装文档 http://www.keepalived.org/doc/installing_keepalived.html Installing Keepalived Install keepal ...
- Linux CenterOS安装mysql-5.6.12-linux-glibc2.5-x86_64.tar.gz步骤
1.首先配置IP. Cd /etc/sysconfig/network-scripts/ vim ifcfg-ens32 将ONBOOT=no,改为ONBOOT=yes.(开机启动激活网卡) 2.构建 ...
- IOT,笔记:avrdude: ser_open(): can't open device "\\.\COM3": 系统找不到指定的文件。
1.下载驱动:https://www.arduino.cc/ 下载后解压 2.UNO板子以及驱动的相关设置 将UNO板子用数据线连接到电脑上,设置驱动: 打开设备管理器----->找到端口--- ...
- 11175-From D to E and Back(思维)
Problem UVA11175-From D to E and Back Accept: 164 Submit: 607Time Limit: 3000 mSec Problem Descript ...
- Leetcode:204
编写一个程序判断给定的数是否为丑数.丑数就是只包含质因数 2, 3, 5 的正整数.统计所有小于非负整数 n 的质数的数量.示例:输入: 10输出: 4解释: 小于 10 的质数一共有 4 个, 它们 ...
- 【js】event(事件对象)详解
1.事件对象 Event 对象代表事件的状态,比如事件在其中发生的元素.键盘按键的状态.鼠标的位置.鼠标按钮的状态. 什么时候会产生Event 对象呢? 例如: 当用户单击某个元素的时候,我们给这个元 ...
- day22 Pythonpython 本文xml模块
一.xml介绍 xml是实现不同语言或者程序直接进行数据交换的协议,跟json差不多,单json使用起来更简单.不过现在还有很多传统公司的接口主要是xml xml跟html都是标签语言 我们主要学习的 ...