運行環境:Windows7,python2.7.13html
需求分析:爬取豆瓣電影網排行的Top250片名。python
步驟:正則表達式
1. 抓取網站源碼。python2.7
2. 利用正則表達式提取片名。ide
3. 把電影片名保存到文本中。網站
4. 重複以上3個步驟,直至Top250的片名所有保存完畢。url
分析網站的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
觀察html源碼,利用正則表達式檢索本身須要的內容。
import re pattern = re.compile(r'<img width="100" alt=".*?"') movie_list = re.findall(pattern, page)
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()
這裏使用一個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()
結果如圖: