赞
踩
1.发送请求,根据url地址,然后送请求
2.获取数据,获取服务器返回的响应的内容
3.解析数据:提取想要爬取的内容
4.保存数据:将得到的数据保存为文档
#豆瓣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)
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。