爬虫设计流程

爬虫是一门综合技术,涉及网页请求,图像处理(验证码识别),数据存储...
本文介绍了通用的爬虫设计流程

页面分析

    1. 请求分析
    • 分析目标网站,查看所要爬取的内容隐藏在哪个url下,一般用浏览器的F12键或者fiddler抓包工具进行分析
    • 查看请求方式(GET/POST),请求参数类型(parameters/json/formdata parameters--直接拼接在url中,json--采用json.dumps(dict(data)), formdata--dict(data)),以及参数从何处获取
    1. 页面内容分析
    • 通过lxml解析,或者直接看文本查找目标内容
    • 如图:将内容copy下来,分析是否有目标内容(有些内容隐藏在ajax请求中)


反爬测试

    1. 直接通过requests测试返回结果
    1. 若1.失败,则添加headers继续测试
# 将浏览器的request headers复制下来传入函数,
# 获取对应dict
def header_parser(header):
    lines = header.split('\n')
    header_dict = {}
    for line in lines:
        line = line.strip()
        if line:
            k, v = line.split(': ', 1)
            header_dict[k] = v
    return header_dict
    1. 若返回结果仍无目标字段,则检查是否存在js渲染(若简单,破解之,若复杂采用selenium)
    1. 多个线程同时请求,测试目标网站IP限制策略
# 手工记个时间,大致判断并发多少IP会被禁掉
import re
import requests
from threading import Thread


def query(url):
    resp = requests.get(url)
    flag = re.findall(r'target', resp.content.decode())
    status_code = resp.status_code
    if status_code != 200 or not flag:
        print('query bad ...')


def multi_thread(num):
    for i in range(num):
        t = Thread(target=query, args=('http://target.com', ))
        t.start()

    1. 如碰到验证码,请移步--验证识别传送门,坑较多,需要花点时间

框架设计

  • 爬虫请求&解析模块(队列设计,实现分布式,弹性扩展)
  • 数据存储模块
  • 异常处理模块
  • 代理池
  • 其它(验证码破解等)

你可能感兴趣的:(爬虫设计流程)