爬虫脚本(抓取豆瓣电影Top250)

运行环境:Windows7,python2.7.13

需求分析:爬取豆瓣电影网排行的Top250片名

步骤

  1.  抓取网站源码

  2.  利用正则表达式提取片名。

  3.  把电影片名保存到文本中。

  4.  重复以上3个步骤,直至Top250的片名全部保存完毕。

步骤1:抓取网站源码。

  分析网站的url,找出url的规律。

  第一页的url:https://movie.douban.com/top250?start=0&filter=

  第二页的url:https://movie.douban.com/top250?start=25&filter=

  第三页的url:https://movie.douban.com/top250?start=50&filter=

  最后一页的url:https://movie.douban.com/top250?start=225&filter=

  首先利用requests库的APi抓取网站源码:

import requests

response = requests.get('https://movie.douban.com/top250?start=0&filter=')
page = response.content

步骤2:利用正则表达式提取片名。

  观察html源码,利用正则表达式检索自己需要的内容。

import re

pattern = re.compile(r'<img width="100" alt=".*?"')
movie_list = re.findall(pattern, page)

步骤3:把电影片名保存到文本中。

file = open(u'豆瓣电影Top250.txt', 'w')
for i in movie_list:
    file.write(i)
file.close()

  这里打开豆瓣电影Top250.txt文件发现数据是下面图片这样的:

  这里需要对数据进行过滤。所以步骤3的代码如下:

file = open(u'豆瓣电影Top250.txt', 'w')
for k in movie_list:
    k = k.replace('<img width="100" alt="', '') #把没用的字符过滤掉
    k = k.replace('"', '') #把没用的字符过滤掉
    file.write(k)
    file.write('\n') #加上一个换行符,使一部电影名占一行
file.close()

 步骤4:重复以上3个步骤,直至Top250的片名全部保存完毕。

  这里使用一个for循环,一页一页地往后抓取数据,基本上就是把步骤1,2,3的代码合并在一起,加上一个for循环。(红色的为新增或变动后的代码)

n = 0
file = open('aa.txt', 'w')
for i in range(10): #这里一个只有10页,所以进行10次循环
    response = requests.get('https://movie.douban.com/top250?start=%s&filter=' % n)
    page = response.content
    pattern = re.compile(r'<img width="100" alt=".*?"')
    movie_list = re.findall(pattern, page)
    for k in movie_list:
        k = k.replace('<img width="100" alt="', '')
        k = k.replace('"', '')
        file.write(k)
        file.write('\n') #一页的电影名爬取完毕
    n += 25 #在步骤1可以发现url的规律,所以n每次加25
file.close()

 总结:上面这段代码已经可以完成任务了,下面是整理,封装成一个类的完整代码:

# -*- coding: utf-8 -*-
import re
import requests

class MovieTop250Spider:
    def __init__(self):
        self.n = 0
        self.url = 'https://movie.douban.com/top250?start=%s&filter=' % self.n

    def getPage(self, url): #用于下载网页html源码
        response = requests.get(url = url)
        page = response.content
        return page

    def spider(self):
        pattern = re.compile(r'<img width="100" alt=".*?"') #用于检索电影名的匹配模式
        file = open(u'豆瓣Top250电影.txt', 'w')
        for i in range(10):
            page = self.getPage(self.url)
            movie_list = re.findall(pattern, page)
            for k in movie_list:
                k = k.replace('<img width="100" alt="', '')
                k = k.replace('"', '')
                file.write(k)
                file.write('\n')
            self.n += 25
            self.url =  'https://movie.douban.com/top250?start=%s&filter=' % self.n
        file.close()

movie = MovieTop250Spider()
movie.spider()

   结果如图:

猜你喜欢

转载自www.cnblogs.com/Alfred-ou/p/9010454.html