目录[-]
简单的爬虫程序实践:爬取豆瓣电影Top250榜单的网站数据
#作者:冯桂和
#功能:爬取豆瓣电影Top250榜单的网站数据
#网址:https://movie.douban.com/top250
#保存:将爬取的数据保存至DouBanMovieTop250.csv
from urllib import request
import re
import time
import random
import csv
from ua_info import ua_list
# 定义一个爬虫类
class DouBanSpider(object):
#初始化
#定义初始页面url
def __init__(self):
self.url = "https://movie.douban.com/top250?start={}"
#请求函数
def get_html(self,url):
headers = {'User-Agent':random.choice(ua_list)} #随机用户请求头
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 = r'<span class="title">(.*?)</span>.*?<p class="">\n 导演: (.*?) .*?<br>\n (.*?) / (.*?) / .*?property="v:average">(.*?)</span>.*?<span>(.*?)人评价</span>.*?<span class="inq">(.*?)</span>'
#生成正则表达式对象
pattern = re.compile(re_bds,re.S)
#列表元组
r_list=pattern.findall(html)
self.save_html(r_list) #调用保存函数
#保存函数
def save_html(self,r_list):
#生成文件对象
with open('DouBanMovieTop250.csv','a',newline='',encoding="utf-8") as f:
#生成csv操作对象
writer = csv.writer(f)
#整理数据
for r in r_list:
name = r[0].strip()#电影名
director=r[1].strip()#导演名
year=r[2].strip()#年份
area = r[3].strip()#地区
mark=r[4].strip()#分数
people=r[5].strip()#评价人数
describe=r[6].strip()#描述
L = [name,director,year,area,mark,people,describe]
# 写入csv文件
writer.writerow(L)
print(name,mark)
#主函数
def run(self):
#抓取每一页数据,共10页
for offset in range(0,10): #生成0~9序列
url = self.url.format(offset*25) #分页url拼接
self.get_html(url) #url参数导入get_html函数
#生成1-2之间的浮点数
time.sleep(random.uniform(1,2))
# 以脚本方式启动
if __name__ == '__main__':
#捕捉异常错误
try:
spider = DouBanSpider()
spider.run()
except Exception as e:
print("错误:",e)
用户池
ua_list = [
'Mozilla/4.0 (compatible; MSIE 7.0; Windows NT 5.1; Maxthon 2.0',
'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_7_0) AppleWebKit/535.11 (KHTML, like Gecko) Chrome/17.0.963.56 Safari/535.11',
'User-Agent:Opera/9.80 (Windows NT 6.1; U; en) Presto/2.8.131 Version/11.11',
'Mozilla/5.0 (Windows NT 6.1; rv:2.0.1) Gecko/20100101 Firefox/4.0.1',
'Mozilla/4.0 (compatible; MSIE 7.0; Windows NT 6.0)',
'Mozilla/5.0 (Windows; U; Windows NT 6.1; en-us) AppleWebKit/534.50 (KHTML, like Gecko) Version/5.1 Safari/534.50',
'Mozilla/5.0 (compatible; MSIE 9.0; Windows NT 6.1; Trident/5.0',
'Mozilla/4.0 (compatible; MSIE 7.0; Windows NT 5.1',
'Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1',
'Mozilla/5.0 (Macintosh; Intel Mac OS X 10.6; rv:2.0.1) Gecko/20100101 Firefox/4.0.1',
]