# =============================================================================
# 采集猫眼看电影中top前100的电影名称
# 
# 
# 1. 电影名称
# 2. 电影主演
# 3. 上映时间
# 4. 电影分数
# 5. 电影封面图片
# 6. 电影主页网址    
# =============================================================================
import requests 
import re
import os
from bs4 import BeautifulSoup
import pandas as pd
url = ‘https://maoyan.com/board/4‘
headers = {‘User-Agent‘:‘Mozilla/5.0 (Windows NT 10.0; WOW64)       AppleWebKit/537.36 (KHTML, like Gecko) Chrome/55.0.2883.87        Safari/537.36‘}
r = requests.get(url,headers = headers)
    
r.encoding = ‘utf-8‘
r.text
bs = BeautifulSoup(r.text,‘lxml‘)    
bs    
# 将得到的数据类型转化为需要的格式 
bs.find_all(‘p‘,‘name‘)[0].text    
    
# 首先提取出电影的名称
# =============================================================================
# name = []
# for i in bs.find_all(‘p‘,‘name‘):
#     name.append(i.text)
# name  
# =============================================================================
# 利用列表生成式
[i.text for i in  bs.find_all(‘p‘,‘name‘)]   
# 提取出电影的主演
# =============================================================================
# bs.find_all(‘p‘,‘star‘)[0].text.strip()  # 其中的strip是去除得到数据的前后空格
# 
# user = []
# for i in bs.find_all(‘p‘,‘star‘):
#     user.append(i.text.strip())
# user    
# =============================================================================
    
# 列表生成式
[i.text.strip() for i in bs.find_all(‘p‘,‘star‘)]    
    
# 提取出上映时间
a = bs.find_all(‘p‘,‘releasetime‘)[0].text
# =============================================================================
# time = []
# for i in bs.find_all(‘p‘,‘releasetime‘):
#     time.append(i.text.replace(‘上映时间:‘,‘‘))
# time
# =============================================================================
[i.text.replace(‘上映时间:‘,‘‘) for i in bs.find_all(‘p‘,‘releasetime‘)]
    
# 电影的评分
bs.find_all(‘p‘,‘score‘)[0].text
[i.text for i in bs.find_all(‘p‘,‘score‘)]
# 电影封面的网址
bs.find_all(‘img‘,‘board-img‘)[0][‘data-src‘]
[i[‘data-src‘] for i in bs.find_all(‘img‘,‘board-img‘)]
# 电影主页的网址
bs.find_all(‘a‘,‘image-link‘)[0][‘href‘]
[i[‘href‘] for i in bs.find_all(‘a‘,‘image-link‘)]
# In[] =======================================================================================
# 进行整合  一次爬取电影一页的信息
def fun1(url):
    name,score,star,time,img,href = [],[],[],[],[],[]
    url = ‘https://maoyan.com/board/4‘
    headers = {‘User-Agent‘:‘Mozilla/5.0 (Windows NT 10.0; WOW64)           AppleWebKit/537.36 (KHTML, like Gecko) Chrome/55.0.2883.87            Safari/537.36‘}
    r = requests.get(url,headers = headers)
        
    r.encoding = ‘utf-8‘
    bs = BeautifulSoup(r.text,‘lxml‘)    
    
    # 将得到的数据类型转化为需要的格式 
    bs.find_all(‘p‘,‘name‘)[0].text  
      
    
    name = [i.text for i in  bs.find_all(‘p‘,‘name‘)]  
    
    score = [i.text for i in bs.find_all(‘p‘,‘score‘)]
    
    star = [i.text.strip() for i in bs.find_all(‘p‘,‘star‘)] 
  
    time = [i.text.replace(‘上映时间:‘,‘‘) for i in bs.find_all(‘p‘,‘releasetime‘)]
      
    img = [i[‘data-src‘] for i in bs.find_all(‘img‘,‘board-img‘)]
      
    href = [i[‘href‘] for i in bs.find_all(‘a‘,‘image-link‘)]
    
    
    df = pd.DataFrame()
    
    df[‘电影名‘] = name
    df[‘评分‘] = score
    df[‘主演‘] = star
    df[‘上映时间‘] = time
    df[‘电影画面网址‘] = img
    df[‘电影主页网址‘] = href
    
    return  df
# ===================================================  调用
url = ‘https://maoyan.com/board/4‘
data = fun1(url)
data[‘完整主页网址‘] =  ‘https://maoyan.com‘+ data.电影主页网址
    
data.完整主页网址
# In[]==========================================================================
# 将上面的函数用到  想提取几页就提取几页 想提取那个网址 直接设置地址就好
# 首先提取网页源代码
url = ‘https://maoyan.com/board/4?offset=10‘
import time
empty_df = pd.DataFrame()
# 为了节省时间 此处只截取前5页  如果想多采集更该循环次数即可
for i in range(0,5):
    url = ‘https://maoyan.com/board/4?offset={}‘.format(i*10)
    print(url) # 每采集完一夜的信息打印一次网址
    df = fun1(url)
    empty_df = empty_df.append(df,ignore_index= True ) 
    # 将得到的每一页的信息拼接到这张大表中  ignore_index = True 表示对得到的列表序列重新排序
    time.sleep(3)
    print(i+1)
# =============================================================================
# # 在爬取信息时 为了防止封ip 设置休眠 隔几秒采取一次 
# import time
# time.sleep(3)
# =============================================================================
原文:https://www.cnblogs.com/manjianlei/p/11545545.html