爬取豆瓣电影

2019-02-25 16:14:40来源:博客园 阅读 ()

新老客户大回馈,云服务器低至5折

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)

 


原文链接:https://www.cnblogs.com/bkwxx/p/10426182.html
如有疑问请与原作者联系

标签:

版权申明:本站文章部分自网络,如有侵权,请联系:west999com@outlook.com
特别注意:本站所有转载文章言论不代表本站观点,本站所提供的摄影照片,插画,设计作品,如需使用,请与原作者联系,版权归原作者所有

上一篇:python 装饰器模拟京东登陆

下一篇:phthon中的open函数模式