from urllib import request
import re
import time
import random
import csv
from fake_useragent import UserAgent
#实例化一个对象
ua=UserAgent()
#随机获取一个火狐浏览器ua
##print(ua.firefox)
# 定义一个爬虫类
class MaoyanSpider(object):
# 初始化
# 定义初始页面url
def __init__(self):
self.url = 'https://movie.douban.com/chart'
# 请求函数
def get_html(self,url):
headers = {'User-Agent':ua.firefox}
req = request.Request(url=url,headers=headers)
res = request.urlopen(req)
html = res.read().decode()
# 直接调用解析函数
self.parse_html(html)
# 解析函数
def parse_html(self,html):
# 正则表达式
re_bds = '<table width="100%" class="">.*?title="(.*?)".*?<span class="rating_nums">(.*?)</span>.*?<span class="pl">(.*?)</span>'
# 生成正则表达式对象
pattern = re.compile(re_bds,re.S)
# r_list: [('我不是药神','徐峥,周一围,王传君','2018-07-05'),...] 列表元组
r_list = pattern.findall(html)
print(r_list)
self.save_html(r_list)
# 保存数据函数,使用python内置csv模块
def save_html(self,r_list):
#生成文件对象
with open('douban.csv','a',newline='',encoding="utf-8") as f:
#生成csv操作对象
writer = csv.writer(f)
#整理数据
for r in r_list:
name = r[0].strip()
star = r[1].strip()
time = r[2].strip()
L = [name,star,time]
# 写入csv文件
writer.writerow(L)
print(name,time,star)
# 主函数
def run(self):
#抓取第一页数据
self.get_html(self.url)
# 以脚本方式启动
if __name__ == '__main__':
#捕捉异常错误
try:
spider = MaoyanSpider()
spider.run()
except Exception as e:
print("错误:",e)
python-爬虫
于 2022-04-27 16:49:05 首次发布