这篇学习了是崔庆才老师的《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利用正则表达式数据提取。超简单
1
9.6
.*?board-index.*?>(.*?).*?data-src="(.*?)".*? '(.*?).*?releasetime.*?>(.*?).*?integer.*?>(.*?).*?fraction.*?>(.*?).*?
- .*?board-index.*?>(.*?) 匹配开头 .*?表示任何数字字符字母 (.*?)要提取出来的数据。 ==
- ****board-index****>(***)结尾 提取编号
- .*?data-src="(.*?)".*? == ******data-src=(***)***** 提取图片网络地址
易犯错误:
- 初始化参数list没有加括号,添加对象导致类型错误。类型不匹配。
- 请求地址未转换格式 utf-8,导致读取为byte类型不匹配解析。
- 正则表达式pattern后没有加 re.S 换行读取,导致数据读取不到。
- 下载pandas库太慢,使用清华镜像源下载解决。pip install -i https://pypi.tuna.tsinghua.edu.cn/simple pandas
学习知识:
- 正则表达式贪婪匹配于非贪婪匹配(.*?)
- Robos协议判断页面是否可抓取