【python+爬虫】爬去猫眼电影前100名具体信息

爬去猫眼电影前100名具体信息

准备工作

1:requests,json,time,re库
2:python3.x
3:pycharm
4:在线正则表达式测试网址
http://tool.oschina.net/regex/
说明:
博主使用的是python3.6,windows10操作系统

正文

1.目的

爬去猫眼电影前100的具体信息

2. 思路分析
此次使用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

更新正则表达式:
.*?board-index.*?>(\d+).*?data-src="(.*?)".*?name">(.*?).*?star">(.*?)

.*?releasetime">(.*?)

' + '.*?integer">(.*?).*?fraction">(.*?).*?
f: 调用findall()方法提取所以的内容 定义一个函数:解析获取的页面 生成的结果以字典的形式输出 6:写入文件 1:对于第5步已经获取到了以字典形成 2:进行写一个写入文件的函数 7:获取前n排名 在第6步中已经实现了首页的爬去,现在要获取前n(100)名,需要进行遍历 在主函数中进行一个for i range(n): main(offset=i*10) 8: 为防止反爬虫,增加一个演示等待
3.具体代码
"""
 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)
4.结果

你可能感兴趣的:(python,爬虫)