当前位置: 移动技术网 > IT编程>脚本编程>Python > 爬取豆瓣电影

爬取豆瓣电影

2019年02月25日  | 移动技术网IT编程  | 我要评论

须臾之间 lyrelion,252tv影院,冰封:永恒之门

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)

 

如对本文有疑问,请在下面进行留言讨论,广大热心网友会与你互动!! 点击进行留言回复

相关文章:

验证码:
移动技术网