scrapy 设置笔记

1、 设置多个feed exporter

使用FEEDS参数,(在爬虫类里添加类变量,

 

 

使用ip代理

https://www.jianshu.com/p/c656ad21c42f

 

custom_settings = {
'FEEDS' :{
'items.json': {
'format': 'json',
'encoding': 'utf8',
'store_empty': False,
'fields': None,
'indent': 4,
},
'/home/user/documents/items.xml': {
'format': 'xml',
'fields': ['name', 'price'],
'encoding': 'latin1',
'indent': 8,
},
'items.csv': {
'format': 'csv',
'fields': ['brand', 'company'],
},
}
}

2、在爬虫里实现增爬可使用

def start_requests(self):

for url in urls[::-1]:
id = url.split('/')[-1]
if id in ids:
continue
else:
yield scrapy.Request(url=url, callback=self.parse_brand, headers=QuotesSpider.headers)
def parse_category(self, response):

text = transfer(response.text)
# with open('i.html', 'w',encoding='utf8') as f:
# f.write(text)
datas = eval(text)
brands = datas['brands']
for i in brands:
url ='https://fa.kaoputou.com/api/brand/{}'.format(id)
yield scrapy.Request(url=url, callback=self.parse_brand, headers=QuotesSpider.headers)

def parse_brand(self, response):
text = transfer(response.text)
datas = eval(text)
# with open(i['name'] + '_1', 'w', encoding='utf8') as f:
# f.write(str(i))
item = BrandItem()
item['id'] = datas['slug']
item['brand'] = datas['name'] if 'name' in datas else None
yield item

但是要注意,我们配置settings里面并发为1的时候,只限制了第一个解析函数parse_category,而第二个parse_brand依然是并发的,这就可能会导致触发反爬。目前还不知道原因
爬虫的时候尽量不使用增爬可能是对的,先把所有url爬下来,然后最后parse_brand的时候,对面有做反爬处理,所以我们在这个请求函数里面,严格控制1个并发,因为我们是要登陆的,并发超过1会立刻触发反爬


3、爬虫得到的response如果是jason, 则应该转换
def transfer(text):
dic = {'null':'None','false':'False','true':'True'}
for k,v in dic.items():
text = text.replace(k,v)
return text

这样才可以eval(response.text)

requests 如果不设置headers,会默认使用'Content-Type':'text/plain'进行请求,而我们一般是使用json,所以需要带上请求头
headers = {'Content-Type':'application/json'}
response = requests.post('http://127.0.0.1:5002/find_user',data=js, headers = headers)


====================ip随机代理====================

https://github.com/aivarsk/scrapy-proxies

=
==========================================
scrapy 必填参数!!!!
1、并发设置
2、delay设置
3、cookies_encable ,如果要传cookies这个一定要带!
4、Robotstxt_obey是否遵循
posted @ 2020-08-06 11:35  yjy888  阅读(139)  评论(0编辑  收藏  举报