多线程多进程爬虫

准备url地址的方法

  • 知道url地址的规律,知道一共多少页,准备url列表
  • 不知道url地址的规律或不知道总共有多少页,准备url_temp抓取下一页的url

多线程爬虫

  • threading
    • t1 = threading.Thread(target=func, args=(,))
    • t1.setDaemon(True)
    • ti.start() # 此时线程才会启动
  • 队列
    • q.join() # 阻塞主线程,让主线程等待队列任务结束之后再结束,队列任务会在计数为0时结束
    • q.task_done() 和q.get()方法配合,队列计数-1
    • q.put() 队列计数+1

多进程爬虫

  • multiprocessing

    from multiprocessing import Process
    p = Process(target=func, args=(,))
    p.daemon = True # 设置为守护线程
    p.start()
    from multiprocessing import JoinableQueue
    q = JoinableQueue()
    q.join # 主进程阻塞,等待队列任务结束
    q.put() # 计数+1
    q.get() # 计数不变
    q.task_done() # 和get一起使用计数-1
    

线程池爬虫

from multiprocessing.dummy import  Pool
Pool.apply_async(func, callback=fun2)

常见的一些反爬方式

  1. 通过User-Agent进行反爬
    • 解决思路:自己设计User-Agent,实现User-Agent池
  2. 通过cookie进行反爬
    • 解决思路:对于不登录的页面,使用requests.session()保存cookie信息
  3. 通过js进行反爬
    1. 通过js实现页面跳转反爬
    2. 通过js生成请求参数
    3. 通过js实现数据的加密
  4. 通过验证码进行反爬
    • 解决思路:使用云打码平台或是使用机器学习方法
  5. 通过IP地址反爬
    • 设置IP代理池

其他反爬方式

  1. 通过自定义字体来反爬
    • 解决思路:切换到手机版
  2. 通过css来反爬
    • 解决思路:计算css的偏移
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值