scrapy学习
- 获取html的str文本
- response.text
- 获取bytes的html文本
- response.body
- 数据重复怎么办(后一次循环的时候会改变前一次循环的结果。)
- 使用deepcopy
- url地址js生成的
- 寻找规律
- 在响应中会有当前的页码数和总的页码数
crawlspider
- 如何使用
- 创建爬虫 scrapy genspider -t crawl 爬虫名 域名
- 指定start-url
- 完善rules
- 元组
- Rule
- LinkExtractor
- 通过规则提取url
- allow 正则
- callback
- 连接提取器提取url的响应会交个他处理
- follow
- LinkExtractor
- 完善callback
- crawlspider的使用场景
- url的规律能够通过正则或者xpath表示
- 最终的页面有全部的数据的时候使用(如果没有,在callback中自动手动构造请求)
- 注意点
- parse函数不能定义
下载中间件
- process_request
- 处理请求
- 添加随机的UA
- request.headers[“User_Agent”]=…
- 添加代理
- request.meta[“proxy”]=“ip+port”
- 不需要return
- process_response
- 处理响应
- 需要return request ,response
模拟登陆
- 携带cookie登陆
- scrapy.Request(url,callback,cookies={})
- 不能把cookies放在headers中,无效
- 使用FormRquest
- scrapy.FromRequest(url,formdata={},callback)
- formdata:请求体
- scrapy.FromRequest(url,formdata={},callback)
- 自动寻找form表单中的action的url
- scrapy.FromRequest.from_response(response,formdata={},callback)
scrapy 中使用mongodb储存数据
- from pymongo import MongoClient
- 实例化一个client对象,创建数据库和表
- client = MongoClient()
- collection = client[“数据库名”]‘[ “表名”]
- 向表中添加数据
- collection.insert(item)