Spider -- 常规 爬取网站 步骤

1、爬取网站基本步骤:

  1. 确定网页是动态或静态类型

  2. 确定url格式

  3. 发送请求

  4. 获取请求响应

  5. 解析响应数据,获取想要数据

  6. 保存数据(本地文件、数据库)

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抓取案例

    

猫眼电影 - 榜单 - top100榜
电影名称、主演、上映时间

  数据抓取实现

  • 1、确定响应内容中是否存在所需数据

  右键 - 查看网页源代码 - 搜索关键字 - 存在!!
  • 2、找URL规律

    第1页:https://maoyan.com/board/4?offset=0
    第2页:https://maoyan.com/board/4?offset=10
    第n页:offset=(n-1)*10
  • 3、正则表达式

class="movie-item-info">.*?title="(.*?)".*?class="star">(.*?)

.*?releasetime">(.*?)

  • 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'
.*?title="(.*?)".*?class="star">(.*?)

.*?releasetime">(.*?)

' 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 += 1def 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))

 

 

你可能感兴趣的:(Spider -- 常规 爬取网站 步骤)