#
准备: robots UA 池 图片懒加载 cookie IP ajax js 加密(js逆向 字体加密/大众点评/ base64 md5 AES python复写 要不就是第三方库执行js代码) 验证码 云打码/超级鹰/极验缺口操作 模拟浏览器 -- selenium 动作链 -- chrome无头 解析工具 -- xpath bs4 正则 pyquery 抓包工具 -- fiddler mitproxy 测试工具 -- postman ua 手机端 app text/plain scrapy -基础- scrapy startproject name cd name scrapy genspider sname xxx.com scrapy crawl sname - 全量数据获取 - 链接提取器/规则解析器 scrapy startproject name cd name scrapy genspider -t crawl spi xxx.com # 基于CrawlSpider类 scrapy crawl spi 基于终端指令的 // scrapy crawl first -o qiubai.csv #指定文件类型有要求.json .csv 基于管道的 // 定义管道类 注册管道类 不同管道类之间return item # 爬虫: 发请求,解析数据 #将url封装请求对象,引擎,调度器(过滤器(去重) 队列(容器 过滤后的请求对象)) 先进先出 引擎 下载器 引擎 spider.response 解析数据 引擎 管道 持久化 # 管道: 接收item, # 调度器: # 下载器: 去互联网请求 # 下载中间件作用:拦截请求和响应 # -拦截请求: # 1 篡改请求头UA UA池,随机random.choice() # 2 设置相关请求对象的代理IP(process_exception中) # 引擎(核心): 数据流处理,处理事务 # POST请求的发送: # 重写def start_requests(self): # yield scrapy.FormRequest(url,callback,formdata) # scrapy 默认是自己处理cookie的, settings.py里面COOKIES_ENNABLE=False # # 日志等级 # settings.py 里面 LOG_LEVEL='ERROR' # # 日志路径 # settings.py 里面 LOG_FILE = 'path' # # 请求传参的应用场景: # 爬取和解析的数据不在同一张页面上面 # 在请求方法中使用meta(字典)参数,该字典会传递参数给回调函数 # 回调函数接收meta:response.meta['key'] settings.py 里面 LOG_LEVEL = ERROR ROBOTSTXT_OBEY = False USER_AGENT = 'Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/69.0.3497.81 Safari/537.36' ITEM_PIPELINES = { }