运行环境: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循环。(红色的为新增或变动后的代码)
# -*- 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()
结果如图: