python 爬取猫眼电影排行

这篇学习了是崔庆才老师的《python3网络爬虫开发实践》中的案例自己学习了下。大家可以买啊,通俗易懂。

 秉承着无图无真相的精神。嘿嘿

 一、代码

import re #正则表达式
import pandas as pd #excel保存 
import requests as request #网络请求request
from fake_useragent import UserAgent #请求头参数构建


class CatEyeSpiper(object):
    #初始化参数
    def __init__(self):
        self.ua = UserAgent()  # 获取userAgent类
        self._data = list()
        self.head = {"User-Agent": self.ua.random}

    #解析html文件
    def parmer_html(self, offset):
        url = "https://maoyan.com/board/4?offset={}".format(offset)
        respon = request.get(url=url, headers=self.head)
        print(respon.content.decode('utf-8'))
        #主要是学习这句正则表达式 很简单
        pattern = re.compile(
            '
.*?board-index.*?>(.*?).*?data-src="(.*?)".*?(.*?)

.*?releasetime.*?>(.*?)

.*?integer.*?>(.*?).*?fraction.*?>(.*?).*?
', re.S) items = re.findall(pattern, respon.content.decode('utf-8')) #循环遍历数据保存list for item in items: one_data = { "image": item[1], "title": item[2].strip(), "actor": item[3].strip() if (len(item[3])) > 3 else '', "time": item[4].strip() if (len(item[4])) > 5 else '', "score": item[5].strip() + item[6].strip() } self._data.append(one_data) print(self._data) #保存excel在根目录 def save_excel(self): data = pd.DataFrame(self._data) data.to_csv("猫眼电影数据数据.csv", encoding='utf_8_sig') # 写入文件 def run(self): #猫眼数据规则 for i in range(10): self.parmer_html(offset=i * 10) if len(self._data)>0: self.save_excel() if __name__ == ('__main__'): carEye = CatEyeSpiper() carEye.run()

二、正则分析  

主要是下面图片一段html利用正则表达式数据提取。超简单

python 爬取猫眼电影排行_第1张图片

 

1 我不是药神

我不是药神

主演:徐峥,周一围,王传君

上映时间:2018-07-05

9.6

 

.*?board-index.*?>(.*?).*?data-src="(.*?)".*?(.*?)

.*?releasetime.*?>(.*?)

.*?integer.*?>(.*?).*?fraction.*?>(.*?).*?
'
  1. .*?board-index.*?>(.*?)   匹配
    开头 .*?表示任何数字字符字母 (.*?)要提取出来的数据。 ==
    ****board-index****>(***)结尾 提取编号
  2. .*?data-src="(.*?)".*?   == ******data-src=(***)*****   提取图片网络地址

三、总结

易犯错误:

  • 初始化参数list没有加括号,添加对象导致类型错误。类型不匹配。
  • 请求地址未转换格式 utf-8,导致读取为byte类型不匹配解析。
  • 正则表达式pattern后没有加 re.S 换行读取,导致数据读取不到。
  • 下载pandas库太慢,使用清华镜像源下载解决。pip install -i https://pypi.tuna.tsinghua.edu.cn/simple pandas

学习知识:

  •   正则表达式贪婪匹配于非贪婪匹配(.*?)
  •   Robos协议判断页面是否可抓取

四、快乐就是敲代码听歌  

你可能感兴趣的:(python)