爬蟲腳本(抓取豆瓣電影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()

   結果如圖:

相關文章
相關標籤/搜索
本站公眾號
   歡迎關注本站公眾號,獲取更多信息