爬取豆瓣电影
程序员文章站
2023-03-09 16:14:45
1:创建爬虫文件,获取url地址 2:使用request获取第一页的请求信息 3:获取多页的请求信息 4:下载电影图片地址到本地 5:爬取豆瓣热门美剧存储到mongodb中 将json数据转换为字典,然后根据键subjects循环取出里面的值 取出我们想要的数据 获取多页数据 保存数据到mongod ......
1:创建爬虫文件,获取url地址
2:使用request获取第一页的请求信息
# -*- coding:utf-8 -*- #作者: baikai #创建时间: 2019/2/24 14:58 #文件: douban_spider.py #ide: pycharm import requests from bs4 import beautifulsoup url="https://movie.douban.com/top250" wb_data=requests.get(url) # 获取网页文本信息 soup=beautifulsoup(wb_data.text,'lxml') # 从soup中提取我们想要的信息 titles=soup.select('div.hd>a') rates=soup.select('span.rating_num') imgs=soup.select('img[width="100"]') for title,rate,img in zip(titles,rates,imgs): data={ 'title':list(title.stripped_strings), 'rate':rate.get_text(), 'img':img.get('src') } print(data)
3:获取多页的请求信息
# -*- coding:utf-8 -*- #作者: baikai #创建时间: 2019/2/24 14:58 #文件: douban_spider.py #ide: pycharm import requests from bs4 import beautifulsoup urls=['https://movie.douban.com/top250?start=n&filter=' for n in range(0,250,25)] for url in urls: wb_data=requests.get(url) # 获取网页文本信息 soup=beautifulsoup(wb_data.text,'lxml') # 从soup中提取我们想要的信息 titles=soup.select('div.hd>a') rates=soup.select('span.rating_num') imgs=soup.select('img[width="100"]') for title,rate,img in zip(titles,rates,imgs): data={ 'title':list(title.stripped_strings), 'rate':rate.get_text(), 'img':img.get('src') } print(data)
4:下载电影图片地址到本地
# -*- coding:utf-8 -*- #作者: baikai #创建时间: 2019/2/24 14:58 #文件: douban_spider.py #ide: pycharm import requests from bs4 import beautifulsoup i=0 urls=['https://movie.douban.com/top250?start=n&filter=' for n in range(0,250,25)] for url in urls: wb_data=requests.get(url) # 获取网页文本信息 soup=beautifulsoup(wb_data.text,'lxml') # 从soup中提取我们想要的信息 titles=soup.select('div.hd>a') rates=soup.select('span.rating_num') imgs=soup.select('img[width="100"]') for title,rate,img in zip(titles,rates,imgs): data={ 'title':list(title.stripped_strings), 'rate':rate.get_text(), 'img':img.get('src') } # 保存图片到本地 i+=1 filename=str(i)+'、'+data['title'][0]+''+data['rate']+'分.jpg' pic=requests.get(data['img']) with open('e:/envs/douban/douban_imgs/'+filename,'wb')as photo: photo.write(pic.content) print(data)
5:爬取豆瓣热门美剧存储到mongodb中
将json数据转换为字典,然后根据键subjects循环取出里面的值
取出我们想要的数据
# -*- coding:utf-8 -*- #作者: baikai #创建时间: 2019/2/24 20:06 #文件: douban_tv_us.py #ide: pycharm import requests,json url='https://movie.douban.com/j/search_subjects?type=tv&tag=%e7%be%8e%e5%89%a7&sort=recommend&page_limit=20&page_start=0' response_data=requests.get(url) # 将json数据转换为字典类型并根据键名循环取出值 json_data=json.loads(response_data.text) # 查看键名 # print(json_data) for tv in json_data['subjects']: # print(tv) # 取出我们需要的数据 data={ 'rate':tv['rate'], 'title':tv['title'], 'img_url':tv['cover'], 'id':tv['id'], # 自定义一个标志 'tag':"美剧" } print(data)
获取多页数据
# -*- coding:utf-8 -*- #作者: baikai #创建时间: 2019/2/24 20:06 #文件: douban_tv_us.py #ide: pycharm import requests,json # url='https://movie.douban.com/j/search_subjects?type=tv&tag=%e7%be%8e%e5%89%a7&sort=recommend&page_limit=20&page_start=0' # 这里的200可以修改为更高数字,目前只爬取200条数据 urls=['https://movie.douban.com/j/search_subjects?type=tv&tag=%e7%be%8e%e5%89%a7&sort=recommend&page_limit=20&page_start='+str(n) for n in range(0,200,20)] for url in urls: response_data=requests.get(url) # 将json数据转换为字典类型并根据键名循环取出值 json_data=json.loads(response_data.text) # 查看键名 # print(json_data) for tv in json_data['subjects']: # print(tv) # 取出我们需要的数据 data={ 'rate':tv['rate'], 'title':tv['title'], 'img_url':tv['cover'], 'id':tv['id'], # 自定义一个标志 'tag':"美剧" } print(data)
保存数据到mongodb数据库里面
# -*- coding:utf-8 -*- #作者: baikai #创建时间: 2019/2/24 20:06 #文件: douban_tv_us.py #ide: pycharm import requests,json,pymongo # url='https://movie.douban.com/j/search_subjects?type=tv&tag=%e7%be%8e%e5%89%a7&sort=recommend&page_limit=20&page_start=0' # 这里的200可以修改为更高数字,目前只爬取200条数据 client=pymongo.mongoclient(host='localhost',port=27017) db=client.db_bk collection = db.douban urls=['https://movie.douban.com/j/search_subjects?type=tv&tag=%e7%be%8e%e5%89%a7&sort=recommend&page_limit=20&page_start='+str(n) for n in range(0,200,20)] for url in urls: response_data=requests.get(url) # 将json数据转换为字典类型并根据键名循环取出值 json_data=json.loads(response_data.text) # 查看键名 # print(json_data) for tv in json_data['subjects']: # print(tv) # 取出我们需要的数据 data={ 'rate':tv['rate'], 'title':tv['title'], 'img_url':tv['cover'], 'id':tv['id'], # 自定义一个标志 'tag':"美剧" } collection.insert_one(data) print(data)