准备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)
常见的一些反爬方式
- 通过User-Agent进行反爬
- 解决思路:自己设计User-Agent,实现User-Agent池
- 通过cookie进行反爬
- 解决思路:对于不登录的页面,使用requests.session()保存cookie信息
- 通过js进行反爬
- 通过js实现页面跳转反爬
- 通过js生成请求参数
- 通过js实现数据的加密
- 通过验证码进行反爬
- 解决思路:使用云打码平台或是使用机器学习方法
- 通过IP地址反爬
- 设置IP代理池
其他反爬方式
- 通过自定义字体来反爬
- 解决思路:切换到手机版
- 通过css来反爬
- 解决思路:计算css的偏移