zoukankan      html  css  js  c++  java
  • 爬取猫眼top100

    导入库

    json用于读取和写入文件

    requests请求html

    RequestException用于获取requests错误

    time定义时间

    re正则表达式

    import json
    import requests
    from requests.exceptions import RequestException
    import time
    import re 

    定义获取一个页面

    def get_one_page(url):
        try:
            header = {
                'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/70.0.3538.102 Safari/537.36'}
            res = requests.get(url,headers=header)
            # print(res)
            if res.status_code == 200:
                return res.text
            return None
        except RequestException:
            return None  

    解析页面

    def parse_one_page(html):
        pattern = re.compile('<dd>.*?board-index.*?>(.*?)</i>.*?data-src="(.*?)".*?name.*?a.*?>(.*?)</a>.*?star.*?>(.*?)</p>.*?releasetime.*?>(.*?)</p>.*?integer.*?>(.*?)</i>.*?fraction.*?>(.*?)</i></p>.*?</dd>',re.S)
        ’’’
        .*?匹配任意字符串;board-index是匹配的识别符;.*?>,匹配到以">"结尾;匹配到(.*?)内容;右结束符 </i> ;   .*?data-src="表示前面匹配一直到data-src="这个字段;(.*?)匹配到的内容;右结束 " ;    匹配格式为 .*?左边匹配字段(.*?)右边匹配字段 ;(.*?)括号内为匹配到的值    左右加 re.S 表示可以匹配任意值,不然 . / 换行符 等特殊字符无法匹配
       ’’’ items = re.findall(pattern,html) # print(items) for item in items: yield { "排名": item[0], "图片": item[1], "电影名": item[2], "演员": item[3].strip()[3:], "上映时间": item[4].strip()[4:], "评分": item[5] + item[6] }

    写入到文件

    def write_to_file(content):
        with open('result.txt','a',encoding='utf8') as f:
            f.write(json.dumps(content,ensure_ascii=False) + '
    ')
            f.close()
    

    定义爬取页面

    def main(offset):
        url = "https://maoyan.com/board/4?offset=" + str(offset)
        html = get_one_page(url)
        #print(html)
        for item in parse_one_page(html):
            # print(item)
            write_to_file(item)
    

    主程序

    if __name__ == '__main__':
        for i in range(10):
            main(i*10)
            time.sleep(1)
    

      *本文根据崔老师视频及自己实际测试得出,仍存在请求的问题,有待后续改进

  • 相关阅读:
    智能移动机器人背后蕴含的技术——激光雷达
    Kalman Filters
    Fiddler抓HttpClient的包
    VSCode开发WebApi EFCore的坑
    WPF之小米Logo超圆角的实现
    windows react打包发布
    jenkins in docker踩坑汇总
    Using ML.NET in Jupyter notebooks 在jupyter notebook中使用ML.NET ——No design time or full build available
    【Linux知识点】CentOS7 更换阿里云源
    【Golang 报错】exec gcc executable file not found in %PATH%
  • 原文地址:https://www.cnblogs.com/lijifei/p/11943338.html
Copyright © 2011-2022 走看看