使用Requests爬取猫眼电影

     谈到爬虫大家可能对Requests库不会陌生,相比urllib库的话Requests库在处理网页认证和Cookies时更加方便,话不多少,下面让我通过爬取猫眼电影前100名排行榜实例来说明一下。

     首先我们打开猫眼电影排行版链接‘https://maoyan.com/board/4’界面效果如图所示,可以看到排行榜第一名是张国荣主演的“霸王别姬”,还有电影评分。

使用Requests爬取猫眼电影

     当我们把网页下拉到最下方时,此时我们点击第二页,我们可以看到链接地址为‘https://maoyan.com/board/4?offset=10’,当鼠标点击第3页时网页链接地址为‘https://maoyan.com/board/4?offset=20’,点击第10页时网页链接地址为‘https://maoyan.com/board/4?offset=90’。此时我们不难发现出规律,当我们选择查看第几页的时候,只是offset=“”里面的参数在变,那当我们爬取到第一页的时候,通过一个for循环就可以把1-10页的网页内容爬取下来。

     我们鼠标右击,然后选择“检查”查看网页代码:我们想要做的时爬取排行榜前100名的电影名称、排名、和图片地址,并把图片保存到本地。那么我们可以通过requests.get方法获取网页内容,然后通过正则表达式来匹配我们想要的内容。下面直接上代码:使用Requests爬取猫眼电影

 

 

import requests  #引入requests库
import re,json  #引入re和json模块


def  get_one_page(url): #定义一个方法来获取单个网页链接
    try:                             
        response = requests.get(url) #获取网页的text
        if response.status_code == 200 :  #通过状态码是否等于200判断是否请求成功,成功的话返回text内容,未请求成功的                     返回None值
            return response.text      
        else :
            return None
    except BaseException  :
        return  None


def parse_one_page(html):   #定义一个方法解析网页内容
    pattern = re.compile('<dd>.*?board-index.*?>(\d+)</i>.*?data-src="(.*?)".*?name"><a'
                         +'.*?>(.*?)</a>.*?'

                         ,re.S)  #通过正则表达式匹配我们想要的内容,
    items = re.findall(pattern,html)
    print(items) #打印一下查看获取的内容是否匹配,此处上图一份: 
    print(type(items))  #如图所示我们得到的是数据是个列表,列表里面又有元祖
    for item in items:   #遍历列表,使用yield生成器生成一个字典,'index'为排名,'title'为电影名称,'image'为电影图片链接地址
        yield {
            'index' : item[0],
            'title': item[2],
            'image': item[1]
        }              
        title = item[2]       
        contents = requests.get(item[1]).content   #把图片保存到本地,根据自己情况建立文件夹,在这我保存到的是D盘下的python1文件夹下面。 
        with open(r'D:\python1\ ' +  title + '.jpg','wb') as f:
            f.write(contents)


def write_to_file(content):   #把获取的内容保存下来
    with open('result.txt','a',encoding='utf-8') as f:
        f.write(json.dumps(content,ensure_ascii=False) + '\n')
        f.close()


def run(offset):  #定义run方法,运行整个程序
    url = 'https://maoyan.com/board/4?offset=' + str(offset)
    html = get_one_page(url)
    for item in parse_one_page(html):
        #print(item)
        write_to_file(item)


if __name__ == '__main__':
    for i in range(10):   #通过range方法,生成offset的值,来获取猫眼排行榜1-10页的电影排名
        run(i*9)

 接下来啥也不说了上图给大家看:

result.txt中的内容

 

 

使用Requests爬取猫眼电影

python1的电影图片:

使用Requests爬取猫眼电影

大家有兴趣的可以看看,以后会不定期和大家分享我学到的python内容和知识,文中有不当之处还请指教!