1:requests,json,time,re库
2:python3.x
3:pycharm
4:在线正则表达式测试网址
http://tool.oschina.net/regex/
说明:
博主使用的是python3.6,windows10操作系统
爬去猫眼电影前100的具体信息
此次使用requests和正则表达式
1:爬起的目标
http://maoyan.com/board/4
2:安装request库
3:对于每页的分析:每页具有十个电影:n-->n+1-->n+10
4: 爬去首页
a: 定义一个函数--获取响应头
b: 定义一个主函数---获取请求链接
c: 获取主页面源代码
5:正则表达式---提取电影信息
a:通过查看网页月源代码获取每一个电影信息都在中
b: 在class 为board-index的i节点内: 2
所以得到的正则表达式:.*?board-index.*?>(.*?)
c:提取电影的图片
分析:a节点--->图片2-->data-src属性
更新正则表达式:.*?board-index.*?>(.*?).*?data-src="(.*?)"
d:提取电影的名称
在p节点内,class=name-->name作为标志位-->a节点的正文内容
更新正则表达式:.*?board-index.*?>(.*?).*?data-src="(.*?)".*?name.*?a.*?>(.*?)
e:提取主演,发布时间,评分等内容时,同样的原理
主演:
主演:张国荣,张丰毅,巩俐
上映时间:
上映时间:1993-01-01
9.6
"""
author:jjk
datetime:2018/9/19
coding:utf-8
project name:Pycharm_workstation
Program function: 爬去猫眼电影排行榜
"""
import requests
import re # 正则表达式
from requests.exceptions import RequestException # 抛出异常
import json
import time
# 获取响应头(获取首页)
def get_one_page(url):
try:
# 响应头
headers = {
'User-Agent': 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_13_3) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/65.0.3325.162 Safari/537.36'
}
# get()请求获取
response = requests.get(url, headers=headers)
# 进行一个判断是否请求成功
if response.status_code == 200:
return response.text
return None
except RequestException:
return None
# 第二步:解析页面
def parse_one_page(html):
# 使用compile()方法选取需要的内容,re.S是包含换行在内的所有字符
pattern = re.compile('.*?board-index.*?>(\d+).*?data-src="(.*?)".*?name">(.*?).*?star">(.*?).*?releasetime">(.*?)'
+ '.*?integer">(.*?).*?fraction">(.*?).*? ', re.S)
# findall()使用正则表达式进行对获取的源代码进行筛选需要的部分
items = re.findall(pattern,html)
# 获取筛选的信息,输出结果是一个列表的形式
# print(items)
# 遍历列表以字典的形式输出
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(content):
# 打开一个文件用于追加。如果该文件已存在,文件指针将会放在文件的结尾。也就是说,新的内容将会被写入到已有内容之后。如果该文件不存在,创建新文件进行写入。
with open('content.txt', 'a', encoding='utf-8') as f:
# 以json库中的dumps()实现字典的序列化,ensure_ascii=False确保为中文形式而不是Unicode编码
f.write(json.dumps(content,ensure_ascii=False) + '\n')
# 主函数
def main(offset):
# 需要爬去的链接
url = 'http://maoyan.com/board/4?offset=' +str(offset)
# 调用get_one_page()方法进行请求响应
html = get_one_page(url)
# 获取html页面源代码
# print(html)
# 调用parse_onepage()方法进行解析页面
# parse_one_page(html)
# 遍历parse_one_page(html)方法以字典形式输出
for item in parse_one_page(html):
print(item)
write_to_file(item)
# 执行主函数
if __name__ == '__main__':
for i in range(10):
main(offset=i*10)
# 延时等待
time.sleep(1)