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

运行环境:Windows7,python2.7.13html

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

步骤正则表达式

  1.  抓取网站源码python2.7

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

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

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

步骤1:抓取网站源码。

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

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

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

  第三页的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循环。(红色的为新增或变更后的代码)

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

import requests

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()

   结果如图:

相关文章
相关标签/搜索
本站公众号
   欢迎关注本站公众号,获取更多信息