pip install wheel 下载twisted http://www.lfd.uci.edu 进入下载目录,执行pip install Twisted pip3 install pywin32 pip3 install scrapy
scrapy startproject ProName
spiders:爬虫文件夹
必须存放一个爬虫源文件
settings.py: 工程的配置文件
cd ProName
scrapy genspider spiderName www.xxxx.com
编写对应的代码在爬虫文件中
执行工程后会默认工程所有日志信息。
指定类型日志的输出
爬虫文件spiderName内容阐述
name: 爬虫文件的唯一标识
start_urls:起始url列表,存储的都是url.url可以被自动执行get请求的发送
parse方法:请求后的数据解析操作
1.禁止robots协议
2.指定日志类型: LOG_LEVEL=‘ERROR’
UA伪装
命令: scrapyy crawl duanzi -o duanzi.csv
步骤一中解析了几个字段的数据,在这就定义几个属性
name = scrapy.field()----field()定义的是万能类型的属性
导入项目文件的item中,实例化item对象,将解析到的数据存储到对象中
item = wangziproitem()
item ['title] = title,item[‘content’] = content,不可以通过.的形式调用属性
yield item
process_item是用来接收item对象的(参数item就是接收的item对象)item其实就是一个字典
将爬取的数据分别存储到不同的载体中,
如果将数据存储到不同的载体中需要使用多个管道类
item 会根据优先级:只会被提交给优先级最高的那个管道类
优先级高的管道类需要在process_item中实现retuern item ,传递到下一个执行的管道类
import pymysql # 将数据存储到mysql中 class MysqlPileLine(object): conn = None # 游标 cursor = None def open_spider(self,spider): self.conn = pymysql.Connect(host='127.0.0.1',port= '3306',user = 'root',passward = '123456',db = 'spider') def process_item(self,item,spider): self.cursor = self.conn.cursor() sql = 'insert into 表名 values("%s","%s")'%(item['title'],item['content']) #事务处理 try : self.cursor.execute(sql) self.comm.commit() except: Exception as e: print(e) #事务回滚 self.conn.rollback()
import redis import Redis # 将数据写入到redis中 class RedisPinline(object): def open_spider(self,spider): self.conn = redis(host='127.0.0.1'.port=6379) def process_item(self,item,spider): self.connlpush('duanzidata',item)
- yield scrapy.Request(url,callback):GET - callback 指定解析函数,用于解析数据 - yield scrapy.FormRequest(url,callback,formdata):POST - formdata:字典,请求参数 - 为什么 start_urls列表中为什么会被自动请求 - 列表中的url其实是被start_requests这个方法实现get请求发送 - 可以使用父类方法的重写 - 如何将 start_urls列表中进行post请求,进行重写