Spider -- 常规 爬取网站 步骤
-
-
确定url格式
-
发送请求
-
获取请求响应
-
解析响应数据,获取想要数据
-
保存数据(本地文件、数据库)
2、案例演示:
1、大致程序框架:
# 程序结构 class xxxSpider(object): def __init__(self): # 定义常用变量,url,headers及计数等 def get_html(self): # 获取响应内容函数,使用随机User-Agent def parse_html(self): # 使用正则表达式来解析页面,提取数据 def write_html(self): # 将提取的数据按要求保存,csv、MySQL数据库等 def main(self): # 主函数,用来控制整体逻辑 if __name__ == '__main__': # 程序开始运行时间戳 start = time.time() spider = xxxSpider() spider.main() # 程序运行结束时间戳 end = time.time() print('执行时间:%.2f' % (end-start))
2、
猫眼电影 - 榜单 - top100榜
电影名称、主演、上映时间
数据抓取实现
右键 - 查看网页源代码 - 搜索关键字 - 存在!!
-
2、找URL规律
第1页:https://maoyan.com/board/4?offset=0
第2页:https://maoyan.com/board/4?offset=10
第n页:offset=(n-1)*10
-
3、正则表达式
<div class="movie-item-info">.*?title="(.*?)".*?class="star">(.*?)</p>.*?releasetime">(.*?)</p>
-
4、编写程序框架,完善程序
from urllib import request import re import time import random from fake_useragent import UserAgent class MaoyanSpider(object): def __init__(self): self.url = 'https://maoyan.com/board/4?offset={}' # 计数 self.num = 0 # 获取 def get_html(self,url): headers = { 'User-Agent' : UserAgent().random } req = request.Request(url=url,headers=headers) res = request.urlopen(req) html = res.read().decode('utf-8') # 直接调用解析函数 self.parse_html(html) # 解析 def parse_html(self,html): re_bds = r'<div class="movie-item-info">.*?title="(.*?)".*?class="star">(.*?)</p>.*?releasetime">(.*?)</p>' pattern = re.compile(re_bds,re.S) # film_list: [('霸王别姬','张国荣','1993'),()] film_list = pattern.findall(html) # 直接调用写入函数 self.write_html(film_list) def write_html(self,film_list): item = {} for film in film_list: item['name'] = film[0].strip() item['star'] = film[1].strip() item['time'] = film[2].strip()[5:15] print(item) self.num += 1 def main(self): for offset in range(0,31,10): url = self.url.format(offset) self.get_html(url) time.sleep(random.randint(1,2)) print('共抓取数据:',self.num) if __name__ == '__main__': start = time.time() spider = MaoyanSpider() spider.main() end = time.time() print('执行时间:%.2f' % (end-start))