豆瓣top250
主要步骤
1.发送请求,根据url地址,然后送请求 2.获取数据,获取服务器返回的响应的内容 3.解析数据:提取想要爬取的内容 4.保存数据:将得到的数据保存为文档
具体实施
代码语言:javascript复制#豆瓣top250
import csv #引入csv模块
import requests #引入请求模块
import time #引入时间模块
import parsel #导入数据解析模块
#打开一个csv文件并进行操作,将来数据要存储在csv文件中
f=open('豆瓣Top250' '.csv',mode='a',encoding='utf-8-sig',newline='') #newline,每行写入的时候都不会产生一个空行
#加表头,表的第一列
writer=csv.DictWriter(f,fieldnames=[
'电影名' ,
'导演演员' ,
'种类',
'评分' ,
'评论人数' ,
'简介',
])
writer.writeheader() #将这些字段写入
number=1 #多页获取,页数
for page in range(0,250,25):
print(f'正在爬取第{number}页数据')
number=number 1
time.sleep(1) #睡眠一秒
#第一步:发送请求,确定url地址,然后对其发送请求
#url='https://movie.douban.com/top250' #想要爬取的地址
url=f'https://movie.douban.com/top250?start={page}&filter='
#伪装成浏览器去访问,发送请求,User-Agent:浏览器的标识,基本信息
headers={ #注意是键值对
'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/107.0.0.0 Safari/537.36 Edg/107.0.1418.35'
}
#第二步:获取数据,获取服务器返回的响应的内容
response=requests.get(url=url,headers=headers) #传递相应的内容,获取服务器返回的响应数据内容
#第三步:解析数据,提取想要的内容
selector=parsel.Selector(response.text) #解析css里面的选择器
lis=selector.css('#content > div > div.article > ol > li') #获取所有的li标签
#找到大的li标签,再通过for循环找出每个小的标签
for li in lis:
title_list=li.css('div > div.info > div.hd > a > span:nth-child(1)::text').getall() #获取电影名称,这里只获取中文名
#这里用li而不用Selector是因为从li中获取,这是根据for后面的决定的
move_info=li.css('div > div.info > div.bd > p:nth-child(1)::text').getall() #获取电影的详细信息
move_comments=li.css('div > div.info > div.bd > div>span::text').getall() #获取电影的评论
move_simple=li.css('div > div.info > div.bd > p.quote > span::text').getall() #获取电影简介
#getall返回的是列表,所以需要join新的分隔符,连接返回新的字符串
title=''.join(title_list)
actor=move_info[0] #导演,演员
plot=move_info[1] #种类
scope=move_comments[0] #评分
pnum=move_comments[1] #评论人数
intro=''.join(move_simple) #电影简介
#第四步:保存数据,将得到的数据保存为文档
#装载数据
dit={
'电影名' : title,
'导演演员' : actor,
'种类': plot,
'评分': scope,
'评论人数': pnum,
'简介': intro,
}
writer.writerow(dit)