• 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)

  • 相关阅读:
    多表查询 left join
    对JS关于对象创建的几种方式的整理
    常见正则表达式
    spring
    富文本编辑器
    Struts2快速入门
    一个MySql Sql 优化技巧分享
    maven
    day3
    Spring MVC
  • 原文地址:https://www.cnblogs.com/yjybupt/p/13445253.html
Copyright © 2020-2023  润新知