zoukankan      html  css  js  c++  java
  • 7.5爬取猫眼Top100电影名单

    2018-7-5 20:22:57

    还有有一丢丢成就感!以后可以爬取简单网站了!比如妹子图片,只是现在不知道咋下载!

    正则还是刚看,要多去用正则!正则很强大的东西!

    #!/usr/bin/env python
    #!--*--coding:utf-8 --*--
    #!@Time    :2018/7/5 18:08
    #!@Author   TrueNewBee
    #coding=utf-8
    #爬取猫眼电影
    #2018-7-5 17:37:30
    #http://maoyan.com/board/4?offset=0
    '''
    很完美!!!!2018-7-5 20:04:10 成功运行!啦啦啦
    我觉得正则部分还可以优化有空再优化
    '''
    
    import requests
    import re
    import time
    import json
    
    def  get_one_page(url):
        """爬取猫眼网页"""
        headers = {
            'User-Agent' : 'Mozilla/5.0 (Windows NT 6.1; WOW64)AppleWebKit/537.36 (KHTML, like Gecko)Chrome/55.0.2883.87 Safari/537.36'
        }
        response = requests.get(url,headers=headers)
        if response.status_code ==200:
            return response.text
        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 {
                '排名': item[0],
                '图片地址': item[1],
                '电影名字': item[2],
                '演员': item[3].strip()[3:],
                '上映时间': item[4].strip()[5:],
                '评分': item[5] + item[6]
            }
    
    
    def write_to_fire(content):
        """"把提取的数据写入文件"""
        with open("猫眼Top100电影.txt","a",encoding="utf-8") as f:
            print(type(json.dumps(content)))
            f.write(json.dumps(content,ensure_ascii=False)+'
    ') #使用json模块实现字典的序列化
    
    
    def main(offset):
        """主方法"""
        url ='http://maoyan.com/board/4?offset='+str(offset)
        html = get_one_page(url)
        for item in parse_one_page(html):
            print(item)
            write_to_fire(item)
    
    
    if __name__ == '__main__':
        for i in range(10):
            main(offset=i *10)
  • 相关阅读:
    2006: [NOI2010]超级钢琴
    3640: JC的小苹果
    2005: [Noi2010]能量采集
    金蝶云星空修改密码策略的SQL脚本
    关于 springboot 过滤器中使用@Autowired 为空 以及 使用 @Value 无法读取yml配置的问题解决
    CAS .NET Client 循环重定向的解决办法
    K/3 Cloud SSO配置
    K/3 Cloud SSO配置答疑
    K/3 Cloud 元数据表
    AngularJS select中ngOptions用法详解【转】
  • 原文地址:https://www.cnblogs.com/zhen1996/p/9270309.html
Copyright © 2011-2022 走看看